Windows10からSSH接続で<C-Space>入力を送る
この記事を書くキッカケ
Windows10からSSHしたサーバのneovimで<C-Space>(Ctrl-Space)で補完候補を表示するよう設定していたが、Windows10からのみ<C-Space>が届かない事が起きていました。
色々調べてるうちに少しわかってきたので書いてみました
さっそく解決法
MSYS2の/usr/bin/ssh
を使う!
ですがMSYS2をインストールしないといけないのが難点です...
なぜ挙動が違うのか
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