Vim:从祖先项目目录开始编辑文件

时间:2015-02-05 23:12:13

标签: vim filepath

我的机器上有一个git存储库的多个工作目录,当我在vim中打开每个文件时,我希望能够从包含当前缓冲区的顶级项目目录开始打开一个新文件文件。

例如,让我们说我在缓冲区中打开这些文件:

~/testing/MyProject/src/main.cc
~/mirror/MyProject/src/lib/module.h

如果我正在修改module.h缓冲区,我希望能够键入:e <something?>并将其自动填充到~/mirror/MyProject/

2 个答案:

答案 0 :(得分:1)

一般的方法是将当前的工作目录设置为项目的根目录。

但是,如果您确实更改了当前的工作目录,那么您可能需要查看类似fugitive.vim:Gedit命令的内容,该命令可用于编辑相对于存储库的文件&#39 ; s root。例如:Gedit /foo.txt

答案 1 :(得分:0)

我设法通过向cabbr <expr> /添加.vimrc来实现目标:

" Makes // expand to the containing MyProject directory.
cabbr <expr> / FindMyProjectInPath()

function FindMyProjectInPath()
  let path=expand("%:p:h")
  while path != "/" && fnamemodify(path,":t") != "MyProject"
    let path = fnamemodify(path, ":p:h:h")
  endwhile

  return path
endfunction

那么,如果我正在修改~/mirror/MyProject/src/lib/module.h,我可以输入:e //,然后展开到:e ~/mirror/MyProject/

如果我不在MyProject目录中,它将保持为//:如果我正在修改~/other_project/main.cpp,则:e //将不会展开。

您输入的第一个/cabbr <expr> /匹配,第二个匹配使其展开。

您也可以使用变量来允许在编辑时动态设置“MyProject”。