1

有什么办法可以在 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​​ 的工作方式相同)执行此操作之后,我想知道是否有一种方法可以定义一个适用于所有类型文件(定义了编译器)的映射。可能吗?

更新:对不起,我最初的问题让我看起来只是想编译当前文件。

4

2 回答 2

2

更新:

感谢您澄清您的问题。我将尝试提供更好的答案,包括用于调用交互式调试器的额外功能(除了您要求的 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: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(至少不是开箱即用的),并且为了在启动 octave 后调用交互式调试器,您似乎必须调用一个函数,例如dbstop("func") 设置断点,然后调用要调试的函数,依此类推。

底线:这种方法的“最终用户”需要记住,运行/复制/调试支持必然会根据您使用的语言的功能而有所不同。

于 2013-07-12T04:10:45.693 回答
1

使用生成文件:

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

我认为您可以编写一个生成文件,该文件将根据其参数的类型执行不同的操作。

于 2013-07-12T02:48:49.773 回答