如何使用 vim 的“消息”获取可导航(可编辑?)缓冲区?

如何使用 vim 的“消息”获取可导航(可编辑?)缓冲区?

因此,如果我从插件中收到错误,我希望能够在 GitHub 或类似网站上报告该错误。

不幸的是,它不能通过鼠标选择;并且在出现并要求我按 RETURN 键后,它似乎永远消失了。

  1. 我发现我可能导致错误出现再次使用:messages:3messages或类似;但它们以相同的方式出现:不可选择,无用。

  2. 另一个堆叠器一个类似的问题,它产生了有用的命令:let @+=v:errmsg——但它只捕获了最后消息行;我看到的许多错误都是由多种的行,我希望选择所有这些行。

请帮助我 A. 将:messages窗口变成缓冲区,这样我就可以使用正常的类似视觉选择来复制我想要在 Vim 之外报告的内容,或者至少 B. 构建一些我可以扔进我的文件中的东西来.vimrc复制全部最近的错误行复制到我的剪贴板上。

谢谢!(=

答案1

Heptite 的答案是使用内置插件来实现这一点的好方法。如果你同意使用插件,我的缓冲插件可以稍微自动化这个过程。你只需要做:

:Bufferize messages

为了获得包含该命令输出内容的预览缓冲区。

顺便说一句,我很惊讶:messages输出不可选。我猜也许你正在使用带有 GUI 的 Vim?使用终端 Vim,你可以选择,然后中键单击粘贴内容。

答案2

尝试这个:

:put = execute('messages')

解释:

  • :put {register}将寄存器的内容放在光标位置(如p在正常模式下)
  • execute('messages')是一个执行 Ex 命令并捕获其输出的 vimscript 函数
  • ={vimscript expression}是表达式寄存器,其值是 vimscript 表达式的结果

因此,上述操作将捕获表达式寄存器中的命令输出:messages,并将表达式寄存器的内容放在光标的位置。

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

答案3

尝试这个:

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

:messages通过更改为 ,您可以抑制显示输出,同时仍可捕获消息输出:silent messages

相关内容