如何在Vim中自动更改当前路径?

7

当我在终端中键入类似以下内容时:

mvim ./path/to/my/project

Vim打开了这个项目目录,在我的NERDTree中我可以看到文件,但是当我尝试运行一些命令行命令时,比如

:!touch some/file/in/my/project

发生的情况是,我的当前路径是我的用户主目录

因此,如果我想在我的项目目录中创建文件,我必须输入完整路径,例如:

:!touch ./path/to/my/project/some/file/in/my/project/name

在vim启动后,是否有可能自动更改目录?


可能是如何在VIM中设置文件的正确路径?的重复问题。 - Michael Kristofik
我认为autochdir不能解决我的问题。 我想要改变目录到我的项目根目录,仅此而已。 - Stanislav Mekhonoshin
:pwd 应该是您调用 Vim 的目录。如果您只是启动 GVim/MacVim,则为 ~ - romainl
我使用vimprj插件,但是我不喜欢它总是返回到vimprj根目录的“特性”,所以我不得不禁用它(g:vimprj_changeCurDirIfVimprjFound = 0)。你可能会喜欢这个默认行为。 - oblitum
5个回答

5

针对您的特定用例,您可以尝试在VimEnter事件上挂钩。例如,请尝试将以下内容放入您的vimrc文件中:

autocmd VimEnter * cd %:p:h

那么,当你使用$ mvim path/to/my/project/some/file调用Vim时,Vim会自动进入file所在的目录:cd

如果要使其适用于目录,您将需要向自动命令添加一些逻辑,例如:

autocmd VimEnter * exe 'cd '.(isdirectory(expand('%:p')) ? '%:p' : '%:p:h')

这个你自己可以进行改进!


4

我在我的vimrc中使用这个:

" Use %% on the command line to expand to the path of the current file
cabbr <expr> %% expand('%:p:h')

3
如何最好地解决这个问题取决于您的确切用例。我比较喜欢使用:set autochdir,但如果您想将工作目录设置为项目根目录,则可以使用其中一个本地vimrc插件(我使用localrc.vim - 启用每个目录的配置文件),在每个项目根目录中创建一个本地.vimrc文件。
:cd expand('<sfile>:p:h')

在使用it技术时,将工作目录设置为项目根目录,无论您打开项目层次结构中的哪个文件,都将遵循此规则。


1
在vimrc中
au BufEnter * silent! lcd %:p:h


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接