为什么vim中当前的工作目录与vim启动时的目录不同

  • 本文关键字:vim 启动 工作 vim
  • 更新时间 :
  • 英文 :


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也会出现此问题
  • 最近升级了vimpython(通过brew upgrade(
  • 我最近没有更改我的.vimrc(除了添加一些评论(。它在git中受版本控制,所以我确认这些是唯一的更改
  • 我已经用vundle安装并更新了我的插件(:VundleInstall:VundleUpdate(
  • 我已经对我的.bashrc进行了一些更改,但我认为这些更改不会改变vim的行为
  • 操作系统:macOS Mojave 10.14.6
  • vim:8.2(2019年12月12日,编译于2020年8月20日22:44:15(由Homebrew编译

编辑:我最初认为这是由于执行:edit other-file,但现在我只编辑了一个文件,所以我更改了上面的内容,以删除不必要的方面。

原因:我在某个时候做了一个:lcd,在离开和进入缓冲区时,我的.vimrcautocmdmkviewloadview,所以再次编辑文件就是对另一个目录做:lcd

解决方案:

选项1 --将当前工作目录更改为正在编辑的文件的目录,并保存:

cd %:p:h
:wq

选项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

我使用以下代码段来保存折叠状态,而我使用auto-session来保存每个特定目录的neovim会话。

-- auto save fold view after exit a file
vim.api.nvim_create_autocmd({ "BufLeave", "BufWinLeave", "InsertLeave" }, {
group = augroup("remenber_folds"),
callback = function()
vim.cmd("silent! mkview")
end,
group = general,
desc = "save fold view",
})
-- auto load fold view after enter a file
vim.api.nvim_create_autocmd({ "BufRead", "BufWinEnter", "BufEnter", "FocusGained" }, {
-- vim.api.nvim_create_autocmd({"BufWinEnter"}, {
group = augroup("remenber_folds"),
callback = function()
vim.cmd("silent! loadview")
end,
group = general,
desc = "load fold view",
})

vim.cmd [[set viewoptions-=curdir]]添加到我的options.lua文件中完美地解决了这个问题,我可以在离开缓冲区或退出neovim后自动保存会话和折叠状态,并在进入缓冲区或在同一目录打开neovim时加载它们。

最新更新