39

Это все в 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 ответа2

63

Вам нужно установить опцию окна tmux xterm-keys чтобы tmux передавал эти ключи через свои терминалы. Вы, вероятно, хотите поместить это в ваш ~/.tmux.conf:

set-window-option -g xterm-keys on

Обычно Vim автоматически настраивает обработку этих ключей, когда TERM имеет значение xterm , но пропускает это, поскольку TERM имеет 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

По крайней мере, таким образом, вам не нужно отображать все различные комбинации.

7

Как объяснено здесь, отключите фоновое стирание цвета (BCE), очистив параметр терминала t_ut (запустите :set t_ut= в Vim, а затем нажмите Control+L, чтобы обновить отображение терминала), чтобы цветовые схемы работали правильно, когда Vim используется внутри tmux и Экран GNU.

Таким образом, вы можете сохранить значение TERM как xterm-256color для правильного определения ключа, а также для получения правильной цветовой схемы Vim! :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .