Repetindo o comando para executar um script externo?

Oct 08 2020

Eu tenho um script chamado lorem.shque pega o número de parágrafos (primeiro argumento) e o número de linhas em cada parágrafo (segundo argumento) e imprime um texto aleatório nesse formato para padronizar. Transformei isso em uma vinculação de chave do vim para que pudesse inserir esse texto em meu arquivo com:

nmap <leader>l :read ! ~/lorem.sh 1 100<CR>

Isso funciona, mas eu queria saber se seria possível adicionar uma contagem a este comando da mesma forma que você pode especificar uma contagem para outros comandos, como Nddexcluir N linhas abaixo do atual. Se eu pudesse ter algo como N<leader>ltrabalho, poderia inserir N parágrafos de texto de uma vez.

Obrigado !

Respostas

3 D.BenKnoble Oct 08 2020 at 01:44

Baseado em :help v:count:

                    *v:count* *count-variable*
v:count     The count given for the last Normal mode command.  Can be used
        to get the count before a mapping.  Read-only.  Example: >
    :map _x :<C-U>echo "the count is " . v:count<CR>
<       Note: The <C-U> is required to remove the line range that you
        get when typing ':' after a count.
        When there are two counts, as in "3d2w", they are multiplied,
        just like what happens in the command, "d6w" for the example.
        Also used for evaluating the 'formatexpr' option.
        "count" also works, for backwards compatibility, unless
        |scriptversion| is 3 or higher.

                    *v:count1* *count1-variable*
v:count1    Just like "v:count", but defaults to one when no count is
        used.

Você quer

nnoremap <leader>l :execute 'read !~/lorem.sh' v:count1 '100'<CR>

(Observe que estou usando nnoremap; este é um bom hábito.)