Annulla in modalità inserimento


23

Esiste un comando per annullare l'ultima operazione eseguita in modalità inserimento?

Ho appena incollato il testo dal registro sbagliato usando <C-r>e ho due opzioni:

  1. Elimina a mano ciò che ho appena incollato e ricomincia.
  2. Passa alla modalità normale, premi ue perdi il testo digitato prima di premere <C-r>.

Esiste un modo migliore?

Risposte:


16

Vim offre una capacità limitata di specificare l'ambito di una modifica annullabile con il Ctrl-G ucomando, che interrompe la sequenza di annullamento. Vedere

:help i_CTRL-G_u

Nel tuo caso, la soluzione sarebbe rimappare in <C-R>questo modo:

:inoremap <C-R> <C-G>u<C-R>

Quindi la digitazione <C-O>uannullerà solo le modifiche apportate da quando hai digitato <C-R>. Vedere

:help i_CTRL-O

1
È geniale, non sapevo di questo comando. C'è un ritardo piuttosto lungo tra la digitazione <C-O>ue la visualizzazione del risultato sullo schermo (circa 4 secondi), hai idea di come potrei liberarmene?
zool,

L'ho notato anch'io. Non lo so; Proverò a scoprirlo.
garyjohn,

Ehi, è possibile che tu abbia inteso <CR> (ritorno a capo) invece di <CR> (ctrl-r)?
Derwent,

No. La domanda originale aveva a che fare con il comportamento di <CR>, quindi è quello che usa la mappatura. Tuttavia, è possibile sostituire <CR> con <CR> in quella mappatura per interrompere invece la sequenza di annullamento di un <CR>. Altri esempi sono disponibili all'indirizzo :help i_CTRL-G_u.
garyjohn,

6

Dalla modalità di inserimento:

  1. Se il testo incollato è più piccolo di una riga (che è ciò che implica il tuo secondo punto), premi semplicemente <C-u>per rimuovere tutti i caratteri prima del cursore nella riga corrente.

  2. Se il testo incollato è più di una riga, la tua seconda soluzione sarebbe lavorare meglio, con gli adattamenti seguenti: <C-o>u.

Entrambi i punti precedenti inizieranno e rimarranno - o finiranno - in modalità inserimento; sono in realtà le stesse delle soluzioni proposte, abbreviate :)


6

Puoi provare <C-w>(elimina una parola a sinistra) o <C-u>(cancella i caratteri prima del cursore quando viene premuto una volta, elimina l'interruzione di riga quando viene premuto una seconda volta). Vedi :help i_CTRL-We :help i_CTRL-U.

Se si incolla molto da un registro, è ovviamente più veloce annullare le modifiche, è possibile utilizzare insert-normal-mode con <C-o>quello (eseguire un comando in modalità normale, quindi tornare alla modalità di inserimento).

In generale, è utile tagliare le modifiche in piccoli pezzi tornando spesso in modalità normale, in modo da avere possibilità di annullamento a grana fine.

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.