Bagaimana saya melakukan redo (yaitu "undo undo") di Vim?


697

Di Vim, saya melakukan terlalu banyak membatalkan. Bagaimana saya membatalkan ini (yaitu, ulang)?


106
karena saya sudah mengumpulkan 2 suara dekat, saya pikir ini milik sini karena vim adalah editor seorang programmer.
flybywire

28
Saya setuju, ini terkait dengan pemrograman dan ini adalah pertanyaan nyata.
DigitalRoss

41
Seseorang di sekitar sini berkeliling dan menandai setiap pertanyaan Vim sebagai "milik SU" meskipun komunitas telah lama memutuskan bahwa Vim milik SO, itu menjadi alat pemrograman.
Brian Carper

@ Brian: Apakah Anda memiliki tautan ke dokumen tempat konsensus ini tercapai?
terlalu banyak php

12
meta.stackexchange.com/questions/20251/… tapi saya ingat ini muncul tahun lalu kapan-kapan. Vim / Emacs adalah IDE. Selain itu bahasa yang digunakan dalam file konfigurasi untuk keduanya adalah bahasa scripting Turing-lengkap, sehingga tindakan pengaturan Vim itu sendiri pemrograman untuk memulai.
Brian Carper

Jawaban:


907

Ctrl+r


2
Saya hanya ingin membuang plugin undoTree di luar sana, sangat luar biasa untuk saat-saat Anda tampaknya mengacaukan diri Anda dengan kesibukan undo dan redos.
Penjual Jake

3
Jika saya membaca tentang vi, maka jari saya hanya bertindak sendiri. Perintah vi tidak bekerja pada stackoverflow. :-)
ciscogambo

2
Catatan untuk pengguna Mac: Ctrl + r di terminal Mac akan merusak hari Anda di vim. Tidak tahu kombo kunci yang tepat di terminal Mac untuk membatalkan, tetapi pasti TIDAK Ctrl + r!
tpartee

@partee Saya hanya menggunakan Ctrl + r dalam vim di bawah aplikasi Terminal macOS - tidak ada masalah di sini.
Jase

3
Mungkin @tpartee berarti Cmd + rmengacaukan segalanya? Ini tentu saja melakukan sesuatu yang aneh; tetapi Ctrl + rhanya bekerja dengan baik untuk saya (Mac + tmux + vim)
dwanderson

133

Lihat juga :undolist, yang menawarkan banyak jalur melalui riwayat undo. Ini berguna jika Anda secara tidak sengaja mengetik sesuatu setelah membatalkan terlalu banyak.


22
@amindfv: ambil nomor dari :undolistdan ketik :undo 178(katakan) untuk mundur ke langkah 178.
Peter

apakah ada cara untuk menunjukkan apa yang sebenarnya akan dibatalkan :undolist?
csharpfolk

2
@csharpfolk Gunakan plugin undotree ( github.com/mbbill/undotree )

54

Gunakan :earlier/ :later. Untuk mengulang semua yang perlu Anda lakukan

later 9999999d

(dengan asumsi bahwa Anda pertama kali mengedit file paling banyak 9999999 hari yang lalu), atau, jika Anda ingat perbedaan antara kondisi undo saat ini dan yang diperlukan, gunakan Nh, Nmatau Nsmasing-masing untuk jam, menit dan detik. + :later N<CR><=> Ng+dan :later Nfuntuk menulis file.


1
:laterbekerja untuk saya vi(bukan vim - mencari "vi" di google tetapi semua hasil untuk "vim"), terima kasih!
Luc

@ Luc Hampir di mana pun Anda memiliki viperintah itu adalah symlink ke vim executable atau salinannya. Tidak sepenuhnya di mana-mana.
ZyX

@ZyX Saya berharap itu benar. Saya hanya menggunakan vi setelah bash melempar a vim: command not found. Hal berikutnya yang saya lakukan adalah alias vim=vikarena saya mengetiknya secara otomatis, tetapi ini adalah vi yang lama. Juga, redo (ctrl + r) akan berfungsi dengan baik seandainya vi menjadi alias untuk vim.
Luc

