有没有办法在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以相同的方式工作)之后,我想知道是否有一种方法可以定义一个适用于所有类型文件(具有编译器定义)的映射。有可能吗?
更新:对不起,我的初步问题让我觉得我只是想编译当前文件。
答案 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支持必然会因您使用的语言的功能而异。