![](/img/trans.png)
[英]Is there a way to redirect the output of “:ilist pattern” to a Vim quickfix window?
[英]vim redirect output to quickfix
是否可以將命令的輸出重定向到快速修復窗口?
我正在運行的命令是
:!java %:r
並希望輸出進入quickfix窗口
請注意,quickfix窗口用於特定輸出(例如編譯器或語法檢查工具),其中包括當前緩沖區的引用(即行號和列號)。 圍繞這個有很多基礎設施: 'makeprg'
, 'errorformat'
等,通常捆綁在一個編譯器插件中 。
雖然你可以將任意輸出重定向到quickfix窗口,但它在將外部程序的輸出讀入新的暫存緩沖區方面提供的好處(並且具有破壞'makeprg'
的缺點),例如:
:new|0read !java #:r
我建議使用以下兩個選項之一:配置makeprg
以運行您想要的java,或創建一個映射或命令來填充quickfix列表而不更改任何其他內容。
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
以獲取更多信息。
或者,您也可以使用cexpr
填充quickfix列表。 例如:
:cexpr system('java ' . shellescape(expand('%:r')))
expand
對於擴展表達式中的'%:r'
是必要的,並且shellescape
轉義,因此它可以用作shell命令的參數。 然后將字符串'java '
添加到轉義路徑中,並將結果作為system
的shell命令調用。 此命令的輸出用於加載quickfix列表。
關於這一點的makeprg
是它不會改變makeprg
或任何其他設置,但仍然可以讓您輕松填充quickfix列表。 當然,您可能希望對此進行映射或為其定義自定義命令。
嘗試這個:
set makeprg=java
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.