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

1

Eu quero centralizar a visualização depois que eu mova várias linhas para cima / baixo (por exemplo, 7j ), mas não quando eu apenas movo uma vez (por exemplo, j , mas não me importo com 1j ). Aqui está o que eu tenho:

:noremap j jzz

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

    
por 816-8055 14.07.2016 / 19:04

1 resposta

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

Isto diz ao Vim para executar uma expressão toda vez que j ou k são pressionados, 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).

Veja:

:help :map-expr
:help v:count
    
por 14.07.2016 / 23:23

Tags