Come faccio a ripetere (ovvero "annulla annullare") in Vim?


697

In Vim ho annullato troppo. Come posso annullare questo (ovvero, ripetere)?


106
dato che ho già raccolto 2 voti ravvicinati, penso che questo appartenga qui perché Vim è un editore di programmatori.
flybywire,

28
Sono d'accordo, questo è legato alla programmazione ed è una vera domanda.
DigitalRoss,

41
Qualcuno qui va in giro e segna ogni domanda di Vim come "appartiene a SU" nonostante la comunità abbia deciso da tempo che Vim appartiene a SO, essendo uno strumento di programmazione.
Brian Carper,

@Brian: hai un link al documento in cui è stato raggiunto questo consenso?
troppo php,

12
meta.stackexchange.com/questions/20251/… ma ricordo questo in arrivo l'anno scorso qualche volta. Vim / Emacs sono IDE. Inoltre i linguaggi utilizzati nei file di configurazione per entrambi sono linguaggi di scripting completi di Turing, quindi l'atto di impostare Vim è esso stesso la programmazione per cominciare.
Brian Carper,

Risposte:


907

Ctrl+r


2
Vorrei solo lanciare il plugin undoTree là fuori, super fantastico per le volte in cui ti sei apparentemente fregato con una raffica di annullamenti e ripetizioni.
Jake Sellers,

3
Se sto leggendo di vi, le mie dita si comportano da sole. I comandi vi non funzionano su StackOverflow. :-)
ciscogambo,

2
Nota per gli utenti Mac: Ctrl + r in un terminale Mac rovinerà la tua giornata in vim. Non si conosce la combinazione di tasti corretta nel terminale Mac da annullare, ma sicuramente NON è Ctrl + r!
martedì

@tpartee Ho appena usato Ctrl + r in vim sotto l'app Terminale di macOS - nessun problema qui.
Jase,

3
Forse @tpartee significava rovinare le Cmd + rcose? Fa sicuramente qualcosa di strano; ma ha Ctrl + rfunzionato bene per me (Mac + tmux + vim)
dwanderson il

133

Controlla anche :undolist, che offre più percorsi attraverso la cronologia degli annullamenti. Ciò è utile se si digita accidentalmente qualcosa dopo aver annullato troppo.


22
@amindfv: prendi il numero da :undoliste digita :undo 178(diciamo) per tornare indietro al passo 178.
Peter,

c'è un modo per mostrare cosa verrà annullato esattamente :undolist?
csharpfolk,

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

54

Usa :earlier/ :later. Per ripetere tutto ciò che devi fare

later 9999999d

(presupponendo che il file sia stato modificato per la prima volta al massimo 9999999 giorni fa) oppure, se si ricorda la differenza tra lo stato di annullamento corrente e quello necessario, utilizzare rispettivamente Nh, Nmoppure Nsper ore, minuti e secondi. + :later N<CR><=> Ng+e :later Nfper le scritture di file.


1
:laterha funzionato per me in vi(non vim - cercato "vi" su google ma tutti i risultati sono per "vim"), grazie!
Luc,

@Luc Quasi ovunque tu abbia il vicomando è un collegamento simbolico a un eseguibile vim o una sua copia. Non completamente dappertutto però.
ZyX,

@ZyX Vorrei che fosse vero. Uso vi solo dopo aver lanciato bash a vim: command not found. La prossima cosa che faccio è alias vim=viperché la scrivo così automaticamente, ma è comunque la vecchia vi. Inoltre, redo (ctrl + r) avrebbe funzionato correttamente se vi fosse stato un alias per vim.
Luc,

2
9999999d è 27395 anni fa. Presumo che la funzione di annullamento non fosse implementata in vi allora. Potresti voler risparmiare un po 'di sforzo di digitazione esaustivo e usare un numero ragionevole. 9999d corrisponde a circa 27 anni, 999d a 2,7 anni. Immagino che nella maggior parte dei casi sia abbastanza ...
ChristophK il

45

Documentazione 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

Premere prima il Esctasto per uscire dalla modalità di modifica.

Poi,

Per annullare , utilizzare il utasto tutte le volte che si desidera annullare.

Per ripetere , utilizzare il tasto Ctrl+r


11

Fare riferimento alla parte "annulla" e "ripristina" del documento Vim .

: red [o] (Ripeti una modifica annullata) e {count} Ctrl+r (Ripeti {count} modifiche annullate) sono entrambi ok.

Inoltre, il precedente {count} (vai allo stato di testo precedente {count} volte) potrebbe sempre essere un sostituto di annulla e ripeti.


5

CTRL+r

La "r" è minuscola.


9
In realtà, non dovrebbe importare: le console tradizionali non fanno distinzioni tra ^re ^R, e Vim lo segue.
effimero

@ephemient: d'accordo. In MS-DOS, non è nemmeno possibile digitare una lettera minuscola ^X(dove Xpuò essere qualsiasi lettera).
nyuszika7h,

In Vim, Ctrl-shift-R (ctrl con R maiuscola) è la modalità di sostituzione.
Paul Stelian,

5

Usi VsVim per Visual Studio?

Mi sono imbattuto in questo durante la sperimentazione di VsVim, che fornisce collegamenti per i comandi Vim in Visual Studio .

Lo so Ctrlr Vim stesso, ma questa associazione specifica non funziona in VsVim (almeno non nella mia configurazione?).

Ciò che funziona, tuttavia, è il comando :red. Questo è un po 'più una seccatura di quanto sopra, ma va ancora bene quando ne hai davvero bisogno.


Sottovalutato perché la domanda è specificamente rivolta a Vim, non a Visual Studio.
John Von Neumann,

3
@JohnVonNeumann Questo è legato a Vim, o almeno ai legami di Vim, proprio nel contesto di VS. Questo è ciò che mi ha portato a questa domanda, dopo tutto. Punire qualcuno per aver aggiunto un po 'più di informazioni sembra un po' duro e non richiesto, non credi, anche se forse si espande leggermente oltre l'ambito dell'OP?
Kjartan,

2

In pratica, :undolistè difficile da usare e Vim's :earliere:later monitoraggio del tempo delle modifiche sono utilizzabili solo per le correzioni di rotta.

Detto questo, ricorro a un plug-in che combina queste funzionalità per fornire un albero visivo di annullamenti sfogliabili, chiamato "Gundo".

Ovviamente, questo è qualcosa da usare solo quando hai bisogno di una correzione a grana fine o non sei sicuro dell'esatto stato del documento in cui desideri tornare. Vedi: Gundo. Rappresenta graficamente il tuo albero di annullamento Vim con stile

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.