Comment faire fonctionner correctement vim avec tmux?

19

J'essaie de trouver comment jouer vimet tmuxjouer ensemble.

Mon problème est: lorsque j'utilise, xterm-256colorje vimtravaille bien, mais l'arrière-plan ne s'affiche pas correctement.

J'ai corrigé cela en utilisant screen-256color. Cela a l'air bien mais casse le Ctrl + arrow keys(ils passent en mode insertion et suppriment 4 lignes). Je souhaite utiliser ces mappages à la place pour basculer entre les onglets vim.

Comment puis-je faire fonctionner cela?

outsmartin
la source

Réponses:

8

Courez catdedans tmuxet appuyez sur les touches en question pour découvrir les codes d'échappement qu'ils génèrent. Pour moi, cela donne ^[[Det ^[[C. Ensuite, mappez directement ces codes d'échappement.

nnoremap ^[[D gT
nnoremap ^[[C gt

^[est un caractère d'échappement, que vous pouvez insérer en appuyant <CTRL-v><ESC>sur vim.

Mika Fischer
la source
Cela n'a pas changé le comportement de mon vim.
outsmartin
Qu'est-ce qui est imprimé lorsque vous démarrez cat dans tmux et appuyez sur les touches?
Mika Fischer
^ [[1; 5C et ^ [[1; 5D. Bonne idée, je ne savais pas comment les obtenir. Je viens de l'essayer. Ça marche! Je vous remercie.
outsmartin
Génial. J'ai modifié ma réponse pour incorporer la méthode pour obtenir les bons codes d'échappement.
Mika Fischer
22

Il existe plusieurs niveaux de configuration qui doivent être configurés correctement pour la meilleure fonctionnalité.

  1. Configurez tmux pour reconnaître les séquences. Avant de lancer tmux , définissez une valeur TERM appropriée pour votre émulateur de terminal (par exemple xterm-256color). L'entrée de la base de données terminfo identifiée par la variable d'environnement TERM indique tmux comment reconnaître les séquences pour la modification de touches fléchées (les capacités définies par l' utilisateur { kUP, kDN, kRIT, kLFT} {, 3.. 7}).
  2. Configurez tmux pour générer les séquences. Définissez l' xterm-keysoption de session sur onafin que tmux génère sa propre séquence de style xterm lorsqu'il reçoit une séquence identifiée par son TERM. Dans votre ~/.tmux.conf:

    set-option -g xterm-keys on
    
  3. Configurez les programmes exécutés dans tmux pour utiliser / attendre la majorité de ses séquences. Assurez-vous que vous utilisez un screenTERM basé sur l'intérieur de tmux (par exemple screen-256color). Cela indique aux programmes exécutés dans tmux comment contrôler l’ émulation (ré) du terminal de tmux et quelles réponses ils doivent attendre de tmux .
  4. Malheureusement, les screenentrées de la base de données terminfo basées ne définissent souvent aucune séquence pour les touches fléchées modifiées (c'est-à-dire qu'elles peuvent ne pas avoir kUP, et cetera), donc les programmes exécutés dans tmux peuvent ne pas savoir attendre de telles séquences. Vous devrez configurer manuellement tous les programmes que vous souhaitez reconnaître ces clés. Dans Vim , vous pouvez mettre cela dans votre ~/.vimrc:

    if &term =~ '^screen'
        " tmux will send xterm-style keys when xterm-keys 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
    

    Vous voudrez peut-être utiliser les variantes sans x(c'est- <Up>à- dire au lieu de <xUp>, et cetera) si vous constatez que l'utilisation de la xvariable -fonctionne les touches fléchées normales de cesser de fonctionner.

    L'avantage de définir des touches comme celle-ci est que vous n'avez pas à mapper chacune des combinaisons de modificateurs séparément (Shift, Control, Contol + Shift, Meta, Meta + Shift, Meta + Control, Meta + Control + Shift); l' *obtient interprétation spéciale pour gérer toutes les séquences apparentées (voir :help xterm-modifier-keys).

  5. Ensuite, vous pouvez mapper les clés au lieu de leurs séquences codées en dur:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    
Chris Johnsen
la source
1
Hé, cela a parfaitement fonctionné!
Pablo Olmos de Aguilera C.
2

Comme expliqué ici , désactivez Effacement des couleurs d'arrière-plan (BCE) en désactivant l' t_utoption du terminal (exécutez :set t_ut=dans Vim, puis appuyez sur Control+ Lpour actualiser l'affichage du terminal) afin que les schémas de couleurs fonctionnent correctement lorsque Vim est utilisé dans l'écran tmux et GNU.

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

sunaku
la source
1

La configuration set t_Co=256de votre ~ / .vimrc aide-t-elle du tout? Ce n'est qu'un paramètre de couleur, mais peut aider à résoudre certains problèmes.

Vous pouvez également re-mapper les ctrl+Arrowclés dans votre ~ / .vimrc ...

Edit: avez-vous essayé ctrl+Arrowdans une session d'écran GNU? Je pense que c'est peut-être votre problème.

Sardathrion - Rétablir Monica
la source
il ressemble et fonctionne très bien dans l' écran avec xterm-256color
outsmartin
set t_Co = 256 se fait également
outsmartin
Est-ce que cela a aidé?
Sardathrion
Malheureusement non. Que voulez-vous dire exactement avec remapper ctrl + flèche? Je les utilise déjà remappés pour changer d'onglet dans vim.
outsmartin
son mappé comme ceci: map <C-Right> gt
outsmartin