Vim: Como posso remapear uma chave, mas apenas quando eu a combino com um número?

1

Eu quero centrar a visão depois de eu subir / descer várias linhas (por exemplo 7j), mas não quando eu só me movo uma vez (por exemplo, jmas eu não me importo 1j). Aqui está o que eu tenho:

:noremap j jzz

Como posso fazer isso funcionar apenas quando combino a chave com um número?

816-8055
fonte

Respostas:

1

Você pode fazer assim:

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')

Isso diz ao Vim para executar uma expressão toda vez jou kser pressionado, e usar a string retornada daquela expressão como o comando do modo normal a ser executado. A razão pela qual não adicionamos a contagem ao resultado é que o Vim a adiciona automaticamente (na verdade, esse comportamento não pode ser evitado).

Vejo:

:help :map-expr
:help v:count
Heptite
fonte
Doce, obrigada. Eu melhorei a função com line(...)apenas centralizar quando eu pulo para uma linha que não é visível na janela atual.
816-8055