Wie bekomme ich Shift + Pfeile und Strg + Pfeile in Vim in Tmux?

21628
Henrik N

Dies ist alles in iTerm2 unter OS X.

ich hatte mal

export TERM='xterm-256color' 

in meinem .bashrc. Dies bedeutete, dass Vim in tmux 256 Farben verwendete.

Und einmal habe ich hinzugefügt

set -g xterm-keys on 

dann funktionierten Tastenkombinationen mit Modifikatoren in Vim. Nämlich: shift+left/rightdass ich gemappt habe, um Vim-Tabs zu wechseln, ctrl+up/downdass ich gemappt habe, um sich zu bewegen ("Bubble" -Zeilen), und shift+left/rightdas aus dem Kasten heraus funktionierte, um im Befehlszeilenmodus wortweise zu springen (z. B. wenn Sie etwas eingeben :e foo bar baz).

Dieses Setup hatte jedoch das Problem, dass die Vim-Hintergrundfarbe, wie hier erwähnt, nur hinter dem Text angezeigt wird .

Also entfernte ich mich

export TERM='xterm-256color' 

von meinem .bashrcund stattdessen dies in mein .tmux.conf:

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

Dadurch wurde die Vim-Hintergrundfarbe korrigiert, die Tastenkombinationen jedoch abgebrochen - sie haben unerwartete Vorgänge (Bewegen des Cursors, Löschen von Text).

Durch ctrl+vdas Einfügen der wörtlichen Ausgabe aus den Tastenkombinationen (wie hier beschrieben ) konnte ich es umgehen:

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> 

Dadurch funktionieren die Verknüpfungen, aber es fühlt sich nicht nach der richtigen Lösung an. Könnte mir jemand sagen, was hier passiert und wie man es reparieren kann?

38

2 Antworten auf die Frage

62
Chris Johnsen

Sie müssen die Option tmux window xterm-keysso einstellen, dass tmux diese Schlüssel an die Terminals weiterleitet . Wahrscheinlich möchten Sie dies in Ihre einfügen ~/.tmux.conf:

set-window-option -g xterm-keys on 

Normalerweise richtet Vim die Behandlung dieser Schlüssel automatisch ein, wenn TERM xterm-something ist. Dies wird jedoch übersprungen, da TERM dies ist screen-256color. Sie können diese Schlüssel manuell ~/.vimrcwie folgt konfigurieren :

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 

Zumindest müssen Sie nicht alle Kombinationen zuordnen.

Vielen Dank! Das sieht besser aus als das, was ich hatte, und ich schätze die Erklärung. Eine Sache, die durch das, was ich hatte, behoben wurde, aber nicht durch Ihre Zeilen, war, dass die Auf / Ab-Pfeile im Command-T-Plugin nicht wie hier beschrieben funktionierten: http://superuser.com/questions/237751/messed- up-keys-in-vim-when-running-inside-tmux Ich habe gerade `map hinzugefügt[B `aus einer der Antworten. Anscheinend gibt es einige schlechte Annahmen, die das Plugin selbst gemacht hat. Henrik N vor 12 Jahren 0
Nur um klar zu sein, Ihre Lösung plus Karte [B `von diesem anderen Thread bedeutet, dass jetzt alles gut funktioniert. Henrik N vor 12 Jahren 0
7
sunaku

Deaktivieren Sie, wie hier erläutert, die Option 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 der Tasten beibehalten und gleichzeitig das korrekte Rendern des Vim-Farbschemas erhalten! :-)

Wunderschönen! Großartige Detektivarbeit. Henrik N vor 11 Jahren 1
Genau das habe ich geändert: https://github.com/henrik/dotfiles/commit/f8347e465fe9c4b9ff7ea211e2263d6e34ace9dd Farben und Zusatztasten scheinen sowohl außerhalb als auch innerhalb von Tmux gut zu funktionieren. Henrik N vor 11 Jahren 2