6

当我在 Vim 中切换缓冲区时(使用 :bn 和 :bp),我希望它自动设置工作目录,但不是打开文件的目录。我希望 Vim 向上递归搜索一个名为“tags”的文件,当它找到该文件时,将工作目录设置为包含“tags”文件的目录。

例子:

:e ~/programming/projects/foobar/src/js/scripts.js

如您所见,“foobar”是一种“项目根”。假设“标签”文件位于 foobar 目录中。现在 Vim 应该在 "js" 中查找,但是没有标签文件。然后它应该在“src”中查找,那里没有标签文件。然后它应该在“foobar”中查找“tags”文件,然后执行:

:cd ~/programming/projects/foobar/

有没有一种简单的方法可以做到这一点?:)

4

2 回答 2

4

如果您的全部目的是找到正确的“标签”文件,那么这可以更容易地完成:

set tags=./tags,tags;$HOME/programming,$HOME/programming/your/global/tags

tags选项接受逗号(或空格)分隔的条目列表。在我的示例中,我有以下条目:

  • ./tags这意味着它应该首先tags在当前目录中查找 -file
  • tags;$HOME/programming这意味着tags从当前目录查找一个 -file $HOME/programming(这就是分号的作用,请参阅file-searching)。如果您不使用分号指定“停止”目录,则它会搜索到根目录/
  • $HOME/programming/your/global/tags最后这是一个由绝对文件名引用的标签文件

从你的描述来看,我的例子可能对你的目的有点过分了,你只需要这个:

set tags=tags;$HOME/programming

但是如果你真的需要改变工作目录,那么你可以在你的 .vimrc 中添加这样的东西(如果你必须改变lcd的话):cd

au BufNewFile,BufRead *.js execute ":lcd " . fnamemodify(findfile("tags", ".;"), ":p:h")
于 2011-10-09T08:26:56.930 回答
0

免责声明:我是上述插件的作者。

我认为您可以使用小codepath.vim。我写它是因为我需要一个小功能来帮助我到达我的项目根目录。该插件假设您有一个包含所有代码的文件夹。类似的东西$HOME/code。好吧,它提供了以下功能:

codepath#path()

我与NERDTreecommand-t等插件结合使用。所以我可以在我的项目根目录中打开一个 NERDTree 窗口。它确实是一个小插件,但我一直在使用它。

于 2011-10-09T08:40:28.183 回答