🖥️

Windows10からSSH接続で<C-Space>入力を送る

2021/11/08に公開

この記事を書くキッカケ

Windows10からSSHしたサーバのneovimで<C-Space>(Ctrl-Space)で補完候補を表示するよう設定していたが、Windows10からのみ<C-Space>が届かない事が起きていました。
色々調べてるうちに少しわかってきたので書いてみました

さっそく解決法

MSYS2の/usr/bin/sshを使う!
ですがMSYS2をインストールしないといけないのが難点です...

https://twitter.com/CppPythonKuin/status/1449923891955056646?s=20

なぜ挙動が違うのか

Windows10付属のsshとchocolateyでインストールできるsshのバージョンを見てみたら

C:\WindowsSystem32\OpenSSH\ssh.exe
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2

C:\Program Files\OpenSSH-Win64\ssh.exe
OpenSSH_for_Windows_8.0p1, LibreSSL 2.6.5

C:\msys64\usr\bin>.\ssh.exe
OpenSSH_8.7p1, OpenSSL 1.1.1l 24 Aug 2021

どうもバージョン名にWindows8_.xxが付いていると<C-Space>が接続先に届かないようです
はっきりとはわかってませんがMicrosoftが何らかの改良を加えているのでは?と個人的に推測しています。

更に深堀り

OpenSSH_8.7p1, OpenSSL 1.1.1l 24 Aug 2021を使って更に調べてみました
この時Terminal上で<C-v>(Ctrl+v)を入力してから<C-Space>と入力して挙動を確認してます。

サーバ上のTerminalでは<C-Space>は^@と認識されていてVimのキーバインドでは<Nul>と認識されました。
neovimではばっちり<C-Space>と認識されてます
ちなみにcmd.exeやpowershellでも認識されました

Windows10上でも試してみる

Windows TerminalやGit Bash上で起動したneovimでは<C-Space>が認識されませんでしたが
同じWindows上のvimでは<Nul>と認識されました

Windows10版neovimに付属されているnvim-qt.exeではなんと<C-Space>が認識されました!
もしかしたらWindowsのTTYあたりで引っかかってるのではないかと思ってます。

Discussion