如何使Vim打开.git\COMMIT_EDITMSG而不是.git\.git\COMMIT_EDITMSG?

3
由于某些原因,vim每次都试图从错误的路径打开文件COMMIT_EDITMSG。我一直在使用git-gui来进行多行提交消息,因为我懒得解决这个问题,但现在我已经厌倦了为了提交而不得不打开资源管理器。以下是一个屏幕截图,显示了当我尝试编辑先前的提交消息时会发生什么情况: enter image description here 当我尝试写入文件时(请注意错误的路径): enter image description here 如果将编辑器更改为notepad,则突然可以正常工作: enter image description here 编辑: 通过干净安装和一些试错,我已经缩小了问题可能原因的范围,以下是两个设置:
set autochdir
set encoding=utf-8

只需在您的.vimrc中加入这两行代码就能重现此错误(至少在我的情况下是如此)。奇怪的是,注释其中一条语句会导致错误消失。

另一种重现此错误的方法是通过以下命令:

使用此命令应该会得到".git\COMMIT_EDITMSG" [New DIRECTORY]

vim -N -u NONE --cmd "set autochdir | set encoding=utf-8" .git\COMMIT_EDITMSG

奇怪的是,它应该使用以下任何一种方式打开文件:
vim -N -u NONE --cmd "set autochdir"        .git\COMMIT_EDITMSG
vim -N -u NONE --cmd "set encoding=utf-8"   .git\COMMIT_EDITMSG
2个回答

0
尽管确实有一些东西与:set autochdir不兼容,但该设置并不那么恶意,无法在Vim中打开任何相对路径。我已经使用这个设置多年了,没有问题。你的配置中一定还有其他的东西(:autocmd?),与'autochdir'一起破坏了这个设置,因为以下内容是有效的:
vim -N -u NONE --cmd "set autochdir" .git/COMMIT_EDITMSG

故障排除提示:通常情况下,使用二分搜索的方法,首先禁用一半的插件,然后检查问题是否仍然存在,如果问题仍然存在,则再禁用那一半中的一半插件;如果问题消失了,则再启用另一半插件。同样的方法也可以用在您的~/.vimrc配置文件中(通过注释掉代码块)。

-1

(正如评论中指出的那样,这个答案并不完全准确)

事实证明,问题出在我.vimrc文件中这个看似无害的设置上:

set autochdir

当您尝试使用相对路径打开文件时,Vim会从路径中提取文件的父文件夹并切换到该文件夹。当您尝试修改先前的提交消息时,Git运行此命令(或类似命令):

vim.exe .git\COMMIT_EDITMSG

但就在打开文件之前,Vim 切换到文件夹 .git 并将文件的完整路径解析为类似于 C:\mine\.lua\.git\.git\COMMIT_EDITMSG 的东西,导致错误消息显示错误的路径。

这种异常情况(?)发生在所有相对路径上,而不仅仅是那些带有点('.')的路径。

enter image description here

enter image description here

不确定这是否算作 Vim 的 bug...


根据:h autochdir,该设置是为了向后兼容而提供的,如果打开它可能会破坏插件。在这种情况下,它甚至会破坏试图使用vim的外部程序。 - FDinoff
这个问题似乎相对容易解决。当检测到相对路径时,只需要防止目录更改即可。我只是说说而已,我对Vim开发一无所知。问题可能比看起来更加复杂。 - Plakhoy
这不是准确的,autochdir 的功能并不是那样。我猜测你使用的插件没有考虑到 autochdir,所以禁用它只是一种解决方法。 - Michael Foukarakis
我已更新了问题。你现在能够再现它吗? - Plakhoy

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