Estendendo mapeamentos do Vim para executar N vezes

3

Eu quero ser capaz de digitar algo como 'Ncom' no modo normal que irá comentar as linhas N-1 atuais e as próximas. Um mapeamento de chave que eu fiz para fazer isso é :nmap com ^i#<ESC>j,. Na verdade, isso comenta a linha atual, mas não funciona para N linhas de maneira semelhante aos comandos internos do vim. O que eu preciso saber sobre o vim que explica a diferença entre o que eu quero que aconteça e o que está acontecendo? Além disso, como posso implementar corretamente o que quero?

seewalker
fonte

Respostas:

2
:nnoremap com :normal! I#<CR>

Explicação…

  • Ié o mesmo que ^imas melhor. Geralmente, você deve fazer o seguinte em vez de ^i#<Esc>:

    I#<Esc>
    

    Mesmo para $a, a propósito.

  • :normalé um comando Ex que permite executar um comando no modo normal a partir da linha de comando. É usado assim, seguido por <CR>:

    :normal! I#
    
  • Quando um comando modo normal é prefixado com um count: 6w, o comando é executado 6 vezes. No entanto, ele countnão é propagado para os comandos subseqüentes: 6wifoonão é adicionado fooantes de cada uma das 6 próximas palavras. Dependendo do comando, as regras podem variar: consulte a documentação se não tiver certeza.

  • Quando um comando Ex é prefixado com um count: 6:command, Vim adiciona automaticamente um intervalo a partir da linha atual e terminando com a count-1linha de th abaixo. Se você o fizer 6:normal! I#, o comando se tornará:

    :.,.+5normal! I#
    

    o que significa "insira um #antes do primeiro caractere imprimível dessa linha e das 5 linhas abaixo".

  • Quando o Vim encontra um comando Ex em um mapeamento, com a :, ele sempre adiciona o intervalo relevante. É por isso que é melhor usar :normalem mapeamentos que devem ser usados ​​em várias linhas ou com a count.

Veja :help rangee :help :normal.

romainl
fonte
0

Eu acho que este plugin faz o trabalho: https://github.com/tpope/vim-repeat

exemplo:

silent! call repeat#set("\<Plug>MyWonderfulMap", v:count)
Hettomei
fonte