2013-07-12 18 views
1

有沒有什麼方法可以在vim中獲取當前編譯器?在vim中爲當前文件定義編譯器

例如,我想map <Leader>r編譯當前文件和map <Leader>i加載REPL。

我一直在做,到目前爲止是定義一個映射爲每個文件擴展名,如:

au BufNewFile,BufRead *.m map <Leader>r :!octave %<cr> 
au BufNewFile,BufRead *.m map <Leader>i :!octave<cr> 

做它的三種文件類型(Python和Ruby的工作方式相同),我不知道以後如果有一種方法可以定義一種適用於各種文件(其中定義了編譯器)的映射。可能嗎?

更新:對不起,我最初的問題使它看起來像我只想編譯當前文件。

回答

1

更新:

感謝您澄清您的問題。我會嘗試提供更好的答案,包括調用交互式調試器的額外功能(除了您請求的RUN & REPL)。

我必須發佈免責聲明,這不一定是使用vim編譯器插件的慣用方法。

希望這實現了您嘗試實現的替代方法。

添加到您的.vimrc文件:

" Per-file-type definitions for   RUN  REPL  DEBUG 
au BufNewFile,BufRead *.m let b:comp = ["octave", "octave", "octave"] 
au BufNewFile,BufRead *.py let b:comp = ["python", "python", "python -m pdb"] 
au BufNewFile,BufRead *.pl let b:comp = ["perl", "perl", "perl -d"] 
au BufNewFile,BufRead *.rb let b:comp = ["ruby", "irb", "ruby -rdebug"] 

nmap <Leader>r :exec "!" b:comp[0] " %"<cr> 
nmap <Leader>i :exec "!" b:comp[1]<cr> 
nmap <Leader>d :exec "!" b:comp[2] " %"<cr> 

au命令設置緩衝區本地B:基於文件的擴展名運行/ REPL/debug命令補償陣列。 nmap命令映射您建議的按鍵。

然後你可以使用:

<Leader>r - to run the current buffer 
<Leader>i - to start REPL in language corresponding to current buffer 
<Leader>d - to start interactive debugger for the current buffer 

當然我也知道有沒有這樣的事,作爲一個真正的REPL爲Perl(至少不亂的盒),爲了要在啓動八度後調用交互式調試器,它會出現you must call a function such as dbstop("func") to set a breakpoint,然後調用您要調試的功能,等等。底線:這種方法的「最終用戶」需要記住,run/repl/debug支持必然會因您使用的語言的能力而有所不同。

+0

嗨,謝謝你真的很好的答案。我更新了這個問題。事實證明,我希望能夠以多種方式調用編譯器/解釋器,而不僅僅是編譯當前文件。 –

+0

查看已更新問題的更新答案。如果它按預期工作,請告訴我,我可以編輯我的新答案,以刪除之前版本問題的先前答案。 – linguanerd

+0

謝謝。我想這是我們可以乾的。 –

1

使用生成文件:

au BufNewFile,BufRead *.m map <Leader>r :make -f ~/.vim/global.make %<cr> 

我想你可以寫一個makefile,將根據其參數的類型做不同的東西。

相關問題