Я хочу назначить CTRL + L для перехода на следующую вкладку (:tabnext). Я поместил его в ~/.vimrc:

nmap <c-l> :tabnext<CR>

Он работал нормально, но я столкнулся со случаем, когда он не работал, когда я делил экран на несколько окон. Кажется, что CTRL + L конфликтует с действием "перерисовать экран", назначенным по умолчанию. Например, когда я нажимаю CTRL + L в центральном окне, я ничего не получаю (см. Снимок экрана):

enter image description here

Однако, когда я нажимаю то же самое в левом или правом окнах, все работает нормально .. Я думаю, мне нужно «переписать» действие по умолчанию, не так ли?

Я использую vim из терминала.

2
Timur Fayzrakhmanov 26 Окт 2015 в 19:48

2 ответа

Лучший ответ

Окно посередине, если не ошибаюсь, это netrw (стандартный плагин Vim для управления файлами). Это не специальный плагин, но тем не менее это плагин.

Если вы посмотрите на :help netrw-ctrl-l, вы увидите, что это не просто перерисовка - это также обновляет каталог. Таким образом, он отображается из плагина, переопределяя сопоставление ctrl-l по умолчанию только для окон netrw.

Если вы выполните :verbose nmap <c-l> в этом окне, вы увидите, где именно он определен: в файле autoload/netrw.vim в вашей установке Vim. Заглянув туда, находим такой фрагмент:

if !hasmapto('<Plug>NetrwRefresh')
 nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
 imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
endif

В нем говорится, что если <Plug>NetrwRefresh ни с чем не привязан, то связывайте <c-l>. Это простое решение: поскольку netrw.vim, как и все остальное, загружается после .vimrc, если вы определите эти сопоставления с каким-либо другим ключом, они не будут назначены на <c-l>, и ваше сопоставление не будет отменено. Так что просто сделайте это в своем .vimrc:

 nmap <unique> <c-r> <Plug>NetrwRefresh

Однако лучший способ - не наступать Виму на пятки.

6
Amadan 26 Окт 2015 в 17:27

Netrw v155a (см. http://www.drchip.org/astronaut/vim/index .html # NETRW) решает эту проблему, по-другому отображая ctrl-L; теперь он вызывает (без переназначения) ctrl-L как часть своего обновления. Как следствие, даже когда вы находитесь в окне netrw, ctrl-L будет обновлять все окна.

1
user21497 29 Окт 2015 в 14:25