Как получить 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> 

Это делает работу ярлыков, но это не похоже на правильное решение. Может ли кто-нибудь сказать мне, что здесь происходит и как это исправить?

Вам нужно установить опцию xterm-keys окна tmux, чтобы 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 

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

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

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

  • Как сделать vim-пасту из (и скопировать в) буфер обмена системы?
  • Перемещение текста в режиме вставки
  • Как я могу сказать, что Vim правильно отображает escape-коды ANSI?
  • Как открыть файлы в вертикально / горизонтальных разделенных окнах в Vim из командной строки
  • Как запускать команды Unix из Vim?
  • В Vim есть способ удалить, не помещая текст в регистр?
  • Какой самый простой способ удалить Vim swapfiles, с которым я уже справился?
  • Как я могу сделать терминал VIM моим редактором по умолчанию в Mac OS X?
  • Есть ли опция -remote для vim (а не gVim) в cygwin?
  • Custom Vim Highlighting (работает только с определенными типами файлов)
  • Как установить vim.full в Ubuntu?
  • Давайте будем гением компьютера.