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
Другие вопросы по тегам