Uscita dalla modalità inserimento blocco con Ctrl-C


8

In vim, se sei in modalità inserimento blocco ( Ctrl-V, Shift-I) e esci usando Ctrl-C(invece di Esc), annulla la modifica del blocco (e modifica solo la prima riga).

Perchè è questo? In quasi tutti gli altri contesti, Ctrl-Ce Escsono sinonimi. (E idealmente c'è un modo per risolvere questo problema - ora mi sono abituato a fare Ctrl-Ce sarebbe un peccato se dovessi imparare di nuovo ...)

Risposte:


9

Ctrl-ce Escnon sono garantiti come sinonimi e spesso differiscono. Ad esempio, nella modalità Inserisci , Escattiveranno le abbreviazioni e passeranno alla modalità Normale , mentre Ctrl-cnon attiveranno le abbreviazioni né il InsertLeavecomando automatico e passeranno direttamente alla modalità Normale . Un altro esempio è nella vecchia vimodalità della riga di comando, in Escrealtà eseguirà il comando come se si fosse colpito Enter. Vim ha cambiato deliberatamente questo perché quel comportamento era ritenuto non intuitivo e sorprendente, ma puoi ancora abilitarlo aggiungendo xa 'cpoptions'.

Per quanto riguarda gli operatori visivi a blocchi, il blockwise-operatorstag di aiuto ha la seguente documentazione:

Visual-block Insert                     *v_b_I*
With a blockwise selection, I{string}<ESC> will insert {string} at the start
of block on every line of the block, provided that the line extends into the
block.  Thus lines that are short will remain unmodified.  TABs are split to
retain visual columns.

Si noti che Escè menzionato solo , non Ctrl-c.

Quindi no Ctrl-ce Escnon sono equivalenti. Non è mai una vergogna disillarsi di un malinteso. Una volta che lo avrai capito, puoi decidere cosa fare dopo. Le opzioni immediatamente ovvie sono apprendere le differenze e utilizzare la chiave corretta o decidere che non è necessaria la funzionalità di una delle chiavi e rimappare per corrispondere all'altra.


4
Gotcha. Per ora lo farò vnoremap <C-c> <Esc>ma terrò a mente quello che hai detto.
Sophie Alpert,

@BenAlpert: in realtà hai bisogno di nnoremap una inoremap con gli stessi valori per passare completamente a ctrl-c di Esc. Lo uso da anni ormai e funziona perfettamente per me. È un peccato che altre varianti di vi, come vile o nvi, non consentano questa soluzione alternativa, quindi mi sto perdendo la funzionalità abbr lì.
Alex,

0

Prova :map ^C escdove "^ C" è inserito tramite CTRL+, vquindi CTRL+ c.


Puoi spiegare perché questo è necessario? Quali altri effetti collaterali potrebbe avere?
Sophie Alpert,

Servono funzioni leggermente diverse. CTRL + C significa convenzionalmente "annullare questa azione" (in un contesto simile a unix). Annullare l'azione nel contesto di VIM significa "interrompere ciò che sta accadendo e tornare alla modalità normale". Escape in vim significa "Ho finito di tornare alla modalità normale".
donothings successo

Per quanto riguarda gli effetti collaterali, non me ne sono accorto. CTRL-C dopo :!catsembra ancora avere l'effetto desiderato dopo la mappa. In caso di problemi, provare ad esempio stty intr \^kal prompt della shell per modificare il carattere di interruzione del terminale in CTRL-k.
donothings successo
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.