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

qyzbxkaa  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(153)

Vim显示的当前工作目录与我从命令行启动vim时使用的目录不同。如果我在没有.vimrcvim -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莫哈韦10.14.6
  • Vim:8.2(2019 Dec 12,编译于Aug 20 2020 22:44:15)编译自Homebrew
    **编辑:**我最初认为这是由于做:edit other-file,但现在我看到它只是编辑一个文件,所以我改变了上述删除不必要的方面。
7eumitmz

7eumitmz1#

原因:我在某个时候做了一个:lcd,我的.vimrc在离开和进入缓冲区时有autocmd s到mkviewloadview,所以再次编辑文件是对另一个目录做: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

iih3973s

iih3973s2#

我使用下面的代码片段来保存文件夹状态,同时使用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时加载它们。

相关问题