Rimappa il tasto Esc in Vim


12

È possibile rimappare la Escchiave in un'altra chiave in Vim? Quando utilizzo Vim in una finestra della console del client Web VMware vSphere a schermo intero e premo il Esctasto per uscire dalla modalità di modifica, mi porta anche fuori dalla modalità a schermo intero nella finestra della console.

Sto usando il Vim che proviene dal repository RHEL YUM. (RHEL 7.5; Vim 7.4).



2
Qualunque cosa tu faccia, non mappare esc su qualcos'altro. Mappa qualcos'altro su esc.
D. Ben Knoble

Risposte:


11

Di solito, C-[è anche un modo per uscire dalla modalità di inserimento. Ad alcune persone piace mappare jjin modalità inserimento come modo per uscire e tornare alla modalità normale. Personalmente preferisco jhche le mie dita scivolino meglio con questo e non mi sforzo molto il dito medio.

Da qualche parte nelle mie impostazioni di neovim:

inoremap jh <Esc>

Questo rimappa jhper uscire in modalità inserimento.

Questo è quello che volevi?


3
Ctrl- [è lo stesso di 'ESC'
Herb Wolfe

Ho giocato e scoperto anche questo funziona: ": inoremap <F1> <Esc>". Questo mappa il tasto F1 al posto del tasto Esc. Questo può essere abbreviato in ": ino <F1> <Esc>".
Beam Davis,

Inoltre, le lettere maiuscole non sono necessarie.
Beam Davis,

Sì, le maiuscole non sono necessarie e 'ino' è più breve da scrivere, ma nelle mie configurazioni preferisco la brevità rispetto alle scorciatoie. Sono contento di aver aiutato!
Amir Eldor,

Mentre la brevità è bella e tutto ... è l'anima dell'umorismo dopo tutto ... Immagino che tu intendessi qualcos'altro. Chiarezza? Verbosità? Non-brevità? ;)
B Layer,

8

TL; DR

In realtà è bello rimappare escalla riga iniziale. Ecco come decidi a cosa mappare: scegli una mano e fai scorrere le 4 dita sul desktop il più velocemente possibile in qualunque direzione sia la più veloce. Usalo per scegliere quali chiavi rimappare.

Per me è più naturale passare dal mignolo al dito indice. Pertanto ho scelto di usare kj. Inoltre, ho fatto un grep -rHin kj ~/src(grep ricorsivo nella directory principale di tutto il mio codice sorgente) e non ho trovato corrispondenze.

" esc in insert mode
inoremap kj <esc>

" esc in command mode
cnoremap kj <C-C>
" Note: In command mode mappings to esc run the command for some odd
" historical vi compatibility reason. We use the alternate method of
" existing which is Ctrl-C

Nota: se hai bisogno di digitare un valore letterale kj(o qualunque sia la tua mappatura), inseriscili tra 2 secondi. (Vedrai il cursore esitare a muoversi dopo il 1 ° carattere. Aspetta che si sposti prima di digitare il 2 °.)


Sto usando vimda 19 anni. Ero inorridito quando Apple ha aggiornato i suoi MacBook Pro per avere una barra di tocco e nessun esctasto fisico . Ho visto un post che ha suggerito la mappatura jje jkper <Esc>e odiato. Ma ho pazientemente annotato su una scheda ogni volta che mi ha infastidito. Circa 15 minuti dopo ho rivisto i miei appunti e ho trovato il TL; DR sopra per affrontare quanto segue:

  1. Tendo a colpire escassegnazione quando non sono in modalità inserimento solo per "essere sicuro" e jjmi lascerei cadere 2 righe.
  2. jkè un no-op (giù, su) ma kjè più naturale per le mie mani.
  3. Devo anche usare escper uscire dalla modalità comando senza completare il comando.

Spero di poter finalmente rompere l'abitudine di colpire escin altre applicazioni e chiudere finestre quando ho qualche minuto di tempo per scrivere. Preferirei di gran lunga inserire personaggi randagi kj piuttosto che perdere il mio lavoro!


1
Nota, per la tua cnoremap, quando esc proviene da una mappatura, eseguirà il comando, anziché interromperlo. Questo per motivi di compatibilità con vi
Christian Brabandt il

Sia in modalità insert che command, esc funziona ancora. Ma hai anche questa combinazione di riga home alternativa che usi anche. Forse non ho seguito il tuo punto.
Bruno Bronosky il

2
il punto è, per la modalità di comando, una fuga che deriva dalla mappatura non interromperà il comando, ma lo eseguirà. Prova:ls kj
Christian Brabandt il

@ChristianBrabandt hai ragione. Cosa si può fare al riguardo? O almeno, dove è documentato? Non riesco nemmeno a trovare termini di ricerca decenti per trovare qualcosa al riguardo.
Bruno Bronosky il

1
Non ricordo se questo è stato documentato, mi sono imbattuto in quel comportamento diversi anni fa. Ah, è un po 'documentato su :h c_Esc: Nelle macro [...] avvia il comando inserito. (Le macro di solito includono anche mappature)
Christian Brabandt,
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.