首页 > 解决方案 > 在 Vim 中,当我切换到终端窗格时,如何防止 chdir 到缓冲区目录运行?

问题描述

在我的.vimrc,我有:

autocmd BufEnter * :lchdir %:p:h

它将当前目录更改为该窗口中正在编辑的文件的目录。

但是,启用该terminal功能后,我收到以下消息:

Error detected while processing BufEnter Autocommands for "*":
E344: Can't find directory "C:\Users\sinan\!C:\WINDOWS\system32" in cdpath
E472: Command failed

然后必须按回车键将其关闭。这使得在文档窗口和终端之间来回切换很烦人。

这是一个屏幕截图:

在 Vim 中,切换到终端会导致 chdir 错误

我明白为什么我会收到错误。我试图弄清楚我需要如何更改autocmd上面的行,以便它不会在终端窗格中运行。也就是说*,我需要指定not a terminal而不是。

我怎么做?

标签: vimterminalchdir

解决方案


您可以检查'buftype'它是否是终端缓冲区。

augroup AutoChdir
  autocmd!
  autocmd BufEnter * if &buftype !=# 'terminal' | lchdir %:p:h | endif
augroup END

注意:我没有对此进行测试。按原样使用。

查看:h 'buftype'更多信息


推荐阅读