Como canalizar a saída de um comando shell para um novo buffer no Vim? Obviamente, o seguinte não funcionaria, mas você pode ver no que estou falando:
:!echo % | :newtab
Como canalizar a saída de um comando shell para um novo buffer no Vim? Obviamente, o seguinte não funcionaria, mas você pode ver no que estou falando:
:!echo % | :newtab
Respostas:
Você não pode canalizar a saída de um comando do shell para um comando que cria um novo buffer, mas pode criar um novo buffer e ler a saída de um comando do shell para esse buffer com uma entrada na linha de comando do Vim. Uma versão funcional do seu exemplo seria
:tabnew | r !echo <c-r>=bufname("#")<cr>
Observe que, neste caso, o símbolo de pipe é um separador entre os comandos do Vim ex, não o pipe do shell. Veja também
:help :tabnew
:help :r!
:help :bar
:r!echo
sem alterar o buffer.
Aqui está o que eu faço. É mencionado nos comentários nas respostas acima.
:new | r ! <cmd>
:new | r ! <cmd> # (# is replaced with filename)
Exemplo 1 : Encontre todos os arquivos de texto em/tmp
:new | r ! find /tmp -name '*.txt'
Exemplo 2 : você está editando o arquivo foo.txt e deseja executar ls -la foo.txt
e obter a saída em um buffer:
:new | r ! ls -la #
O #
é substituído pelo nome do arquivo do buffer original que você está editando. Isso é particularmente útil para comandos de controle de origem ad-hoc, por exemplo
:new | r ! hg annotate -un #
:new
cria uma divisão horizontal, use :vnew
se desejar uma divisão vertical e :tabnew
para uma nova guia.
:tabnew | enew | r ! <your shell cmd>
funciona para mim.
Se você realmente precisar armazenar o resultado em um novo buffer, mas precisar de informações do antigo buffer atual, poderá usar system()
:
:let res = system('echo '.expand('%'))
:tabnew
:put=res
ou armazene o nome do buffer atual para mais tarde :
:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>