Как получить shift+ стрелки и ctrl+ стрелки, работающие в Vim в tmux?
Это все в iTerm2 на OS X.
Раньше, у меня был
export TERM='xterm-256color'
в моем .bashrc
, Это означало, что Vim в tmux использовал 256 цветов.
И как только я добавил
set -g xterm-keys on
тогда сочетания клавиш с модификаторами работали нормально в Vim. А именно: shift+left/right
что я сопоставил, чтобы переключать вкладки Vim, ctrl+up/down
что я наметил, чтобы переместить ("пузырь") линии, и shift+left/right
который работал из коробки для перехода по слову в режиме командной строки (например, при наборе чего-то вроде :e foo bar baz
).
Однако в этой настройке возникла проблема, заключающаяся в том, что цвет фона Vim отображается только за текстом, как упомянуто здесь.
Итак, я удалил
export TERM='xterm-256color'
от моего .bashrc
и вместо этого положить это в моем .tmux.conf
:
set -g default-terminal "screen-256color"
Это исправило цвет фона Vim, но сломало сочетания клавиш - вместо этого они делают неожиданные вещи (перемещают курсор, удаляют текст).
Используя ctrl+v
чтобы вставить дословный вывод из сочетаний клавиш (как описано здесь), я смог обойти это:
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>
Это заставляет работать ярлыки, но не похоже на правильное решение. Может кто-нибудь сказать мне, что здесь происходит и как это исправить?
2 ответа
Вам нужно установить опцию окна tmux xterm-keys
так что tmux передаст эти ключи через свои терминалы. Вы, вероятно, хотите поместить это в свой ~/.tmux.conf
:
set-window-option -g xterm-keys on
Vim обычно автоматически настраивает обработку этих ключей, когда TERM xterm
что-то, но это пропускает, так как срок screen-256color
, Вы можете вручную настроить эти ключи в своем ~/.vimrc
как это:
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
По крайней мере, таким образом, вам не нужно отображать все различные комбинации.
Как объяснено здесь, отключите стирание фона (BCE), очистив t_ut
терминальная опция (запустить :set t_ut=
в Vim, а затем нажмите Control+L, чтобы обновить дисплей терминала), чтобы цветовые схемы работали правильно, когда Vim используется внутри экранов tmux и GNU.
Таким образом, вы можете сохранить TERM
значение как xterm-256color
для правильного определения ключа, а также для получения правильной цветовой схемы Vim!:-)