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

46

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/rightque j’ai mappé pour changer d’onglet Vim, ctrl+up/downque j’ai mappé pour déplacer des lignes ("bulles") et shift+left/rightqui fonctionnait hors de la boîte pour sauter par mot dans le mode ligne de commande (par exemple lors de la saisie :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 .bashrcet au lieu de mettre cela 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+vpour insérer le résultat textuel des combinaisons de touches (comme décrit ici ), j'ai pu contourner ce problème:

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?

Henrik N
la source

Réponses:

70

Vous devez définir l' option de fenêtre tmuxxterm-keys pour que tmux transmette ces clés à 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 xtermquelque chose, mais il l’ignore puisque TERM l’est screen-256color. Vous pouvez configurer manuellement ces clés dans votre ~/.vimrccomme 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.

Chris Johnsen
la source
Merci! Cela semble mieux que ce que j'avais, et j'apprécie l'explication. Une chose qui a été fixé par ce que j'avais, mais pas par vos lignes, était que flèches haut / bas n'a pas fonctionné dans le plug - in Commande-T comme décrit ici: superuser.com/questions/237751/...~~V~~aux~~singular~~1st Je viens d' ajouter map <Esc>[B <Down>d'un des réponses. Il semble que le plugin lui-même repose sur de mauvaises hypothèses.
Henrik N
Soyons clairs: votre solution, ainsi map <Esc>[B <Down>que celle de cet autre thread, signifie que tout fonctionne maintenant correctement.
Henrik N
@ HenrikN Pourriez-vous s'il vous plaît préciser ce que map <Esc>[B <Down>fait? Je ne vois aucune différence en l'ajoutant à mon fichier .vimrc.
Tropilio
@ Francesco Boccardo: Si vous suivez le lien dans mon précédent commentaire, puis suivez à nouveau le lien à partir de là, vous arrivez sur superuser.com/a/215181 qui semble l'expliquer de manière extrêmement détaillée :)
Henrik N
@ HenrikN Merci. C'est donc probablement un problème lié à OSX, ou peut-être qu'il a été résolu en 7 ans, car appuyer sur commande (contrôle?) + R ne gâche pas les touches de direction dans vim in tmux pour moi (je suis sous Linux).
Tropilio
8

Comme expliqué ici , désactivez BCE ( Background Color Erase ) en désactivant l' t_utoption de terminal (exécutée :set t_ut=dans Vim, puis appuyez sur Control+ Lpour actualiser l'affichage du terminal) afin que les combinaisons de couleurs fonctionnent correctement lorsque Vim est utilisé dans les écrans tmux et GNU.

De cette façon, vous pouvez conserver votre TERMvaleur quant xterm-256colorà la détection correcte des clés tout en obtenant un rendu correct du jeu de couleurs Vim! :-)

sunaku
la source
1
Beau! Excellent travail de détective.
Henrik N
2
C’est ce que j’ai changé exactement: github.com/henrik/dotfiles/commit/… Les couleurs et les touches de modification semblent bien fonctionner à l’extérieur et à l’intérieur de tmux.
Henrik N