Wie bekomme ich Shift + Pfeile und Strg + Pfeile in Vim in tmux zum Laufen?

44

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 Tastaturkürzel mit Modifikatoren in Vim einwandfrei. Nämlich: shift+left/rightdass ich Vim-Tabs gewechselt habe, ctrl+up/downdass ich verschobene ("Bubble") Zeilen gemappt habe und shift+left/rightdass es im Kommandozeilenmodus (zB beim Tippen von etwas ähnlichem :e foo bar baz) sofort funktioniert hat, wortwörtlich zu springen .

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

Also entfernte ich mich

export TERM='xterm-256color'

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

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

Dadurch wurde die Vim-Hintergrundfarbe korrigiert, die Tastaturkürzel wurden jedoch nicht mehr verwendet. Stattdessen werden unerwartete Aktionen ausgeführt (Cursor bewegen, Text löschen).

Durch ctrl+vdas Einfügen der wörtlichen Ausgabe der Tastenkombinationen (wie hier beschrieben ) konnte ich Folgendes 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 scheint nicht die richtige Lösung zu sein. Kann mir jemand sagen, was hier passiert und wie man es repariert?

Henrik N
quelle

Antworten:

68

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

set-window-option -g xterm-keys on

Vim richtet die Behandlung dieser Schlüssel normalerweise automatisch ein, wenn TERM xterm-something ist. Dies wird jedoch übersprungen, da TERM -something ist screen-256color. Sie können diese Schlüssel ~/.vimrcwie folgt manuell 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 auf diese Weise nicht alle verschiedenen Kombinationen abbilden.

Chris Johnsen
quelle
Danke! Das sieht besser aus als das, was ich hatte, und ich schätze die Erklärung. Eine Sache, die durch das, was ich hatte, aber nicht durch Ihre Zeilen, behoben wurde, war, dass die Auf- / Ab-Pfeile im Command-T-Plugin nicht funktionierten, wie hier beschrieben: superuser.com/questions/237751/… Ich habe gerade map <Esc>[B <Down>von einem hinzugefügt der Antworten. Scheint der Grund zu sein, dass das Plugin selbst einige schlechte Annahmen getroffen hat.
Henrik N
Um ganz klar zu sein, Ihre Lösung und map <Esc>[B <Down>der andere Thread bedeuten, dass jetzt alles einwandfrei funktioniert.
Henrik N
@ HenrikN Könnten Sie bitte klären, was map <Esc>[B <Down>tut? Ich sehe keinen Unterschied, wenn ich es meiner .vimrc-Datei hinzufüge.
Francesco Boccardo
@Francesco Boccardo: Wenn Sie dem Link in meinem vorherigen Kommentar folgen und dann dem Link von dort aus erneut folgen, gelangen Sie zu superuser.com/a/215181, was es in unerträglichen Einzelheiten zu erklären scheint :)
Henrik N,
@ HenrikN Danke. Es handelt sich also wahrscheinlich um ein OSX-Problem, oder es wurde in diesen 7 Jahren möglicherweise behoben, da das Drücken von Befehl (Steuerung?) + R die Pfeiltasten in vim in tmux für mich nicht durcheinander bringt (ich bin unter Linux).
Francesco Boccardo
8

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
Schön! Großartige Detektivarbeit.
Henrik N
2
Genau das habe ich geändert: github.com/henrik/dotfiles/commit/… Farben und Modifikatortasten scheinen sowohl außerhalb als auch innerhalb von tmux gut zu funktionieren.
Henrik N