Altri modi per uscire dalla modalità Inserisci oltre a Escape


74

Il motivo principale per cui mi piace vim su emacs è che la mia distanza di movimento della mano dalla fila di casa è molto bassa (anche come programmatore). Tuttavia, l'unica volta che lo faccio è uscire dalla modalità di inserimento, premendo Esc.

Di recente ho imparato che posso usare Ctrl + C anche per uscire dalla modalità di inserimento. Tuttavia, questo non è davvero un miglioramento.

Come posso uscire dalla modalità di inserimento senza che le mie mani lascino la riga iniziale e senza influire in modo massiccio su ciò che ho la possibilità di digitare? Nota: uso principalmente un vim vaniglia con un layout di tastiera dvorak, anche se mi piacerebbe sentire anche soluzioni per un layout qwerty.


1
Puoi mappare qualsiasi combinazione di tasti ovunque e non puoi fare nient'altro. È questo che vuoi dire?
yo

3
Ho imparato la scorciatoia Ctrl + c THX!
Philippe Gachoud,

Che ne dici di mappare Caps Lock come Esc?
Kolob Canyon,

@PhillippeGachaud: non usare Ctrl-C in sostituzione di Esc. Ctrl-C non è lo stesso di Escape, è un'Escape forzata e può comportarsi diversamente in alcune circostanze.
Lie Ryan

Risposte:


60

Un'associazione comune che vedrai è jj , perché funziona bene per i layout QWERTY se usi il posizionamento della riga home.

inoremap jj <ESC>

In tal caso, per digitare un valore letterale jj, è necessario attendere 1 secondo (per impostazione predefinita) tra la digitazione del secondo carattere. (vedi :help 'timeout'per dettagli)

C'è anche quello c-oche ti porterà fuori da insert, permettendoti di eseguire un normale comando e poi rimetterti a inserire.

http://vim.wikia.com/wiki/Avoid_the_escape_key


1
In dvorak, jè la cchiave. Quindi questo non sarebbe troppo male (da digitare cc). Potrei anche legare hh(qwerty jkey = dvorak h), che mi farebbe partire solo se stavo scrivendo shhhhhhho qualcosa del genere.
durron597,

7
cc è una combinazione di chiavi a due lettere molto più comune, almeno in inglese. Quindi questa potrebbe non essere la scelta migliore
Nick J Adams,

4
Che ne dici di imitare jk? Trova due chiavi adiacenti in Dvorak ma non combinazioni comuni nella tua lingua preferita. tn, ad esempio, è l'equivalente posizionale di jk.
David Lord,

1
Mi piace avere jk/ kjuscire dalla modalità normale anche in Dvorak; sono i tasti "c" e "v" su una tastiera QWERTY, quindi sono facili per il mio puntatore sinistro e il dito medio.
alxndr,

2
Penso che possiamo fare ancora meglio - usa iiinvece. Sì, devi spostare le dita dalla fila di casa ma è comunque comodo. E ancora di più, puoi passare da una modalità all'altra senza muovere il dito.
Sridhar Sarnobat,

38

