我正在尝试在Vim中找到我正在编辑的文件的名称.所以我可以用它来映射F5来编译这个文件.如果我能识别文件格式并选择相应的编译器,那当然会很棒,但实际上并不是必需的.如果我找到文件的名称,我可以自己做.但我真的找不到任何方法来获取我正在编辑的文件的名称.
我知道这个:make
命令,并且已经映射过了,但对于小脚本/测试程序,我真的不想先写一个简单的makefile.
您可以使用vim命令中的%字符来获取扩展名的当前文件名.例如,
:!javac %
在当前文件上运行javac.
你可以找到更多
:help filename-modifiers
我正在尝试在vim中找到我正在编辑的文件的名称.
对于当前缓冲区,这将为您提供文件的名称,
echo "You're editing " bufname("%")
(只需将它放在一些file.vim中,然后将其命名为":so%".但我认为这不是你所需要的.
所以我可以用它来映射F5来编译这个文件,用于测试目的.如果我能识别文件格式并选择相应的编译器,那当然会很棒,但实际上并不是必需的.如果我找到文件的名称,我可以自己做.但我真的找不到任何方法来获取我正在编辑的文件的名称.
你可以做几件事.如果vim识别出您正在编辑的文件类型,则可以映射F5到编译器命令并将该命令放在其特定的ftplugin目录中,因此它仅对该文件类型有效.例如,你把
nmap:!compilername %
在cpp.vim,fortran.vim,python.vim等中,%
给出了您正在编辑的当前文件的名称.这将执行编译器,就像compilername file.cpp
在命令提示符中调用一样.
当然,compilername
每种文件类型都会有所不同; 你不打算用cpp编译器编译fortran,你fortrancompiler %
就是这样的.
这是一种选择.您也可以根据扩展设置autocmd命令尝试,以便.vimrc
根据文件的扩展名识别文件类型.这是vim的所有标准用法,没有什么不常见的.现在,我不确定你是怎么想这样做的,所以我只想指出Vim Wiki,在那里你可以找到涵盖这个的各种文章(以及一些编译器的一些技巧).
我知道这个
:make
命令,并且已经映射过了,但对于小脚本/测试程序,我真的不想先写一个简单的makefile.
是的,这看起来有点矫枉过正.就个人而言(当我在Windows上时),我发现简单的批处理文件比大项目更容易编写.如果程序在一个或两个文件中,我只是使用一些oneliner映射来编译它.
其他要点非常有用.我想补充一点,您可能希望使用:p,以确保文件名作为完全限定的路径传递.没有它,Vim可以将其作为相对于Vim当前路径的路径传递,该路径可能与编译器使用的路径相同,也可能不同.所以一个解决方案是:
nnoremap:!javac %:p
如果要自动检测文件类型,可以使用AutoCommand
autocmd FileType java nnoremap:!javac %:p autocmd FileType cpp nnoremap :!gcc %:p