2014-01-09 30 views
0

我正在使用vim編輯Linux內核。我的環境使用了很多爲此和其他目的定義的變量和函數,包括編譯內核的bash函數。所以我通常做的是:讓vim makeprg繼承主機shell的環境

  1. vim file.c
  2. 編輯
  3. CTRL + Z
  4. 運行編輯功能,
  5. 通過錯誤
  6. fg
  7. 修復錯誤讀取。

我想用:make替換這個繁瑣的過程,然後通過:copen瀏覽錯誤。問題是,爲了編譯,我需要我的整個環境...我可以編寫一個腳本,每次設置環境,然後調用編譯函數,並從以下位置調用此腳本:make,但會添加幾個每個開銷的秒數:打電話設置環境。

所以我的問題是:可以:make繼承環境變量/函數從它從中產生的shell?

回答

3

過程的關係是這樣的:

bash → vim → bash → make 

如果你想擁有make繼承從最初的殼(即啓動VIM),你必須export所有這些變量(和功能與export -f funcname)環境在最初的shell中。將export添加到環境定義中,或者(如果您不能修改這些定義),請在調用Vim之前從Bash編寫一個shell腳本,該腳本是source scriptname)。

您可以檢查變量是否已經正確地從Vim出口通過

:echo $VARNAME 
+0

不幸的是,我無法將導出添加到我的所有構建環境變量/函數中。我可以在vim中重新初始化我的構建環境嗎?每次打電話給makeprg,我都必須這樣做嗎?也就是說,每次我打電話給makeprg,vim是否會產生一個bash shell? – danns87

+0

我編寫了一個腳本,用於設置構建環境並運行編譯腳本,並將該腳本設置爲vim中的makeprg。它可以工作,但是避免每次打電話時建立構建環境的開銷都會很好:make。有任何想法嗎? – danns87

+0

您不需要在定義處添加_add_;你可以稍後將它們導出(在同一個shell中,這就是爲什麼我說_source_會執行此操作的任何腳本)。 –

1

另一種方式來啓動make是有另一個shell看一組文件或目錄,並揭開序幕命令時,任何文件被改變。每當你:w,你都會在其他shell中啓動make命令。

有許多方法這種方法,如https://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes

概括爲簡單起見Linux機器上,你可以使用inotifywait

while true; do 
    change=$(inotifywait -e close_write,moved_to,create /tmp/path/to/directory/) 
    echo "something happened!" 
    make 
done 

你需要在OS另一個命令X,因爲它不支持inotifywait。超級用戶問題概述了OS X的一些可能的方法。

雖然這並不能解決使用:copen打開錯誤的問題。

+0

謝謝。一般來說,這很有用,但我真的很想能夠使用:copen功能。 – danns87

+1

如果您將單獨的make命令的輸出重定向到一個文件中,您可以在Vim中使用':cfile filename'。這與使用':copen'非常相似。 –