Wie bringt man vim dazu, richtig mit tmux zu arbeiten?

19

Ich versuche herauszufinden, wie man zusammenkommt vimund tmuxspielt.

Mein Problem ist: Wenn ich es benutze, kann xterm-256colorich vimgut arbeiten, aber der Hintergrund wird nicht richtig gerendert.

Ich habe das mit behoben screen-256color. Das sieht gut aus, bricht aber ab Ctrl + arrow keys(sie gehen in den Einfügemodus und löschen 4 Zeilen). Ich möchte diese Zuordnungen stattdessen verwenden, um die Registerkarten zu wechseln vim.

Wie bringe ich das zum Laufen?

überlisten
quelle

Antworten:

8

Führen Sie catinnerhalb ein tmuxund drücken Sie die betreffenden Tasten , um herauszufinden , die Escape - Codes sie erzeugen. Für mich gibt das ^[[Dund ^[[C. Dann ordnen Sie diese Escape-Codes direkt zu.

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

Dabei ^[handelt es sich um ein Escape-Zeichen, das Sie durch Drücken <CTRL-v><ESC>von vim einfügen können .

Mika Fischer
quelle
Das hat das Verhalten meiner Vim nicht verändert.
überlisten
Was wird gedruckt, wenn Sie cat in tmux starten und die Tasten drücken?
Mika Fischer
^ [[1; 5C und ^ [[1; 5D. Gute Idee, ich wusste nicht, wie ich sie bekommen sollte. Einfach mal probiert. Es klappt! Vielen Dank.
Uhr
Groß. Ich habe meine Antwort bearbeitet, um die Methode zu integrieren, um die richtigen Escape-Codes zu erhalten.
Mika Fischer
22

Es gibt verschiedene Konfigurationsebenen, die für eine optimale Funktionalität korrekt eingerichtet werden müssen.

  1. Konfigurieren Sie tmux so , dass es die Sequenzen erkennt. Legen Sie vor dem Starten von tmux einen TERM-Wert fest, der für Ihren Terminal-Emulator geeignet ist (z xterm-256color. B. ). Der Termdatenbankeintrag durch die Umgebungsvariable TERM identifiziert sagt tmux wie die Sequenzen Pfeiltasten für den modifizierten zu erkennen (die benutzerdefinierten Funktionen { kUP, kDN, kRIT, kLFT} {, 3.. 7}).
  2. Konfigurieren Sie tmux , um die Sequenzen zu generieren. Stellen Sie die xterm-keysSitzungsoption onso ein, dass tmux eine eigene Sequenz im xterm-Stil generiert, wenn es eine Sequenz empfängt, die vom TERM identifiziert wird. In Ihrem ~/.tmux.conf:

    set-option -g xterm-keys on
    
  3. Konfigurieren Sie die Programme, die in tmux ausgeführt werden , so, dass sie den größten Teil der Sequenzen verwenden bzw. erwarten. Stellen Sie sicher, dass Sie screenin tmux ein TERM -basiertes verwenden (z screen-256color. B. ). Auf diese Weise erfahren Programme, die in tmux ausgeführt werden, wie sie die Terminal- (Re-) Emulation von tmux steuern und welche Reaktionen sie von tmux erwarten sollten .
  4. Leider screendefinieren Terminfo-Datenbankeinträge auf Basis von -basierten oft keine Sequenzen für die geänderten Pfeiltasten (dh sie haben möglicherweise nicht kUPusw.), sodass die Programme, die in tmux ausgeführt werden, möglicherweise nicht wissen, dass sie solche Sequenzen erwarten. Sie müssen alle Programme, die diese Schlüssel erkennen sollen, manuell konfigurieren. In Vim können Sie dies einfügen in ~/.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
    

    Möglicherweise möchten Sie die Varianten ohne x(dh <Up>anstelle von <xUp>usw.) verwenden, wenn Sie feststellen, dass die Verwendung der x-Variante dazu führt, dass Ihre normalen Pfeiltasten nicht mehr funktionieren.

    Der Vorteil dieser Tastendefinition besteht darin, dass Sie nicht jede der Modifikatorkombinationen einzeln zuordnen müssen (Umschalt, Strg, Strg + Umschalt, Meta, Meta + Umschalt, Meta + Steuerung, Meta + Steuerung + Umschalt). Das *bekommt eine spezielle Interpretation, um alle verwandten Sequenzen zu handhaben (siehe :help xterm-modifier-keys).

  5. Dann können Sie die Tasten anstelle ihrer fest codierten Sequenzen zuordnen:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    
Chris Johnsen
quelle
1
Hey, das hat perfekt funktioniert!
Pablo Olmos de Aguilera C.
2

Deaktivieren Sie, wie hier erläutert , das Löschen der Hintergrundfarbe ( Background Color Erase, BCE), indem Sie die t_utTerminal-Option deaktivieren ( :set t_ut=in Vim ausführen und dann Control+ drücken L, um die Anzeige des Terminals zu aktualisieren), damit die Farbschemata ordnungsgemäß funktionieren, wenn Vim im tmux- und GNU-Bildschirm verwendet wird.

Auf diese Weise können Sie Ihren TERMWert xterm-256colorfür die ordnungsgemäße Erkennung von Schlüsseln beibehalten und gleichzeitig eine ordnungsgemäße Wiedergabe des Vim-Farbschemas erzielen! :-)

Sunaku
quelle
1

Hilft das Einstellen von set t_Co=256~ / .vimrc überhaupt? Dies ist nur eine Farbeinstellung, kann jedoch zur Behebung einiger Probleme beitragen.

Sie können die ctrl+ArrowTasten in Ihrem ~ / .vimrc auch neu zuordnen ...

Bearbeiten: Hast du es ctrl+Arrowin einer GNU-Bildschirmsitzung versucht ? Ich denke das ist vielleicht dein Problem.

Sardathrion - Setzen Sie Monica wieder ein
quelle
es sieht aus und funktioniert gut in Bildschirm mit xterm-256color
outsmartin
Set t_Co = 256 wird als gut getan
outsmartin
Hat irgendetwas davon geholfen?
Sardathrion - Wiedereinsetzung von Monica
Unglücklicherweise nicht. Was genau meinst du mit Remapign Strg + Pfeil? Ich benutze sie bereits neu zugeordnet, um Registerkarten in vim zu wechseln.
Outsmartin
Es ist wie
outsmartin