如何在运行时在 windows gVim 中保留当前工作目录!命令或 system() 函数



我以前在linux中使用过vim,执行":!external-command"或调用"system(("函数很好,当前工作目录会传递给触发的外部命令。

但是现在我必须在 windows(10( 系统中工作, ":!" 命令将执行类似 "cmd.exe/c ..." 的东西, 而当前目录始终是 "C:\WINDOWS\system32\"。viml 脚本中的"system(("函数也会发生同样的事情,因此,我的一些插件无法正常工作。

例如,在 gVim 中执行 ":!dir" 将只列出 "C:\WINDOWS\system32\" 中的文件,而不是 gVim 的当前工作目录。什么设置会让它的行为像在 linux vim 中执行":!ls"来列出当前目录的文件?

这不是正常行为;Windows shell(cmd.exe(应该维护当前的工作目录,事实上,许多插件在执行外部命令时都假设这种情况。

正如您提到的,如果您向cmd.exe提供/d标志,问题就会消失,必须有一些autorun命令导致目录更改:

/D 禁止从注册表执行自动运行命令

[...]

如果未在命令行上指定/D,则当 CMD.EXE 启动时,它会 查找以下REG_SZ/REG_EXPAND_SZ注册表变量,如果 其中一个或两个都存在,它们首先执行。

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorAutoRun
and/or
HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorAutoRun

因此,我建议检查这些注册表项并删除任何有问题的命令。将/D添加到 Vim 的'shellcmdflag'将是一种替代解决方法。

最新更新