【问题标题】:How to change current path in Vim automatically?如何自动更改 Vim 中的当前路径?
【发布时间】:2012-12-13 16:39:30
【问题描述】:

当我在终端输入类似的东西时

mvim ./path/to/my/project

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

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

我的当前路径是我的用户主目录

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

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

是否有可能在 vim 启动后以某种方式自动更改目录?

【问题讨论】:

  • 我认为不是,autochdir 不能解决我的问题。我想将 dir 更改为我的项目的根目录,仅此而已。
  • :pwd 应该是你调用 Vim 的目录。或者 ~ 如果你只是启动 GVim/MacVim。
  • 我使用 vimprj 插件,我不得不禁用离开返回 vimprj 根目录的“功能”,因为我不喜欢它 (g:vimprj_changeCurDirIfVimprjFound = 0)。您可能会喜欢这种默认行为。

标签: vim macvim


【解决方案1】:

我在我的 vimrc 中使用它:

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

【讨论】:

    【解决方案2】:

    对于您的特定用例,您可以尝试在 VimEnter 事件上连接一些东西。例如,试着把它放在你的 vimrc 中:

    autocmd VimEnter * cd %:p:h
    

    然后,当你用$ mvim path/to/my/project/some/file 调用Vim 时,Vim 会自动将:cd 放到file 所在的目录中。

    为此,您必须在自动命令中添加一些逻辑,例如

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

    你可以自己改进!

    【讨论】:

      【解决方案3】:

      如何最好地解决这个问题取决于您的具体用例。我偏爱:set autochdir,但是如果您希望将工作目录设置为项目根目录,我会使用 local vimrc 插件之一(我使用localrc.vim - Enable configuration file of each directory),创建一个本地.vimrc 在每个项目根目录中使用

      :cd expand('<sfile>:p:h')
      

      在里面。然后,无论您打开项目层次结构中的哪个文件,工作目录都将始终设置为项目根目录。

      【讨论】:

        【解决方案4】:

        in_vimrc

        au BufEnter * silent! lcd %:p:h
        

        【讨论】:

          【解决方案5】:

          【讨论】:

            猜你喜欢
            • 2012-05-16
            • 2017-06-27
            • 1970-01-01
            • 2012-09-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-30
            相关资源
            最近更新 更多