Na linha de comando, pressione <C-u>
e digite @*
e digite.
<C-u>
excluirá o intervalo visual '<,'>
que foi inserido automaticamente se algum texto for selecionado visualmente.
:@*
executará o conteúdo do *
registro que contém o que for visualmente selecionado no momento.
Mesmo que o texto selecionado / destacado esteja no seu navegador da web (firefox, chrome, ...), ele funcionará, o *
registro permitirá que você acesse diretamente no vim.
Se o texto for selecionado em um buffer vim, outra solução é copiá-lo num registo nomeado, por exemplo, a um registo de digitação "ay
.
Em seguida, na linha de comandos, digite: <C-r>a
e digite.
Ctrl+ rlhe dará uma espécie de prompt representado pelo personagem "
(para mais informações, leia :h c_Ctrl-r
).
Nesse novo prompt, se você der o nome de um registro, seu conteúdo será inserido na linha de comando, onde você poderá editá-lo antes da execução.
Além disso, se você copiar algum texto sem especificar um registro, ele estará acessível a partir do registro sem nome " .
Então, suponha que você tenha uma linha de vimscript em um arquivo e deseje fornecê-lo rapidamente, copie-o e Y
, na linha de comando, com: :<C-r>"
e digite.
Finalmente, se você usar esta última solução, há apenas um problema do qual você deve estar ciente.
Se você vir um caractere estranho na linha de comando ^M
, é a notação de sinal de intercalação do retorno de carro. Você deve excluí-lo, caso contrário, provavelmente receberá um erro.
Em resumo, você:
- copie sua linha de vimscript com
Y
- alterne para o modo de comando com
:
- pressione
<C-r>
para entrar no prompt de registros
- digite
"
para chamar o registro sem nome
- pressione backspace para excluir o
^M
caractere
- e aperte enter.
@*
antes, obrigado!: <C-r>a
lo também funcionou muito bem :) Acho que o vim leu os^M
como retornos de linha - e executou cada um como sua própria linha / comando individual?Na verdade, eu faço isso de maneira um pouco diferente, apenas faço as edições no meu vimrc e a reencheio toda vez que escrevo. (Eu tenho um conjunto em cascata de arquivos vimrc, então isso me permite alterar qualquer um deles.)
fonte
Mais diretamente para a pergunta do que minha outra resposta, você pode definir um mapeamento como este (
nnoremap
para nenhuma seleção, basta executar a linha atual;vnoremap
para quando o modo visual estiver ativo):Nos dois casos, a "linha atual" é
:execute
d; portanto, na versão visual, você está:execute
inserindo uma linha após a outra através da seleção visual.Conforme declarado em outra resposta, ele
<C-u>
exclui a especificação de intervalo que aparece na linha de comando quando :é digitada. Os|
caracteres precisam ser escapados porque, caso contrário, são interpretados como o final dovnoremap
comando.Isso também pode ser transformado em uma função para se livrar de algumas das ginástica de escape, mas não me parece uma grande vitória neste momento. Basicamente, o vnoremap será expandido em várias linhas e
call
editado com um intervalo ou não, dependendo do modo de mapeamento [nv].fonte