当我在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/
有一种简单的方法吗? :)
答案 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()
我与NERDTree或command-t等插件结合使用。所以我可以在我的项目根目录中打开一个NERDTree窗口。它确实是一个小插件,但我一直都在使用它。