VIM: 如何获取打开缓冲区的文件 path/directory 并执行某些操作?

VIM: how to get the file path/directory of opened buffer and do something?

我的情况是:我正在使用 vim 打开一些 .cpp 文件,例如

vim 1.cpp src/2.cpp root/src/3.cpp

有时,我想重建 3.cpp 所以我不得不使用另一个 window 到

"rm root/src/3.o"

并在 vim 中键入

":make"

这很好用,NP。但我正在寻找一个 .vimrc function/command 那个:

当我切换到缓冲区时,例如"root/src/3.cpp"并按下此命令,vim会检测"root/src"的目录和不带后缀“3”的文件名,并自动执行"rm root/src/3.o".[=15的命令=]

在这种情况下,我可以随便切换到任何缓冲区并重新触发这个文件的构建。

注意我不希望像 "make clean" 这样映射 gmake 工具命令,因为我们使用了几个不同的 make 实用程序,如 scons、cmake 等

那么如何在.vimrc中写这个function/command呢?谢谢。

您可以通过以下方式从 root/src/3.cpp 缓冲区中获取 root/src/3

expand('%:p:r')

然后你可以随意连接 .o 结束,并构建命令。

:call system('rm '.expand('%:p:r')) 正如@Kent 所说,甚至只是 :!rm %:p:r.

但我很惊讶你需要这样做。负责编译链的工具通常理解依赖关系(无论是哪个工具),并且您不需要删除通常需要映射才能为您完成的目标文件。

PS:完美possible (but I need to update the doc)支持CMake,或者out-of-source从vim编译。但实际上,使用 out-of-sources 编译,您不需要手动删除这些文件,:make clean 如果 :make 已经有效。