2010-06-19 56 views
1

我試圖從Vim中的make返回代碼「0,成功,非零,如果錯誤」。具體而言,我在Ubuntu上使用v:shell_error不起作用。從Vim中獲取linux的錯誤代碼

四處看着this question,後,它似乎是因爲我shellpipe設置,這是

shellpipe=2>&1| tee

tee管廠名輸出回活力。 shell顯然是從tee返回錯誤代碼到vim而不是make。我如何獲取make的錯誤代碼?

回答

3

您可以嘗試爲此創建自定義功能。例如。使用:call system("make > make.out")運行使輸出重定向到一個文件中。之後,使用:cf make.out加載錯誤文件。不過,從來沒有嘗試過。

在年底,make結果可能也只是通過測試結果是否存在,在文件系統檢查:(「|」這裏的符號是Vim的命令分隔符)

:make | if !filereadable("whatever-make-was-supposed-to-create") | throw "Make failed!!!" | endif 

分配對於鍵盤快捷方式將消除鍵入的需要。

P.S.我通常試圖讓我的程序不會產生任何警告,所以我從來沒有真正遇到過這個問題。什麼BTW導致另一種可能的解決方案:只需使用例如移除警告(或簡單地不期望的輸出線)即可。 grep -v tabooword通過覆蓋'makeprg'從make輸出。實際上在幫助中描述的是::h 'makeprg'

P.P.S. 我開始使用VIM了......假設你也使用bash作爲shell。你有沒有嘗試添加到出口$ {PIPESTATUS [0]}到shellpipe?例如:

:set shellpipe=2>&1\ \|\ tee\ %s;exit\ \${PIPESTATUS[0]} 

剛剛在Debian上測試過,它對我有用。 :h 'shellpipe'瞭解更多。

1

我目前唯一能想到的是爲make和tee創建兩個包裝腳本。我敢肯定有一個更簡單的方法,但現在你可以試試這個:

創建生成包裝腳本:

#!/bin/bash 

make [email protected] 
echo $? > ~/exit_code_cache 

創建一個發球包裝腳本:

#!/bin/bash 

tee [email protected] 
return `cat ~/exit_code_cache` # (or do something else with the exit code) 

使用新使:set makeprg=mymake並設置您自己shellpipe使用您的tee包裝(shellpipe=2>&1 | mytee)。

它沒有測試,但想法應該清楚。希望能幫助到你。