2
9999999d adalah 27395 tahun yang lalu. Saya berasumsi bahwa fitur undo tidak diterapkan di vi saat itu. Anda mungkin ingin menghemat usaha pengetikan yang lengkap dan menggunakan angka yang masuk akal. 9999d correspongs hingga sekitar 27 tahun, 999d hingga 2,7 tahun. Saya kira dalam kebanyakan kasus itu sudah cukup ...
ChristophK

45

Dokumentasi Vim

<Undo>      or                  *undo* *<Undo>* *u*
u           Undo [count] changes.  {Vi: only one level}

                            *:u* *:un* *:undo*
:u[ndo]         Undo one change.  {Vi: only one level}

                            *CTRL-R*
CTRL-R          Redo [count] changes which were undone.  {Vi: redraw screen}

                            *:red* *:redo* *redo*
:red[o]         Redo one change which was undone.  {Vi: no redo}

                            *U*
U           Undo all latest changes on one line.  {Vi: while not
            moved off of it}


14

Pertama-tama tekan Esctombol untuk keluar dari mode edit.

Kemudian,

Untuk membatalkan , gunakan ukunci sebanyak yang ingin Anda batalkan.

Untuk mengulang , gunakan tombol Ctrl+r


11

Lihat bagian "undo" dan "redo" dari dokumen Vim .

: red [o] (Mengulang satu perubahan yang dibatalkan) dan {count} Ctrl+ r(Mengulangi {count} perubahan yang dibatalkan) keduanya ok.

Juga ,: {{}} awal (pergi ke keadaan teks lebih lama {count} kali) selalu bisa menjadi pengganti untuk undo dan redo.


5

CTRL+r

Huruf "r" adalah huruf kecil.


9
Sebenarnya, itu seharusnya tidak masalah - konsol tradisional tidak memiliki perbedaan antara ^rdan ^R, dan Vim mengikuti itu.
ephemient

@ephemient: setuju. Di MS-DOS, Anda bahkan tidak bisa mengetikkan huruf kecil ^X(di mana Xbisa huruf apa saja).
nyuszika7h

Di Vim, Ctrl-shift-R (ctrl dengan huruf besar R) adalah mode ganti.
Paul Stelian

5

Menggunakan VsVim untuk Visual Studio?

Saya menemukan ini ketika bereksperimen dengan VsVim, yang menyediakan binding untuk perintah Vim di Visual Studio .

Saya tahu tentang CtrlrVim sendiri, tetapi pengikatan khusus ini tidak berfungsi di VsVim (setidaknya tidak di pengaturan saya?).

Apa yang tidak bekerja bagaimanapun, adalah perintah :red. Ini sedikit lebih merepotkan daripada yang di atas, tetapi masih baik ketika Anda benar-benar membutuhkannya.


Diturunkan karena pertanyaannya adalah menanyakan secara khusus tentang vim, bukan Visual Studio.
John Von Neumann

3
@JohnVonNeumann ini adalah terkait dengan Vim, atau binding setidaknya vim, hanya dalam konteks VS. Itulah yang membawa saya ke pertanyaan ini. Menghukum seseorang karena menambahkan sedikit info lebih lanjut tampaknya agak keras dan tidak pantas untuk Anda pikir, bahkan jika itu mungkin sedikit meluas melampaui ruang lingkup OP?
Kjartan

2

Secara praktis, :undolistsulit untuk digunakan dan pelacakan Vim :earlierdan :laterwaktu perubahan hanya dapat digunakan untuk perbaikan butir saja.

Karena itu, saya menggunakan plug-in yang menggabungkan fitur-fitur ini untuk menyediakan pohon visual undos yang dapat dijelajahi, yang disebut "Gundo."

Jelas, ini adalah sesuatu untuk digunakan hanya ketika Anda membutuhkan perbaikan yang halus, atau Anda tidak yakin dengan keadaan pasti dari dokumen yang ingin Anda kembalikan. Lihat: Gundo. Buat grafik Vim batalkan pohon dengan gaya

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.