为什么 vim 中的当前工作目录与 vim 的启动目录不同?
Why is current working directory in vim different from where vim was started?
vim 显示的当前工作目录与我从命令行启动 vim 的目录不同。如果我 运行 没有我的 .vimrc
(vim -u NONE
),问题就会消失。我该如何调试才能弄清楚为什么会这样?
$ pwd
/Users/rbednark/Dropbox/git/quizme_personal_files/bin
$ vim --noplugin
:pwd
/Users/rbednark/Dropbox/git/quizme_personal_files/bin
:edit settings.sh
:pwd
/Users/rbednark/quizme-read-only-prod
(expected:
/Users/rbednark/Dropbox/git/quizme_personal_files/bin
actual:
/Users/rbednark/quizme-read-only-prod
)
如果我不使用 .vimrc
:
,问题就会消失
$ vim -u NONE
备注:
:set autochdir?
输出 noautochdir
:verbose set autochdir?
输出 noautochdir
:!pwd
和:pwd
都输出同一个目录
vim --noplugin
也会出现这个问题
- 我 最近升级了
vim
和 python
(通过 brew upgrade
)。
- 我最近没有改变我的
.vimrc
(除了添加一些评论)。它在 git 中受版本控制,所以我确认这些是唯一的更改。
- 我已经安装并使用 vundle 更新了我的插件(
:VundleInstall
和 :VundleUpdate
)。
- 我已经对我的
.bashrc
做了一些改变,但我认为没有什么会改变vim行为。
- OS: macOS 莫哈韦沙漠 10.14.6
- vim:8.2(2019 年 12 月 12 日,2020 年 8 月 20 日编译 22:44:15)由 Homebrew 编译
编辑: 我最初认为这是由于 :edit other-file
造成的,但现在我只编辑了一个文件就看到了,所以我更改了上面的内容以删除那个不必要的方面。
原因:我在某个时候做了 :lcd
,我的 .vimrc
有 autocmd
到 mkview
和 loadview
在离开和进入缓冲区时,因此再次编辑文件是对另一个目录执行 :lcd
。
解法:
option 1 -- 将当前工作目录更改为正在编辑文件的目录,并保存:
cd %:p:h
:wq
option 2 -- 删除相应的视图文件,例如
$ rm ~/.vim/view/*myfile*
我是如何解决/调试的:
我将 .vimrc
文件一分为二以确定违规行,
这是:
autocmd BufWinEnter * silent! loadview
这表明这是由于正在加载视图。然后我在 ~/.vim/view
中查看了相应的 view
文件并搜索了目录名称,这产生了这一行:
lcd ~/quizme-read-only-prod
另请参阅:https://vi.stackexchange.com/questions/11903/working-directory-different-than-current-file-directory
vim 显示的当前工作目录与我从命令行启动 vim 的目录不同。如果我 运行 没有我的 .vimrc
(vim -u NONE
),问题就会消失。我该如何调试才能弄清楚为什么会这样?
$ pwd
/Users/rbednark/Dropbox/git/quizme_personal_files/bin
$ vim --noplugin
:pwd
/Users/rbednark/Dropbox/git/quizme_personal_files/bin
:edit settings.sh
:pwd
/Users/rbednark/quizme-read-only-prod
(expected:
/Users/rbednark/Dropbox/git/quizme_personal_files/bin
actual:
/Users/rbednark/quizme-read-only-prod
)
如果我不使用 .vimrc
:
$ vim -u NONE
备注:
:set autochdir?
输出noautochdir
:verbose set autochdir?
输出noautochdir
:!pwd
和:pwd
都输出同一个目录vim --noplugin
也会出现这个问题
- 我 最近升级了
vim
和python
(通过brew upgrade
)。 - 我最近没有改变我的
.vimrc
(除了添加一些评论)。它在 git 中受版本控制,所以我确认这些是唯一的更改。 - 我已经安装并使用 vundle 更新了我的插件(
:VundleInstall
和:VundleUpdate
)。 - 我已经对我的
.bashrc
做了一些改变,但我认为没有什么会改变vim行为。 - OS: macOS 莫哈韦沙漠 10.14.6
- vim:8.2(2019 年 12 月 12 日,2020 年 8 月 20 日编译 22:44:15)由 Homebrew 编译
编辑: 我最初认为这是由于 :edit other-file
造成的,但现在我只编辑了一个文件就看到了,所以我更改了上面的内容以删除那个不必要的方面。
原因:我在某个时候做了 :lcd
,我的 .vimrc
有 autocmd
到 mkview
和 loadview
在离开和进入缓冲区时,因此再次编辑文件是对另一个目录执行 :lcd
。
解法:
option 1 -- 将当前工作目录更改为正在编辑文件的目录,并保存:
cd %:p:h
:wq
option 2 -- 删除相应的视图文件,例如
$ rm ~/.vim/view/*myfile*
我是如何解决/调试的:
我将 .vimrc
文件一分为二以确定违规行,
这是:
autocmd BufWinEnter * silent! loadview
这表明这是由于正在加载视图。然后我在 ~/.vim/view
中查看了相应的 view
文件并搜索了目录名称,这产生了这一行:
lcd ~/quizme-read-only-prod
另请参阅:https://vi.stackexchange.com/questions/11903/working-directory-different-than-current-file-directory