Vim: Как мне переназначить ключ, но только когда я скомбинировал его с номером?
Я хочу центрировать вид после перемещения вверх / вниз на несколько строк (например, 7j
), но не тогда, когда я двигаюсь только один раз (например, j
но мне все равно 1j
). Вот что у меня есть:
:noremap j jzz
Как я могу заставить это работать, только когда я соединяю ключ с номером?
1 ответ
Решение
Вы можете сделать это следующим образом:
function! s:MoveAndCenter(motion)
return a:motion . (v:count > 1 ? 'zz' : '')
endfunction
noremap <silent> <expr> j <sid>MoveAndCenter('j')
noremap <silent> <expr> k <sid>MoveAndCenter('k')
Это говорит Vim запускать выражение каждый раз при нажатии j или k и использовать возвращаемую строку из этого выражения в качестве команды нормального режима для запуска. Причина, по которой мы не добавляем счетчик к результату, заключается в том, что Vim автоматически добавляет его (фактически, это поведение нельзя предотвратить).
Увидеть:
:help :map-expr
:help v:count