it-swarm.com.de

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

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/right, den ich zum Wechseln der Vim-Registerkarten zugeordnet habe, ctrl+up/down, den ich zum Verschieben ("Blasen") von Zeilen zugeordnet habe, und shift+left/right, der sofort funktioniert hat, um im Befehlszeilenmodus nach Word zu springen (z. B. bei der Eingabe von :e foo bar baz). .

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'

aus meinem .bashrc und füge dies stattdessen in meinen .tmux.conf ein:

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 die Verwendung von ctrl+v zum 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?

42
Henrik N

Sie müssen die Fensteroption tmux xterm-keys einstellen, damit tmux übergeben wird diese Schlüssel bis zu seinen Anschlüssen. Sie möchten dies wahrscheinlich in Ihren ~/.tmux.conf einfügen:

set-window-option -g xterm-keys on

Vim richtet normalerweise automatisch die Behandlung dieser Schlüssel ein, wenn TERM xterm- ist. Dies wird jedoch übersprungen, da TERM screen-256color ist. Sie können diese Schlüssel in Ihrem ~/.vimrc wie 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.

66
Chris Johnsen

Wie hier erklärt Deaktivieren Sie Hintergrundfarbe löschen (BCE), indem Sie die Terminaloption t_ut deaktivieren (:set t_ut= in Vim ausführen und dann drücken Control+L um die Anzeige des Terminals zu aktualisieren), damit die Farbschemata ordnungsgemäß funktionieren, wenn Vim in tmux und im Bildschirm GNU verwendet wird.

Auf diese Weise können Sie Ihren Wert für TERM als xterm-256color beibehalten, um eine ordnungsgemäße Schlüsselerkennung zu gewährleisten und gleichzeitig eine ordnungsgemäße Wiedergabe des Vim-Farbschemas zu erhalten! :-)

8
sunaku