Oltre alle alternative integrate <C-[>e <C-c>alla <Esc>chiave citata da altri, un'altra soluzione popolare è rimappare <CapsLock>come Fuga aggiuntiva. Questo sia su una tastiera Qwerty che Dvorak.

In questo modo puoi premere Esc molto facilmente con il mignolo sinistro, senza rimuovere le mani da HomeRow (per inciso, CapsLock è dove Escape si trovava sulle tastiere quando è stato inventato vi).

La rimappatura può essere effettuata:

  • su Windows utilizzando l' utilità AutoHotKey ;
  • su Mac utilizzando l' utilità KeyRemap4MacBook e altri;
  • su Linux, varia in base all'ambiente desktop. Ad esempio su Linux Mint / Cinnamon è solo una questione di selezionare l'opzione corretta in Menu-> Tastiera-> Layout tastiera-> Comportamento Blocco maiuscole. In alternativa, ma meno facilmente, può essere rimappato a livello di Xorg usando il programma xmodmap e facendolo eseguire il seguente .Xmodmapfile:

    clear Lock
    keycode 0x42 = Escape
    

    Il sistema può essere configurato per eseguirlo automaticamente ad ogni accesso posizionando strategicamente le seguenti righe di script di shell (supponendo che .Xmodmapsi trovi sulla tua home ~directory) nella catena di file di provenienza automatica di accesso:

    if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
    fi
    

    È tuttavia complicato, poiché i file effettivamente forniti variano in base all'ambiente (desktop) utilizzato. Ad esempio, ho xmodmap chiamato come voce in "Applicazioni di avvio" di Cinnamon (che mi consente di fare più della personalizzazione di rimappatura della chiave della GUI standard).

Alcune persone vanno ancora oltre e programmano il tasto CapsLock per comportarsi:

  • come Ctrltasto tenendolo premuto,
  • come Esctasto premendo e rilasciandolo rapidamente.

Questo può essere fatto su Windows e Mac impostando / programmando correttamente l'utilità di rimappatura corrispondente (in particolare per i suggerimenti AutoHotkey è possibile trovare qui e per KeyRemap4MacBook controllare qui ). Su Linux usando il programma xcape .


2
Pienamente d'accordo. Avere il tasto ctrl nella riga home migliora la fruibilità (scorrendo i completamenti con ctrl + n, scorrendo il file con ctrl + f / ctrl + b, scappando con ctrl +] ecc. Tutte queste combinazioni di tasti sono più facili da eseguire in questo modo
John O'M.

1
A proposito di premere il Ctrltasto (in posizione normale) senza ruotare il mignolo: puoi premerlo con il palmo esterno della mano, come è ben descritto qui (ho trovato questo simpatico trucco intelligente sulla 'Rete, il tempo di darlo indietro :) e complimenti a chi l'ha inventato)
Giovanni Maggiorani,

FWIW KeyRemap4MacBook è stato rinominato Karabiner: pqrs.org/osx/karabiner/index.html.en
alxndr

Ho provato questa soluzione, ma ho scoperto che ho premuto il tasto BLOC MAIUSC per sbaglio quando ho premuto Shift alcune volte, il che è stato fastidioso. Quindi il tuo chilometraggio può variare a seconda di quanto sia agile il tuo mignolo sinistro. :)
Godsmith,

2
Se rimappate Ctrlin Alt( Cmd) e viceversa, allora <C-[> brilla davvero. Pinky è debole, il pollice è forte. Su QWERTY non hai nemmeno bisogno di lasciare la fila per quello, su Dvorak non è così buono, ma accettabile.
Nash Bridges,

28

I mapping che utilizzo sono:

inoremap jk <esc>
inoremap kj <esc>

In questo modo, puoi semplicemente colpire je kallo stesso tempo, senza doverti preoccupare di quale premi per primo.


70
Ma sto scrivendo un libro su come giocare a Edsgar Dijkstra giocando a blackjack a Reykjavik! ;)
durron597,

Entrambi sono orribili se vuoi scrivere un olandese.
Hielke Walinga,

12

