簡體   English   中英

vim重定向輸出到quickfix

[英]vim redirect output to quickfix

是否可以將命令的輸出重定向到快速修復窗口?

我正在運行的命令是

:!java %:r

並希望輸出進入quickfix窗口

請注意,quickfix窗口用於特定輸出(例如編譯器或語法檢查工具),其中包括當前緩沖區的引用(即行號和列號)。 圍繞這個有很多基礎設施: 'makeprg''errorformat'等,通常捆綁在一個編譯器插件中

雖然你可以將任意輸出重定向到quickfix窗口,但它在將外部程序的輸出讀入新的暫存緩沖區方面提供的好處(並且具有破壞'makeprg'的缺點),例如:

:new|0read !java #:r

我建議使用以下兩個選項之一:配置makeprg以運行您想要的java,或創建一個映射或命令來填充quickfix列表而不更改任何其他內容。

選項1:使用makeprg和編譯器插件

我通常會為此設置makeprg選項,正如其他人所說的那樣。 這不是一個黑客,這正是makeprg選項的用途。

唯一的問題是如果您還要運行另一個構建腳本。 更通用的解決方案是創建一個簡單的編譯器插件。 例如,某個在你的runtimepath ,您可以創建下的文件compiler/java.vim ,並將其設置是這樣的:

if exists("current_compiler")
  finish
endif
let current_compiler = "java"

CompilerSet makeprg=java

現在,當您使用java時,您可以執行:compiler java ,然后在當前窗口中根據需要設置makeprg 如果要將其用於所有窗口,請使用:compiler! java :compiler! java ,一聲巨響。 並非所有編譯器插件都設置了makeprg選項,但您始終可以使用:set makeprg&重置它:set makeprg& 嘗試:help write-compiler-plugin以獲取更多信息。

選項2:創建命令來執行此操作

或者,您也可以使用cexpr填充quickfix列表。 例如:

:cexpr system('java ' . shellescape(expand('%:r')))

expand對於擴展表達式中的'%:r'是必要的,並且shellescape轉義,因此它可以用作shell命令的參數。 然后將字符串'java '添加到轉義路徑中,並將結果作為system的shell命令調用。 此命令的輸出用於加載quickfix列表。

關於這一點的makeprg是它不會改變makeprg或任何其他設置,但仍然可以讓您輕松填充quickfix列表。 當然,您可能希望對此進行映射或為其定義自定義命令。

嘗試這個:

  1. set makeprg=java
  2. make %:r

這有點破解,當然假設你還沒有在實際的構建腳本中使用makeprg

我映射了leader + j + r來運行我的java代碼並通過執行在quickfix窗口中顯示它

map <leader>jr :set makeprg=java <CR>:make %:r<CR>:copen<CR>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM