Como posso obter um buffer navegável (editável?) Com as `mensagens` do vim?

Como posso obter um buffer navegável (editável?) Com as `mensagens` do vim?

Portanto, se eu receber um erro de um plugin, gostaria de poder relatar esse erro no GitHub ou similar.

Infelizmente, não pode ser selecionado com o mouse; e depois de aparecer e me pedir para apertar RETURN, parece que desapareceu para sempre.

  1. Descobri que posso fazer com que os erros apareçamde novousando :messagesou :3messagesou similar; mas aparecem da mesma forma: não selecionáveis, inúteis.

  2. Outro empilhadorperguntadouma pergunta semelhante, que rendeu o comando útil :let @+=v:errmsg- mas que apenas captura oo últimolinha das mensagens; muitos erros que vejo consistem emmúltiplolinhas, todas as quais eu gostaria de selecionar.

Por favor, ajude-me a A. transformar uma :messagesjanela em um buffer, para que eu possa usar a seleção visual normal para copiar o que desejo relatar fora do Vim, ou pelo menos B. construir algo que eu possa colocar no meu .vimrcque irá copiartodosdas linhas do erro mais recente na minha área de transferência.

Obrigado!(=

Responder1

A resposta da Heptite é uma boa maneira de fazer isso usando recursos integrados. Se você concorda em usar um plugin, meubufferizarplugin automatiza um pouco o processo. Permite que você faça:

:Bufferize messages

Para obter um buffer de visualização com o conteúdo da saída desse comando.

Como observação lateral, estou surpreso que a :messagessaída não seja selecionável. Acho que talvez você esteja usando o Vim com uma GUI? Com o terminal Vim, você pode selecionar e clicar com o botão do meio e colar o conteúdo.

Responder2

Experimente isto:

:put = execute('messages')

Explicação:

  • :put {register}coloca o conteúdo do registro no local do cursor (como pno modo normal)
  • execute('messages')é uma função vimscript que executa um comando Ex e captura sua saída
  • ={vimscript expression}é o registro da expressão, cujo valor é o resultado da expressão vimscript

Portanto, o acima captura a saída do :messagescomando no registrador de expressão e coloca o conteúdo do registrador de expressão no local do cursor.

Ver :h quote=, :h :put,:h execute()

Responder3

Experimente isto:

:redir > messages.txt
:messages
:redir END
:e messages.txt

Você pode suprimir a saída para a exibição enquanto ainda captura a saída das mensagens alterando :messagespara :silent messages.

informação relacionada