vim 设置工作目录

标签 vim working-directory

当我在 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/

    相关文章:

    html - 使用 vim 编辑 html 的附加工具/脚本/插件

    vim - Vim中的<C-w>键是什么?

    python - 在 Python 中更改为已知的目录名称但未知的绝对路径

    命令模式下的 vim 路径补全

    visual-studio - 有 vsVim 用户指南吗?

    java - 如何使工作目录文件可供 WebStart 应用程序使用?

    Git: "working directory"到底在哪里?

    makefile - 如何获取Makefile当前的相对目录?

    git - 如何显示我当前工作目录和我上次提交的差异?

    vim - 插入模式下vim(linux)中的箭头键对我来说坏了