2016-07-23 162 views
1

而不是讓vim輸出:make命令的輸出,我想讀取文件中的輸出(它會在vim中自動更新);這樣我的編譯文件就可以馬上運行,而不必看到:make命令的輸出。重定向vim:使輸出到文件

我用下面的Makefile

all: compile run 

compile: file.cc 
     g++ -o file file.cc 

run: file 
     ./file 

怎樣才能重定向的輸出:在某種程度上作出命令,它是不是也印製的Vim屏幕?

回答

1

首先我們有https://vi.stackexchange.com/,你可以在那裏得到關於Vim的更好的答案。


其次,我認爲,一個Makefile沒有地方來運行程序,背後make想法是趕上編譯錯誤。但是,假設你有你的原因(例如./file打開圖形顯示),有一對夫婦的方式在Vim中執行此:

對於您可以設置makeprg執行重定向開始:

:set makeprg=make\ >/dev/null\ 2>&1 

(您可以更改/dev/null到實際文件)

但是,這仍然讓行:

Press ENTER or type command to continue 

並要求確認,當您知道沒有輸出時可能會感到煩惱。


爲了擺脫確認線,你可以使用silent如下:

set makeprg=make\ >/dev/null\ 2>&1 
function! MyMake() 
    silent make 
    redraw! 
endfunction 
command Mm call MyMake() 

現在你可以這樣做:

:Mm 

要執行的品牌和走時背部要挺直到Vim。 (僅在某些終端中需要redraw!

+0

它做吧!我如何使這個過程在後臺運行;所以屏幕不會立即切換到外殼? –

+1

@MusséRedi - 你有兩種選擇。hacky是'設置makeprg = make \>/dev/null \ 2>&1 \&',並讓整個make進程在後臺運行。正確的是使用頻道(請參閱':H頻道'),但我會建議針對頻道,因爲它們仍然是非常錯誤的。 (並且我嘗試在VimScript中使用通道編碼的經驗非常糟糕。) – grochmal

1

您可以執行以下命令:

:silent exec "!make >Output" | :redraw! 

文件Output包含執行make命令的最後輸出。

0

使用:silent刪除輸出並按「回車」提示。我建議一個很好的映射或命令:

command! -nargs=* Smake silent make <args> 
nnoremap <f5> :silent make<cr> 

:make將填充與:make結果quickfix列表。使用:copen打開quickfix窗口。

如需更多幫助,請參見:

:h :command 
:h silent 
:h :make 
:h 'makeprg' 
:h quickfix