当我在 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/
有没有一种简单的方法可以做到这一点? :)
最佳答案
如果您的重点是获得正确的“标签”文件,那么这可以更容易地完成:
set tags=./tags,tags;$HOME/programming,$HOME/programming/your/global/tags
tags
option 接受逗号(或空格)分隔的条目列表。在我的示例中,我有以下条目:./tags
这意味着它应该首先查找 tags
-当前目录下的文件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")
关于vim 设置工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702117/