2012-09-04 55 views
8

總之,我需要在Makefile中知道make是否從ViM中調用。是否有某個變量(如ENVIRONMENT或其他),ViM將設置爲特定值?如何從Makefile中調用Make來從ViM中調用Makefile?

我之所以需要這個如下:

如果從慶典叫,我可以做各種美妙的東西,用戶(或自己),如爲是被建立在哪個子系統給人的消息,並強調錯誤和警告。

然而問題是,當從ViM調用時,錯誤消息已經被捕獲並且引入\x1b命令(對於顏色)使得ViM不能理解消息。我想要做的是在ViM中發佈:make時,基本上禁用着色功能。

即使我寧願讓Makefile解決它,我也可以接受其他解決方案。

回答

2

在Vim中,你可以設置由打開的shell繼承的環境變量;例如

:let $INSIDE_VIM = 1 

如果這只是:make,你可以操縱它決定了被調用的'makeprg'

:set makeprg=export\ INSIDE_VIM=1;make 

如果你只是關心着色轉義序列,你可以只設置$TERM到不明白顏色的東西(dumb也許?),如果着色不是硬編碼的(不幸的是在很多工具中很大),它應該服從終端設置並且不打印轉義序列。

+0

我有一個配置,說它是否應該使用構建或不。因此,Makefile中的檢查只會覆蓋配置。我沒有想過檢查終端是否可以顯示顏色,但(謝謝指出)。不過,可能更改'TERM'本身並不是很好,因爲其他程序(例如bash本身)可能會依賴它。 – Shahbaz

+0

'let $ INSIDE_VIM = 1'雖然很棒! – Shahbaz

+0

只要你不把'xterm'切換到'dtterm',而是將終端功能「降級」,它應該沒問題。但我不是終端專家,它可能不會一直工作;只是補充說明了完整性。 –

1

您可以將您的vim綁定更改爲SOURCE="vim" make,因此在您的makefile中,$$SOURCE變量設置爲「vim」。

編輯:我看到你實際上並不使用vim的綁定,您可以與下面的行並將它們用在.vimrc(或/etc/vimrc)是這樣的:

:nmap <F5> <CR>SOURCE="vim" :make<CR> 

這將綁定F5到你想要

+0

爲什麼雙'$'?另外,我可以將':make'別名改爲'SOURCE =「vim」make'嗎? – Shahbaz

+0

這是我在我的Makefile中需要輸出SOURCE變量'all:echo「$$ SOURCE」'的內容,其中打印了vim和我的調用 – jolivier

1

您可以檢查MYVIMRCVIMRUNTIME環境變量。在我的GNU/Linux發行版中,當從vim內調用make時,SHLVL的值爲bash和2。

+0

這些都很好,很容易。但是,如果'.vimrc'不存在,'MYVIMRC'可能不會被定義。 'VIMRUNTIME'無論如何都可以由用戶定義(儘管不太可能)。 'SHLVL'沒有那麼強大,因爲'vim'可能沒有從1級bash運行。我會等待其他答案,但到目前爲止'VIMRUNTIME'似乎是最可靠的解決方案。 – Shahbaz

4

我要麼明確地告訴makefile你不想着色或過濾掉。 如果您嘗試在makefile內部猜測,當您使用其他編輯器或shell或調整環境時,它很可能會中斷。

我更傾向於將只篩選出非打印字符:

:set makeprg=make\ $*\ \\\|filter 

,因爲這並不需要在makefile明確的解決方法。但是,所需的過濾器本身並不重要:例如,請參閱unix.stackexchange上的this question

此外,作爲已經建議,明確地告訴你的Makefile最簡單的方法是將變量添加到您的調用:

:set makeprg=make\ NO_COLOUR=1 

或任何(make應該是makeprg當前值)。