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
É quase exatamente isso que eu preciso, ao contrário, para que eu possa acessar o nome do arquivo do buffer atual. Nota: atualizou a pergunta para esclarecer o resultado final desejado.
Richie Marquez
@ Richard Marquez: eu atualizei esta resposta. a nova guia está agora aberto com o "velho" nome do arquivo, assim que você poderia chamar: echo%!
akira
Mas não :r!echosem alterar o buffer.
precisa
2
@garyjohn, akira: obrigado pela ajuda. A parte "<cr> = ..." fez o Vim vomitar erros, mas eu consegui fazê-lo funcionar com ": tabnew | r! Echo #".
Richie Marquez
11
Também pode ser útil observar que, se você deseja mapear isso para uma chave no seu .vimrc, precisará substituir o | caractere com <bar>.
Richie Marquez
16
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.txte 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 #
:newcria uma divisão horizontal, use :vnewse desejar uma divisão vertical e :tabnewpara uma nova guia.
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
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
fonte
:r!echo
sem alterar o buffer.Aqui está o que eu faço. É mencionado nos comentários nas respostas acima.
Exemplo 1 : Encontre todos os arquivos de texto em
/tmp
Exemplo 2 : você está editando o arquivo foo.txt e deseja executar
ls -la foo.txt
e obter a saída em um buffer: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
cria uma divisão horizontal, use:vnew
se desejar uma divisão vertical e:tabnew
para uma nova guia.fonte
%
para o próximo buffer, mas o E499.funciona para mim.
fonte
Se você realmente precisar armazenar o resultado em um novo buffer, mas precisar de informações do antigo buffer atual, poderá usar
system()
:ou armazene o nome do buffer atual para mais tarde :
fonte