![如何使用 vim 的“訊息”獲得可導航(可編輯?)的緩衝區?](https://rvso.com/image/1543219/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20vim%20%E7%9A%84%E2%80%9C%E8%A8%8A%E6%81%AF%E2%80%9D%E7%8D%B2%E5%BE%97%E5%8F%AF%E5%B0%8E%E8%88%AA%EF%BC%88%E5%8F%AF%E7%B7%A8%E8%BC%AF%EF%BC%9F%EF%BC%89%E7%9A%84%E7%B7%A9%E8%A1%9D%E5%8D%80%EF%BC%9F.png)
因此,如果我從插件中收到錯誤,我希望能夠在 GitHub 或類似網站上報告該錯誤。
不幸的是,它不能用滑鼠選擇;在出現並要求我按“返回”後,它似乎永遠消失了。
我發現我可以導致錯誤出現再次使用
:messages
或:3messages
類似;但它們以同樣的方式出現:不可選擇、無用。另一個堆疊機問一個類似的問題,產生了有用的命令
: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')
是一個 vimscript 函數,它執行 Ex 命令並捕獲其輸出={vimscript expression}
是表達式暫存器,其值是vimscript表達式的結果
因此,上面捕獲了表達式寄存器中命令的輸出:messages
,並將表達式寄存器的內容放在遊標所在的位置。
看:h quote=
,:h :put
,:h execute()
答案3
嘗試這個:
:redir > messages.txt
:messages
:redir END
:e messages.txt
:messages
您可以透過變更為抑制輸出到顯示器,同時仍會擷取訊息輸出:silent messages
。