Pourquoi Vim mange Ctrl lorsqu'il est utilisé avec Ctrl + v et comment le résoudre?

J'utilise Vim /etc/zsh/zshrc pour append des raccourcis keyboard pour zsh car cela ne fonctionne pas avec inputrc . Dans mon terminal avec tmux quand je tape Ctrl + v puis Ctrl + LeftArrow le shell montrera ^[OD . Cependant, lorsque je suis en mode d'insertion Vim, en appuyant sur la même séquence, ^[[D

J'ai découvert que ^[[D est ce que le shell produit quand je tape Ctrl + v puis LeftArrow . J'ai également changé ^[[D à ^[OD dans le file /etc/zsh/zshrc et cela fonctionne comme prévu (en appuyant sur Ctrl + LeftArrow , le slider returnne un mot). Voici la ligne dont je parle:

 bindkey "^[OD" backward-word 

Je suppose que quelque chose ne va pas avec Vim car il consum le Ctrl . Comment puis-je réparer ça?

C'est en fait votre terminal qui fait quelque chose de bizarre, pas Vim. Les terminaux ont deux séries de séquences de contrôle associées aux touches de slider, pour des raisons historiques : une pour les applications en plein écran, souvent appelées «mode touches de slider d'application» et une pour les applications d' printing en lecture-écriture .

Autrefois, les applications d'printing en lecture-écriture n'avaient pas de fonctions d'édition de ligne, et le terminal, ou le pilote du terminal OS, devait éventuellement devenir plus sophistiqué. Le terminal a donc envoyé des séquences de contrôle destinées au pilote du terminal. D'une manière ou d'une autre, les pilotes de terminal Unix n'ont jamais obtenu de fonctionnalités d'édition de ligne décentes; ceux-ci ont été ajoutés aux applications à la place (par exemple à travers la bibliothèque readline).

Votre terminal envoie des commands ␛OD pour Ctrl + Gauche en mode édition de ligne et ␛[D dans le mode des touches de slider d'application. Vous avez deux options:

  • Configurez votre terminal pour ne pas faire de différence entre les deux modes. Comment faire cela dépend entièrement de votre émulateur de terminal.
  • Vivre avec. Étant donné qu'une application donnée définit toujours le terminal dans le même mode, il suffit de configurer ses raccourcis keyboard en fonction du mode utilisé.