Vim: Movimentando-se usando o número relativ e adicionando-o à lista de salto para uso com CTRL-O

2

Eu tenho relativenumber ativado e, muitas vezes, navego para uma linha específica pressionando 25k ou 7j, etc. O problema é que depois que eu mudei a linha, muitas vezes me vejo querendo voltar para onde eu estava antes de me mover. Então eu pressiono CTRL-O, mas isso falha porque os movimentos j / k não são adicionados ao histórico de movimento. O que acontece é que eu pareço voltar duas vezes.

O ideal seria se o Vim adicionasse ao histórico de movimentos sempre que eu realizasse uma operação j / k com um multiplicador. É algo assim possível?

    
por Steve Vermeulen 22.01.2013 / 01:39

2 respostas

2

Aqui está um mapeamento para j / k que alcança isso:

:nnoremap <silent> k :<C-U>execute 'normal!' (v:count > 1 ? "m'" . v:count : '') . 'k'<CR>
:nnoremap <silent> j :<C-U>execute 'normal!' (v:count > 1 ? "m'" . v:count : '') . 'j'<CR>

Crédito: Vi pela primeira vez este aqui .

    
por 22.01.2013 / 08:17
1

Eu não acredito que o Vim forneça qualquer forma de adicionar movimentos ao jumplist, mas se você realmente quiser ser capaz de pular para trás com '' e tratar movimentos como saltos, você poderia fazer algo assim:

function! MarkJ()
    mark '
    return "j"
endfunction

nnoremap <expr> j MarkJ()

MarkJ() define manualmente a marca ' , adicionando essa linha ao jumplist (sempre na coluna 0, embora) e, em seguida, retorna j para o mapeamento. Infelizmente, você teria que fazer o mesmo para cada movimento.

Não consigo pensar em nenhuma maneira de limitar isso facilmente a movimentos com multiplicadores, mas seguindo o exemplo getchar() em :help map-expr , seria teoricamente possível definir um conjunto de funções e mapeamentos que só chamariam MarkX() se o movimento seguir um multiplicador. Isso é bastante artificial, e pode se tornar caro o suficiente para diminuir o desempenho.

    
por 22.01.2013 / 04:53

Tags