Como despejo um comando vim interno (não o comando shell) em um novo buffer?
Por exemplo, eu quero despejar uma lista de todos os plugins em :enew
de :scriptnames
modo que eu possa busca-lo.
fonte
Como despejo um comando vim interno (não o comando shell) em um novo buffer?
Por exemplo, eu quero despejar uma lista de todos os plugins em :enew
de :scriptnames
modo que eu possa busca-lo.
Você pode usar :redir
para redirecionar a saída para uma variável, registro ou arquivo. Exemplo de redirecionamento para o registro sem nome:
:redir @">|silent scriptnames|redir END|enew|put
Como alternativa, o scriptease.vim de Tim Pope fornece o :Scriptnames
comando que será carregado :scriptnames
na lista de correções rápidas e :copen
.
Se você se encontra redirecionando muitos comandos, você pode agrupar isso em um comando:
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
Agora você pode usar o :Redir
comando para redirecionar a saída para um novo buffer. por exemplo :Redir scriptnames
ou :Redir ls
.
O Vim 8 é enviado com a nova execute()
função. Você pode usar a execute()
função para, em vez de :redir
capturar a saída ex-comando.
:enew|pu=execute('scriptnames')
Para obter mais ajuda, consulte:
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
END
significa isso ?:redir END
diz ao Vim para terminar o redirecionamento de mensagens. Veja:h :redir
Para ser completo, quero apresentar essas funções impressionantes que coletei (roubei) do romainl
Isso levará a saída de comando normal ou do sistema e a colocará em uma nova guia. Sinta-se livre para alterar a linha
tabnew
paravsplit
ousplit
etc.fonte
Há também o plug-in bufferize.vim :
que é basicamente uma versão empacotada da resposta aceita (usando
:redir
) e pode ser mais conveniente para alguns.fonte