3

Я читал, что в режиме вставки в vim можно использовать <C-Left> и <C-Right> для перемещения по словам. Это работает для меня, но только потому, что я не запускаю vim внутри разветвителя терминала tmux .

Когда внутри tmux , <C-Left> вместо этого выбрасывает меня из режима вставки и выдает ошибку:

E388: не удалось найти определение

Эта ошибка объясняется в справке по поиску определений. Однако я не хочу, чтобы какое-либо определение искалось, я хочу просто переместить одно слово влево. Кроме того, <C-Right> делает только то, что выгоняет меня из режима вставки, а не того, что я хотел бы.

Читая где-то, что это может быть связано с set (no)esckeys , я попробовал это с обеими настройками этого флага, с тем же результатом. Кроме того, я видел ответы в разделе Как заставить shift+ стрелки и ctrl+ стрелки работать в Vim в tmux? но они не помогают мне

Мой текущий .tmux.conf:

# This File is : ~/.tmux.conf

# use "|" and "-" to do vertical/horizontal splits
# (press CTRL B and then - or |, CTRL D to close it)
unbind %
bind | split-window -h
bind - split-window -v

# use the vim motion keys to move between panes
# (press CTRL B and then h,j,k,l for the move)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# use vim motion keys while in copy mode
# To copy, press CTRL B and then [, move, space, move, enter.
# To paste, press CTRL B and then ]
setw -g mode-keys vi

# make vim work properly inside tmux
setw -g xterm-keys on
set -g default-terminal "screen-256color"

И .vimrc:

" tabs, indentation, line numbering
set ts=4 sts=4 number autoindent sw=4

" sage is python
au BufNewFile,BufRead *.sage set filetype=python

if &term =~ '^screen'
  " Page keys http://sourceforge.net/p/tmux/tmux-code/ci/master/tree/FAQ
  execute "set t_kP=\e[5;*~"
  execute "set t_kN=\e[6;*~"

  " Arrow keys http://unix.stackexchange.com/a/34723
  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

1 ответ1

1

Ваш Vim неправильно определяет коды клавиш <C-Left> отправленные терминалом (и, возможно, другими). Вместо этого он анализирует коды, ESC выводит его из режима вставки, и затем [D вызывает странную ошибку.

Вы можете попробовать поиграть с настройкой TERM , но в целом сложно заставить специальные клавиши (например, клавиши курсора и функциональные клавиши) работать с модификаторами, такими как Shift и Ctrl в терминале. (Они также не работают для меня в Ubuntu с gnome-терминал.) Самый простой обходной путь - вместо этого использовать графический GVIM.

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