web-dev-qa-db-fra.com

Comment faire pour que shift + flèches et ctrl + flèches fonctionnent dans Vim dans tmux?

Tout cela dans iTerm2 sur OS X.

J'avais

export TERM='xterm-256color'

dans mon .bashrc. Cela signifiait que Vim in tmux utilisait 256 couleurs.

Et une fois j'ai ajouté

set -g xterm-keys on

les raccourcis clavier avec modificateurs fonctionnaient alors bien dans Vim. À savoir: shift+left/right que j'ai mappé pour changer d'onglet Vim, ctrl+up/down que j'ai mappé pour déplacer des lignes ("bulles"), et shift+left/right qui fonctionnait hors de la boîte pour sauter par Word en mode ligne de commande (par exemple, en tapant quelque chose comme :e foo bar baz) .

Cependant, cette configuration posait le problème suivant: la couleur d'arrière-plan de Vim ne s'affiche que derrière le texte, comme indiqué ici .

Alors j'ai enlevé

export TERM='xterm-256color'

de mon .bashrc et au lieu de mettre ceci dans mon .tmux.conf:

set -g default-terminal "screen-256color"

Cela corrigeait la couleur d'arrière-plan de Vim, mais cassait les raccourcis clavier - ils faisaient des choses inattendues (déplacer le curseur, supprimer du texte) à la place.

En utilisant ctrl+v pour insérer le résultat textuel des combinaisons de touches (comme décrit ici ), j'ai pu y remédier:

map [1;5A <C-Up>
map [1;5B <C-Down>
map [1;2D <S-Left>
map [1;2C <S-Right>
cmap [1;2D <S-Left>
cmap [1;2C <S-Right>

Les raccourcis fonctionnent, mais cela ne semble pas être la bonne solution. Quelqu'un pourrait-il me dire ce qui se passe ici et comment y remédier?

42
Henrik N

Vous devez définir l'option tmux de la fenêtre xterm-keys afin que tmux passe ces clés à travers ses terminaux. Vous voulez probablement mettre ceci dans votre ~/.tmux.conf:

set-window-option -g xterm-keys on

Vim configurera généralement automatiquement le traitement de ces clés lorsque TERM est xterm- quelque chose, mais il la ignore puisque TERM est screen-256color. Vous pouvez configurer manuellement ces clés dans votre ~/.vimrc comme ceci:

if &term =~ '^screen'
    " tmux will send xterm-style keys when its xterm-keys option is on
    execute "set <xUp>=\e[1;*A"
    execute "set <xDown>=\e[1;*B"
    execute "set <xRight>=\e[1;*C"
    execute "set <xLeft>=\e[1;*D"
endif

Au moins, vous n’avez pas à cartographier toutes les combinaisons possibles.

66
Chris Johnsen

Comme expliqué ici , désactivez la suppression de la couleur d'arrière-plan (BCE) en désactivant l'option de terminal t_ut (exécutez :set t_ut= dans Vim, puis appuyez sur Control+L pour rafraîchir l’affichage du terminal) afin que les jeux de couleurs fonctionnent correctement lorsque Vim est utilisé dans les écrans tmux et GNU.

De cette façon, vous pouvez conserver votre valeur TERM en tant que xterm-256color pour une détection correcte des clés tout en obtenant un rendu correct du jeu de couleurs Vim! :-)

8
sunaku