Repita não apenas a última mudança, mas também as outras no Vim

2

Como posso repetir não apenas a última modificação usada (.), mas também as mais antigas?

Variante perfeita seria escolhê-los por Ctrl + N e Ctrl + P .

    
por Bogdan Gusiev 04.10.2009 / 10:44

4 respostas

4

Para expandir o comentário do @ldigas sobre gravações e macros, aqui está um simples detalhamento.

  1. Pressione q para entrar no modo "gravar".
  2. Pressione a tecla que você quer "nomear" a macro, eu costumo usar w para macros de uso único, mas você pode usar qualquer letra que quiser.
  3. Execute as operações que você deseja repetir.
  4. Pressione q para interromper a gravação.

Uma vez que você tenha sua macro, você pode repeti-la usando @w (assumindo que você usou w ), e irá percorrer as ações que você gravou.

    
por 30.10.2009 / 22:07
4

Eu não recomendaria o remapeamento de C-N e C-P, pois eles são mapeamentos de autocompletar e geralmente os plugins os usam. De fato, eu não recomendo remapear qualquer mapeamento padrão do vim. Mas de qualquer maneira, isso é com você.

No que diz respeito à repetição, o ponto (.) repetirá as coisas que você fez na última linha. Se você está tendo alguns problemas com o comando repeat com alguns plugins, tente o plugin repeat.vim .

Se você deseja algumas opeações que você usa frequentemente à sua disposição, tente gravá-las em um registrador e, em seguida, reproduzi-las (": help record"), ou torná-las uma função e chamar a função desejo, eu acho que a chamada para função poderia ser feita como CN ou CP ...)

    
por 04.10.2009 / 10:57
0

Novamente expandindo o mapeamento de seus comandos para serem repetidos:
Quando você sabe, sem feedback visual, o que deseja repetir, este mapeamento [ Ctrl -] Espaço economiza mais algumas teclas:

" map in Normal and Visual modes, but not Select mode (see :help mapmode-x
:command -nargs=*  Nxmap      nmap     <args>| xmap     <args>
     com -nargs=*  Nxnoremap  nnoremap <args>| xnoremap <args>
     com -nargs=*  Nxunmap    nunmap   <args>| xunmap   <args>

" map <Space> to currently often-used operations (similar to space.vim)
    " quickly create custom mappings
        " Usage: <C-Space>YOURMAPPING<Enter> and then just <Space> for each repetition
        " (When you know without visual feedback what you want to repeat, this saves another few keystrokes.)
    Nxmap <C-Space> :Nxmap <lt>Space> 

    " make these commands repeatable by <Space> (similar to space.vim)
    let space_repeats_nx = ['@@','@:']
        for cmd in space_repeats_nx
            exe 'Nxnoremap '.cmd.' :Nxnoremap <lt>Space> 'cmd.'<CR>'.cmd
        endfor
    
por 25.02.2012 / 05:48
0

Eu fiz o plug-in RepeatLast.vim para fornecer essa funcionalidade com 5\.

Funciona permitindo a gravação de macros o tempo todo . Por essa razão, não recomendo! Mas foi a única maneira que achei possível realizar várias repetições retrospectivamente. Seria ótimo se o Vim pudesse fornecer acesso a recentes pressionamentos de teclas internamente.

Lembre-se de acertar q antes de executar algo que você deseja repetir é preferível.

    
por 23.10.2013 / 06:19

Tags