54 votes

Comment faire fonctionner shift+flèches et ctrl+flèches dans Vim sous tmux ?

Tout cela se fait dans iTerm2 sous OS X.

J'avais l'habitude de

export TERM='xterm-256color'

dans mon .bashrc . Cela signifie que Vim dans tmux utilisait bien 256 couleurs.

Et une fois que j'ai ajouté

set -g xterm-keys on

puis les raccourcis clavier avec les modificateurs fonctionnaient bien dans Vim. A savoir : shift+left/right que j'ai mappé pour changer d'onglet Vim, ctrl+up/down que j'ai mappé pour déplacer les lignes ("bulles"), et shift+left/right qui fonctionne d'emblée pour sauter par mot en mode ligne de commande (par exemple, lorsque vous tapez quelque chose comme :e foo bar baz ).

Cependant, cette configuration présente le problème suivant : la couleur de fond de Vim n'apparaît que derrière le texte, comme indiqué. ici .

Donc j'ai enlevé

export TERM='xterm-256color'

de mon .bashrc et à la place mettre ceci dans mon .tmux.conf :

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

Cela a corrigé la couleur de fond de Vim, mais a cassé les raccourcis clavier - ils font des choses inattendues (déplacer le curseur, supprimer du texte) à la place.

En utilisant ctrl+v pour insérer la sortie verbatim des combinaisons de clés (comme décrit ici ), j'ai pu le contourner :

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>

Cela permet de faire fonctionner les raccourcis, mais cela ne semble pas être la bonne solution. Quelqu'un peut-il me dire ce qui se passe ici et comment y remédier ?

84voto

Chris Johnsen Points 36743

Vous devez définir le tmux option de fenêtre xterm-keys para que tmux transmettra ces clés à ses terminaux. Vous voulez probablement mettre ceci dans votre ~/.tmux.conf :

set-window-option -g xterm-keys on

Vim va généralement mettre en place automatiquement la gestion de ces clés lorsque TERM est xterm -quelque chose, mais il saute cette étape puisque TERM est screen-256color . Vous pouvez configurer manuellement ces clés dans votre ~/.vimrc comme ça :

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, de cette façon, vous ne devez pas cartographier toutes les différentes combinaisons.

11voto

Fredrik Points 185

Comme expliqué ici , désactiver Couleur de fond Effacer (BCE) en dégageant le t_ut option de terminal (exécuter :set t_ut= dans Vim, puis appuyez sur Control + L pour rafraîchir l'affichage du terminal) afin que les schémas de couleurs fonctionnent correctement lorsque Vim est utilisé dans tmux et GNU screen.

De cette façon, vous pouvez garder votre TERM comme xterm-256color pour une détection correcte des touches tout en obtenant également un rendu correct du schéma de couleurs de Vim ! :-)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X