Vim 无法检测到 Windows 10 上的 openssh 安装

Vim 无法检测到 Windows 10 上的 openssh 安装

Vim/Gvim 无法检测到我在 Windows10 中安装的 OpenSSH。如何让 vim 检测已安装的 ssh?我想使用 vim 通过 sftp 编辑文件,但目前无法做到这一点。我可以从命令提示符中使用 ssh,没有任何问题。

从命令提示符运行以下命令显示 ssh 已安装并位于路径中

C:\Windows\System32>where ssh
C:\Windows\System32\OpenSSH\ssh.exe

C:\Windows\System32>where sftp
C:\Windows\System32\OpenSSH\sftp.exe

echo %PATH%
C:\Windows\system32;C:\Windows;[snip];C:\Windows\System32\OpenSSH\;[snip]

但是如果我从 vim (或 gvim)提交以下内容

:!where ssh

我明白了

C:\Windows\system32\cmd.exe /c (where ssh)
INFO: Could not find files for the given pattern(s).
shell returned 1
Hit any key to close this window...

但是从 vim 运行以下命令显示 vim 可以正确看到 PATH

:!set

另外,使用 netrw 浏览 C:\Windows\System32\ 时显示 OpenSSH 没有列在那里的目录之一。

以管理员身份运行 gvim 没有任何区别。

答案1

Vim 通常以 32 位应用程序形式发布,这意味着它在WoW64 模拟器,其中C:\Windows\System32被映射到C:\Windows\SysWOW64,而原来的 System32 文件夹则变为C:\Windows\Sysnative。由于微软目前仅将 OpenSSH 安装到 64 位 System32 文件夹中,它默认对 32 位应用程序不可见。

有几种不同的解决方法:

  1. 添加C:\Windows\Sysnative\OpenSSH到您的 PATH,以便在运行 32 位程序时可以访问它;
  2. 安装 64 位版本的 Vim,完全绕过 WoW64 重定向机制;或者
  3. 创建目录符号链接,以便可以在 WoW64 下访问 OpenSSH 文件夹。

选项 1:安装 64 位 Vim

vim.org 下载页面说:

如果你想要一个签名版本,你可以从 vim-win32-安装程序 它支持许多接口,例如Perl,Tcl,Lua,Python和Ruby。还有 64 位版本它只能在 64 位 MS-Windows 上运行,占用更多内存,但与 64 位插件兼容。您还可以从那里获得包含最新改进的夜间版本,但可能会出现问题。

您可以从以下位置获取 64 位 Vim 版本:https://github.com/vim/vim-win32-installer/releases

选项 2:将 C:\Windows\Sysnative\OpenSSH 添加到您的 PATH

如何在 Windows 10 中将文件夹添加到“Path”环境变量(附截图)在 StackOverflow 上。

选项 3:在 SysWOW64 文件夹下创建目录符号链接

这需要管理员权限。这是最全面的解决方案,但如果微软决定修复此问题,可能会导致未来的软件更新出现问题漏洞在他们的 OpenSSH 包中。

  1. 打开管理命令提示符。PowerShell ( Win+X, A) 或命令都可以。
  2. 运行以下命令:
cmd /c mklink /D %SystemRoot%\SysWOW64\OpenSSH ..\System32\OpenSSH

删除符号链接

要删除刚刚创建的符号链接,可以运行以下命令:

cmd /c rmdir %SystemRoot%\SysWOW64\OpenSSH

这里最重要的是使用一个命令来删除仅有的符号链接本身。目录符号链接在 Windows 上并不常用,许多程序会尝试通过删除目标文件夹的全部内容来删除它。

相关内容