Inserir a saída de um comando do sistema no local atual no vim

33

No vim, quando eu uso

:r !ls somefilename

ele insere a saída desse comando em uma nova linha abaixo da linha atual.

Se eu fizer

let @a = system("ls")

e depois

"ap

ele ainda insere a saída em uma nova linha abaixo da linha atual.

Existe uma maneira de fazer com que o vim insira a saída no local atual?

deshmukh
fonte
Consulte esta resposta útil Executar linha atual no bash do vim
Rohan Ghige 02/02

Respostas:

14

Você pode colar o conteúdo do buffer da área de transferência entre caracteres com Ctrl-R * no modo de inserção (e uma abordagem semelhante para outros buffers). Portanto, se você pode obter o comando do sistema em um buffer, você deve estar definido. (Fonte: https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position ).

:let @a=system("ls -l")colocará a saída de ls -lno registrador a. Você pode colá-lo (no modo de inserção) com ^R-a.

Steve Kroon
fonte
Além disso, na maioria das plataformas, a área de transferência é sincronizada com um registro (normalmente *); portanto, se você canalizar sua saída de comando para a área de transferência, ela será "*utilizada.
precisa saber é o seguinte
39
:r !command 

lerá a saída do comando e a inserirá na linha abaixo da linha atual. É assim que o vi é programado e você não pode mudar o comportamento.

Mas diga se você está na linha número 3. Se você tentar :r !date. Ele inserirá o valor da data no número da linha 4.

Se você deseja que o valor da data seja exibido na linha número 3, tente :2r !dateinserir o valor da data na linha número 3.

devav2
fonte
4
Isso é inserido em uma linha diferente, mas ainda em uma linha própria. Quero inseri-lo no local atual!
Deshmukh
13

Aqui está uma maneira alternativa de colar a saída do comando externo antes do cursor:

:exe 'norm i' . system("ls -l")

ou use o registrador de expressão ( :help @=):

"=system('ls -la')

então aperte P. Ou de maneira mais curta:

<CTRL-R>=system('ls -la')<CR>
kenorb
fonte
4
Essa é a resposta.
Jacob
1
Acordado! Essa deve ser realmente a resposta correta, porque inclui uma solução mais programática (com :exe) que pode ser incluída nos comandos.
metasoarous 17/10