Est-ce que l'utilisation de ctrl + c au lieu de esc pour quitter le mode d'insertion brise quelque chose dans vi?

15

Lorsque vous utilisez vi, vous pouvez quitter le mode d'insertion avec Ctrl+ Cau lieu du plus traditionnel Esc. Y a-t-il des situations où il ne serait pas souhaitable d'utiliser pour les premiers au lieu des seconds? Cela brise-t-il autre chose que les meilleures pratiques?

MDMarra
la source
Il n'est pas souhaitable de frapper le premier par accident, ce qui vous donne une erreur Type :quit<Enter> to exit Vimet m'a demandé à Google comment revenir. Frapper ivous ramène directement au mode insertion.
Noumenon

Réponses:

9

Ctrl-Cet Escne sont pas les mêmes dans vi/ vimdans la plupart des modes, y compris le mode d'insertion. La différence est de Escdéclencher des abréviations alors que ce Ctrl-cn'est pas le cas. Que cela vous importe ou non dépend du fait que vous ou les plugins que vous utilisez utilisent des abréviations.


Notez qu'il est plus sûr de supposer Escet Ctrl-Cne signifie pas la même chose vim. Un autre exemple de ce même site est la sortie du mode insertion de bloc (pas en vi).

jw013
la source
Bon à savoir, mais ma question concernait la sortie du mode insertion.
MDMarra
@MDMarra Doh, avez mal lu votre question. Le mode d'insertion est toujours différent: voir la réponse mise à jour.
jw013
1
Voici la différence la plus importante que j'ai eu à gérer: l'insertion multiligne avec le mode de bloc visuel fonctionne avec Esc et non avec Cc.
enfascination du
4

Je pense que tu veux dire vim, non vi.

Cela fonctionne en effet vim, bien que je ne l'utilise que si je suis sûr à 100% de ne jamais toucher à un système d'exploitation non Linux. La raison en est que d'autres systèmes d'exploitation peuvent avoir leurs propres implémentations de vi, qui ne l'implémentent pas, et vous pourriez constater que lors de l'exécution visur ces plateformes, Ctrl-C a son propre comportement traditionnel: interrompre le processus et laisser votre terminal dans un état étrange .

Michael Hampton
la source
3
Pouvez-vous indiquer une viimplémentation qui existe encore aujourd'hui et qui ne gère pas Ctrl-C? Voir ma réponse pour la vraie différence.
jw013
2

Si vous faites référence vim, il y a une légère différence. CTRL-Cne vérifie pas les abréviations et ne déclenche pas l' InsertLeaveévénement. Ainsi, vous ou les plugins avez défini les autocmdinstructions qui en dépendent InsertLeave, elles ne seront pas déclenchées.

À partir de la documentation officielle http://vimhelp.appspot.com/insert.txt.html :

<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode.  Finish
                abbreviation.

CTRL-C          Quit insert mode, go back to Normal mode.  Do not check for
                abbreviations.  Does not trigger the InsertLeave autocommand
                event.

Vous pouvez définir un mappage pour CTRL-Cto <esc>, puis il se déclenchera InsertLeave.

wisbucky
la source