Remapper la touche Esc dans Vim


12

Est-il possible de remapper la Escclé sur une autre clé dans Vim? Lorsque j'utilise Vim dans une fenêtre de console du client Web VMware vSphere en plein écran et que j'appuie sur la Esctouche pour quitter le mode édition, cela me fait également sortir du mode plein écran dans la fenêtre de la console.

J'utilise le Vim qui vient du repo RHEL YUM. (RHEL 7,5; Vim 7,4).



2
Quoi que vous fassiez, ne mappez pas esc à autre chose. Mappez autre chose à échapper.
D. Ben Knoble

Réponses:


11

Habituellement, C-[c'est aussi un moyen de sortir du mode d'insertion. Certaines personnes aiment mapper jjen mode insertion pour quitter et revenir en mode normal. Personnellement, je préfère jhque mes doigts «glissent» mieux avec cela et je ne fatigue pas beaucoup mon majeur.

Quelque part dans mes paramètres neovim:

inoremap jh <Esc>

Cela remappe jhpour s'échapper en mode insertion.

C'est ce que tu voulais?


3
Ctrl- [est le même que «ESC»
Herb Wolfe

J'ai joué et découvert également ces travaux: ": inoremap <F1> <Esc>". Cela mappe la touche F1 à la place de la touche Échap. Cela peut être raccourci à ": ino <F1> <Esc>".
Beam Davis

De plus, les majuscules ne sont pas nécessaires.
Beam Davis

Oui, les majuscules ne sont pas nécessaires et 'ino' est plus court à écrire, mais dans mes configurations, je préfère la brièveté aux raccourcis sympas. Je suis content d'avoir aidé!
Amir Eldor

Bien que la brièveté soit cool et tout ... c'est l'âme de l'esprit après tout ... Je suppose que vous vouliez dire autre chose. Clarté? Verbosité? Non-concision? ;)
B Layer

8

TL; DR

C'est vraiment sympa de remapper escsur la ligne à domicile. Voici comment vous décidez de la carte: choisissez une main et faites rouler vos 4 doigts sur votre bureau aussi vite que possible dans la direction la plus rapide. Utilisez-le pour choisir les touches à remapper.

Pour moi, il est plus naturel de passer du petit doigt à l'index. J'ai donc choisi d'utiliser kj. Aussi, j'ai fait un grep -rHin kj ~/src(grep récursif sur le répertoire parent de tout mon code source) et n'ai trouvé aucune correspondance.

" 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

Remarque: Si vous avez besoin de taper un littéral kj(ou quel que soit votre mappage), tapez-les simplement avec 2 secondes entre les deux. (Vous verrez le curseur hésiter à se déplacer après le 1er caractère. Attendez qu'il bouge avant de taper le 2ème.)


J'utilise vimdepuis 19 ans. J'ai été horrifié quand Apple a mis à jour ses MacBook Pros pour avoir une barre tactile et aucune escclé physique . J'ai vu un poste qui a suggéré la cartographie jjet jkà <Esc>et le haïssait. Mais j'ai patiemment noté une fiche à chaque fois que cela m'ennuyait. Environ 15 minutes plus tard, j'ai revu mes notes et proposé le TL; DR ci-dessus pour répondre aux points suivants:

  1. J'ai tendance à taper escallot quand je ne suis pas en mode insertion juste pour "être sûr" et jjme laisserait tomber 2 lignes.
  2. jkest un no-op (en bas, en haut) mais kjest plus naturel pour mes mains.
  3. Je dois également utiliser escpour quitter le mode de commande sans terminer la commande.

J'espère que je pourrai enfin rompre mon habitude de frapper escdans d'autres applications et de fermer les fenêtres lorsque j'écrirai plusieurs minutes. Je préfère de loin insérer des caractères kj errants plutôt que de perdre mon travail!


1
Notez que pour votre cnoremap, lorsque l'esc provient d'un mappage, il exécutera la commande, plutôt que de l'annuler. C'est pour des raisons de compatibilité avec vi
Christian Brabandt

En mode insertion et commande, esc fonctionne toujours. Mais, vous avez également cet autre combo de lignes de départ que vous utilisez également. Peut-être que je n'ai pas suivi votre point.
Bruno Bronosky

2
le point est, pour le mode commande, un échappement qui provient du mappage n'interrompra pas la commande, mais l'exécutera. Essayez:ls kj
Christian Brabandt

@ChristianBrabandt vous avez raison. Que peut-on y faire? Ou du moins, où est-ce documenté? Je ne peux même pas trouver de termes de recherche décents pour trouver quoi que ce soit à ce sujet.
Bruno Bronosky

1
Je ne me souviens pas si cela est documenté, je suis tombé sur ce comportement il y a plusieurs années. Ah, c'est un peu documenté à :h c_Esc: Dans les macros, [...] lance la commande entrée. (Les macros incluent généralement des mappages)
Christian Brabandt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.