在vim中为当前文件定义编译器

时间:2013-07-12 02:39:35

标签: 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以相同的方式工作)之后,我想知道是否有一种方法可以定义一个适用于所有类型文件(具有编译器定义)的映射。有可能吗?

更新:对不起,我的初步问题让我觉得我只是想编译当前文件。

2 个答案:

答案 0 :(得分:1)

使用makefile:

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

我认为你可以编写一个makefile,它会根据参数的类型做不同的事情。

答案 1 :(得分: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命令根据文件扩展名设置buffer-local b:comp run / 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

当然我确实认识到perl没有真正的REPL(至少不是开箱即用的),并且为了在启动八度音后调用交互式调试器,它出现{{3}然后调用要调试的函数,等等。

底线:此方法的“最终用户”需要记住,运行/ repl / debug支持必然会因您使用的语言的功能而异。