3

Я использую Vim внутри tmux, и недавно добавил в мой файл .vimrc :

" easy navigation
nnoremap <C-Left> :tabprevious
nnoremap <C-Right> :tabnext

Но это, кажется, не имеет никакого эффекта (я нажимаю CTRL+l или CTRL+Right и мой курсор просто перемещается, как будто я вообще не нажимал CTRL ). Я предполагаю, что tmux как-то ответственен за это.

Я попытался добавить каждую (не обе) из следующих строк в мой .tmux.conf безрезультатно:

set -g default-terminal "xterm"
set-window-option -g xterm-keys on

Конечно, есть простой способ передать эти команды в vim?

Я прочитал этот пост:

Как получить shift+ стрелки и ctrl+ стрелки, работающие в Vim в tmux?

и попытался добавить следующее в мой .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

Я использую vim версию 7.4

2 ответа2

1

Рекомендуемый параметр TERM для tmux - screen-256color а фрагмент, который вы добавили в vimrc работает только для TERM который начинается с screen поэтому вы можете быть уверены, что блок кода никогда не будет выполнен, если ваш TERM - xterm .

В прошлом я успешно использовал этот самый фрагмент на этой машине, без set-window-option -g xterm-keys on , но по какой-то причине он больше не работает для меня (я не использовал tmux в последние три месяца). Интересно, что происходит? Обновление iTerm? Обновление tmux?

Добавление set-window-option -g xterm-keys on в мой ~/.tmux.conf проблему.

В любом случае, вы можете напрямую отобразить необработанные последовательности, созданные <C-Left> и <C-Right> как временное решение.

nnoremap <C-v><C-Left> :tabprevious<CR>

должен дать вам что-то вроде:

nnoremap ^[[D :tabprevious<CR>
0

Альтернативное решение может быть следующим:

" Note:  Move to the next tab! By Questor
nnoremap <silent> <C-Up> :tabnext<cr>
inoremap <silent> <C-Up> <C-O>:tabnext<cr>
vnoremap <silent> <C-Up> :<C-U>tabnext<cr>v

" Note:  Move to the previous tab! By Questor
nnoremap <silent> <C-Down> :tabprevious<cr>
inoremap <silent> <C-Down> <C-O>:tabprevious<cr>
vnoremap <silent> <C-Down> :<C-U>tabprevious<cr>v

Прекрасно работает для меня!

Смотрите пример использования в https://github.com/eduardolucioac/groovim/blob/master/.vimrc

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