<C-[>e <C-c>sono due alternative native a <Esc>.

Vedi :help i_<esc>e :help i_ctrl-cche spiega la differenza tra <C-c>e <Esc>.


Ancora una volta, questi non sono miglioramenti, poiché Ctrl è tanto lontano dalla riga principale quanto Escape.
durron597,

4
@ durron597 Su una tastiera QWERTY, Ctrl potrebbe essere altrettanto lontano dalla riga home, ma ha una differenza importante: è sotto la riga home. Devi solo muovere il dito per premerlo, mentre con Esc devi ruotare leggermente l'intera mano. Inoltre, <C-[>ha una bella simmetria (entrambi i mignoli si muovono in direzioni opposte).
mercoledì


2
Concordato. L'uso abituale di <C-c>può rompere delicatamente plug-in e autocmds.
David Lord,

Sulla mia macchina, è <C - [> funziona, ma ci vuole mezzo secondo in più per registrarsi rispetto a <Cc>
Alexander Mills,

4

È possibile mappare Caps Locka Control senza l'utilizzo di alcun programma esterno :

  • In Mac OS X visitare Preferenze di Sistema> Tastiera -> Tasti modificatori
  • In Linux eseguire:setxkbmap -option caps:ctrl_modifier
  • In Windows modifica il registro.

Questo porta Controlsulla riga iniziale, rendendo più semplice premere tutti i tratti modificati di Control, inclusi Ctrl-[e Ctrl-Cche entrambi escono dalla modalità Inserisci in Vim.

In alternativa, in fondo alla sua risposta Giovanni suggerisce di mappare Caps Lockper eseguire entrambi Control e in Escape base alla lunghezza della stampa, ma ciò richiede l'installazione di software aggiuntivo.

Ctrl-[è l' alternativa preferita , poiché funziona sempre come Escape.

Una differenza evidente con Ctrl-Cè che quando si lascia una modifica in modalità visuale a blocchi , Ctrl-Cmanterrà le modifiche apportate sulla linea corrente, ma non ripeteranno le modifiche sulle altre linee nel blocco, che è il punto di quella modalità.

Inoltre, non controllerà le abbreviazioni né attiverà l'evento InsertLeave. Vedere:help i_CTRL-C


4

Suggerirei di usare il mio plugin vim-easyescape .

Plug "zhou13/vim-easyescape"
let g:easyescape_chars = { "j": 1, "k": 1 }
let g:easyescape_timeout = 100
cnoremap jk <ESC>
cnoremap kj <ESC>

Il problema con una semplice sequenza di mappe inoremap jj <ESC>è che Vim si metterà in pausa ogni volta che si digita jo kin modalità di inserimento (è in attesa del tasto successivo per determinare se applicare la mappatura). La pausa provoca distrazione visiva che potresti notare o meno. vim-easyescape non ha questo problema e supporta il timeout personalizzato.


3

Nel terminale vi e Vim, alt+ single-normal-mode-keyfunzionerà per le modifiche rapide nella maggior parte dei terminali.

Questo funziona perché la maggior parte dei terminali invia il modificatore alt come carattere di escape. Ad esempio, quando si digita alt+kl'emulatore di terminale invia due caratteri al programma in esecuzione: esc, k. Vi e Vim interpretano questo come ci si aspetterebbe; lascia la modalità di inserimento (a causa dell'escape) ed esegue il normale comando di modalità (nell'esempio, spostando il cursore su una riga).

Questo può essere un modo conveniente per uscire dalla modalità di inserimento se la tua tastiera ha il tasto alt vicino alla barra spaziatrice (in modo che possa essere premuto con il pollice, lasciando le dita sulla riga iniziale), purché tu stia utilizzando un emulatore di terminale con questo comportamento e non dispiace eseguire un comando in modalità normale.


2
Puoi approfondire cos'è single-normal-mode-key? Vuoi dire Fuga?
Kenorb,

Una singola pressione del tasto che useresti in modalità normale può essere usata in modalità inserimento con il tasto alt. ad esempio Alt + x per eliminare un carattere.
ewatt,

2
Non capisco nemmeno questa risposta; Alt + x sembra effettivamente fare qualcosa di diverso da Alt in modalità normale? E alcune altre chiavi non sembrano funzionare? Ma forse lo sto usando male ..? Forse potresti ampliare un po 'la tua risposta per spiegare come funziona e anche il collegamento ad alcuni documenti di Vim sarebbe buono :-) Grazie! :-)
Martin Tournoij,

che in realtà dipende dalla configurazione del terminale e non è generalmente impostato come sembra suggerire.
Christian Brabandt,

1
Ho votato a fondo, poi ho controllato la storia e mi sono reso conto che per qualche motivo un moderatore l'aveva modificato per aggiungere il 99% del testo dal nulla, piuttosto che lasciare un commento come tutti noi dovremmo fare. Quindi ho dovuto invertire il mio voto. Sicuramente cosa è successo qui va oltre lo scopo delle modifiche sensibili? Ho rifiutato modifiche molto meno dirompenti. Il nuovo contenuto è fantastico, certo, ma non appartiene a questa risposta. Avrebbe dovuto essere suo.
underscore_d

3

FWIW che uso:

:map! ;l ^[
:vmap ;l ^[

È simile a colpire Return. Uso ;come leader anche per altre mappature in modalità inserimento.

L'unica volta che ho avuto bisogno di digitare ';' + lettera è quando si gioca a golf; Non ho avuto conflitti altrimenti.


forse meglio mapparlo per fuggire che mapparlo su ^ [giusto? :)
Alexander Mills,

2

Uso Ctrl+ 3da un po 'di tempo, trovo più facile da scrivere rispetto alla maggior parte delle alternative e sembra funzionare bene (almeno su Linux). Il mio Caps Lockè mappato su Ctrl, quindi è molto comodo digitarlo.

Ho provato a usare Ctrl+ cper un po 'di tempo, ma ho avuto alcuni problemi con cui non ricordo esattamente ora, ma non stavo ottenendo lo stesso identico comportamento Esc, come ho ora con Ctrl+ 3.


2
Cosa dovrebbe fare esattamente Ctrl-3?
Christian Brabandt,

Non so come funzioni, ma funziona come Escin Vanilla Vim. L'ho trovato empiricamente testando combinazioni, non conosco dettagli su come funzionano gli interni.
elias,

1
Questa non è una cosa vi, funziona anche sulla shell. Molto utile nel caso in cui la modalità vi sia abilitata sulla shell con bindkey -v
golfadas,

1

Se hai una tastiera inglese americana, premere Ctrl- [equivale a premere Esc. Ciò fornisce un modo semplice per uscire dalla modalità di inserimento. In alternativa, utilizzare Ctrl- c.

Se hai vim in modalità facile ( -y), devi premere Ctrl- l(Control-L) per uscire dalla modalità di inserimento.

C'è anche Ctrl+ oche uscirà temporaneamente dalla modalità di inserimento solo per eseguire un comando e tornare alla modalità di inserimento (vedi :help i_CTRL-O:)

O Ctrl+ r, ma è solo per l'inserimento di contenuto del registro o di espressione, ad esempio Ctrl+ r, =5*5(vedi: :help i_CTRL-R, :help c_CTRL-Re dopo StackOverflow ).

Maggiori informazioni su: Evita la chiave di escape su vim wikia


3
Cordiali saluti: Ctrl+rè per l'inserimento di registri (inclusa l'espressione =reg). Se si desidera eseguire temporaneamente un comando una tantum, utilizzare Ctrl+o.
Sukima,

1

Ho optato <A-e>per la fuga:

noremap  <A-e> <Esc>
snoremap <A-e> <Esc>
inoremap <A-e> <Esc>
tnoremap <A-e> <Esc>

" For some reason in command line mode '\e' is interpreted as Enter.
cnoremap <A-e> <C-c>

Modifica: ho appena scoperto <C-\><C\n>quale ti manda in modalità normale da qualsiasi altra modalità. Ha anche un comportamento generale migliore. Le mappature diventano:

noremap <A-e> <C-\><C-n>
noremap! <A-e> <C-\><C-n>

0
nnoremap <C-I> <C-I>
vnoremap <Tab> <Esc>gV
onoremap <Tab> <Esc>
inoremap <Tab> <Esc>`^

Rimappare la scheda per uscire. Penso che storicamente sia dove si trovava la chiave esc, quindi l'ho usata e non ho mai guardato indietro. Non ho quasi mai bisogno di inserire una scheda in un documento e quando lo faccio premo maiusc + tab. Non ho mai perso la rilegatura originale della scheda.


Il paragrafo su vim ed emacs è completamente inutile ...
D. Ben Knoble
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.