vim设置工作目录

时间:2011-10-09 07:44:14

标签: vim working-directory

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

示例:

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

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

:cd ~/programming/projects/foobar/

有一种简单的方法吗? :)

2 个答案:

答案 0 :(得分:4)

如果您的要点是要找到正确的“标签”文件,那么这可以更轻松地完成:

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

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

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

我的例子可能因你的描述而过度,你只需要这个:

set tags=tags;$HOME/programming

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

au BufNewFile,BufRead *.js execute ":lcd " . fnamemodify(findfile("tags", ".;"), ":p:h")

答案 1 :(得分:0)

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

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

codepath#path()

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