我正在尝试在Vim中找到我正在编辑的文件的名称。所以我可以用它来映射 F5 来编译这个文件。如果我能识别文件格式并选择相应的编译器,那当然会很棒,但实际上并不是必需的。如果我找到文件的名称,我可以自己做。但我真的找不到任何方法来获取我正在编辑的文件的名称。
我知道:make
命令,并且已经映射了它,但对于小脚本/测试程序,我真的不想首先编写一个简单的makefile。
答案 0 :(得分:25)
您可以使用vim命令中的%字符来获取扩展名的当前文件名。例如,
:!javac %
在当前文件上运行javac。
您可以使用
了解更多信息
:help filename-modifiers
答案 1 :(得分:22)
我正在尝试在vim中找到我正在编辑的文件的名称。
对于当前缓冲区,这将为您提供文件名称,
echo "You're editing " bufname("%")
(只是把它放在一些file.vim中,然后把它来源:“so%”。但我认为这不是你需要的。
所以我可以用它来映射 F5 来编译这个文件,用于测试目的。如果我能识别文件格式并选择相应的编译器,那当然会很棒,但实际上并不是必需的。如果我找到文件的名称,我可以自己做。但我真的找不到任何方法来获取我正在编辑的文件的名称。
你可以做几件事。如果vim识别出您正在编辑的文件类型,则可以将 F5 映射到编译器命令并将该命令放在其特定的ftplugin目录中,因此它仅对该文件类型有效。例如,你把
nmap <f5> :!compilername %<cr>
在cpp.vim,fortran.vim,python.vim等中。%
给出了您正在编辑的当前文件的名称。这将执行编译器,就像在命令提示符中调用compilername file.cpp
一样。
当然,compilername
对于每种文件类型都不同;你不打算用cpp编译器编译fortran,你在这种情况下放了fortrancompiler %
。
这是一个选择。您也可以根据.vimrc
中的扩展集autocmd命令进行尝试,以便根据文件的扩展名识别文件类型。这是vim的所有标准用法,没有什么不常见的。现在,我不确定你是怎么想这样做的,所以我只想指出Vim Wiki你可以在哪里找到涵盖这一点的各种文章(以及一些编译器的一些提示) )。
我知道
:make
命令,并且已经映射了它,但对于小脚本/测试程序,我真的不想首先编写一个简单的makefile。
是的,这似乎有点矫枉过正。就个人而言(当我在Windows上时),我发现简单的批处理文件比大项目更容易编写。如果程序在一个或两个文件中,我只是使用一些oneliner映射编译它。
答案 2 :(得分:5)
其他要点非常有用。我想补充一点,您可能希望使用:p,以确保文件名作为完全限定的路径传递。没有它,Vim可以将其作为相对于Vim当前路径的路径传递,该路径可能与编译器使用的路径相同,也可能不同。所以一个解决方案是:
nnoremap <silent> <f5> :!javac %:p<cr>
如果要自动检测文件类型,可以使用AutoCommand
autocmd FileType java nnoremap <buffer> <silent> <f5> :!javac %:p<cr>
autocmd FileType cpp nnoremap <buffer> <silent> <f5> :!gcc %:p<cr>
答案 3 :(得分:3)
正如其他人已经提到的,%
已扩展为当前文件。如果要在vim脚本中获取该字符串,请使用expand("%")
。
但您可能只想将makeprg设置为"compiler-command\ %"
并运行:make
- 您可以通过这种方式获得快速修复支持。 (使用:copen
打开错误/警告窗口)
答案 4 :(得分:2)
嗯,它是%作为替换代码,例如:w。所以:w blah%会写一个文件的副本,其中'blah'被添加到前面。或者 !! echo%用它替换当前行。 Dunno,如果它满足您的需求。
答案 5 :(得分:2)
使用%
代替您的文件名。但就个人而言,我真的认为你可以推动:make
做你想做的事。
我曾经做过你想要避免的事情:只为我所在的每个文件夹中的两行Makefile。我非常喜欢:make
的quickfix支持,以至于甩掉了两行Makefile在整体情况下似乎只是一个很小的开销。
......自那以后我学得更好了。您可以使用autocmd或ftplugin设置makeprg
选项,配置:make
以根据当前文件类型使用您选择的命令。就其本身而言,这可以为您节省一些工作。
当我们使用一个错误消息看起来不像GCC的工具时,问题就开始了。为了解决这个问题,vim还提供了errorformat
选项。 errorformat
非常复杂。如果您真的想了解它,请从:h error-format
开始。从长远来看,复杂程度非常高。这意味着,一旦您学会了如何使用它,您就可以解析任何编译器输出并对其进行格式化,以便使用quickfix(:cope
或:cl
)进行查看。
在短期内,它可能有点不好,因为这意味着你自己一起破解错误格式的前几次,你将花费相当多的时间困惑vimdocs并重新加载和构建将触发编译器可以生成的各种错误消息的文件。如果你只是在你的舒适区域外短暂工作,或者你的老板在你的肩膀上敦促你修复这个错误现在,那绝对不是你想要的。
希望(也可能),有人已经为您解决了这个问题,并为您的默认errorformat
正确配置了ftplugin
,或者将其作为vim脚本的一部分发布,他们是只是等待社区安装和崇拜。
作为一个快速演示,这里有几行我为.vim/ftplugin/haskell.vim
文件一起入侵:
setl makeprg=ghc\ --make\ %
setl errorformat=%E%f:%l:%c:,%C\ %.%m,%Z,%f:%l:%c:%m
我在这里使用setl
,以便仅为haskell源文件配置这些选项;如果我同时编辑不同类型的源文件,它可以使用不同的配置。
如果您最终使用:make
,我还建议您配置switchbuf
设置。我发现如果quickfix被激活并跳转到错误的文件,在构建后按ctrl-O有点烦人。我用:
set switchbuf=useopen,usetab,newtab