2026/04/22(水)WindowsTerminalとVSCodeからMSYS2のzshでHomeキーやEndキーが効かなくなっていた問題を対応した

更新日:
投稿日:

起きていた問題

WindowsTerminalやVSCodeでMSYS2のzshを使用しているときにHome, Endを押しても.zshrcで定義したコマンドが発動しない状態で、WindowsTerminalではブザーマークが表示される状態だった。

msys2-x86_64-20210725では起きていなかったはずだが、msys2-x86_64-20260322では起きていた。

問題が起きていた時の.zshrc上の定義

# Home
bindkey "\e[H" beginning-of-line
# End
bindkey "\e[F" end-of-line

解決した方法

.zshrc上の定義を以下に変更した。

# Home
bindkey "^[[H" beginning-of-line
# End
bindkey "^[[F" end-of-line

変更差分

 # Home
-bindkey "\e[H" beginning-of-line
+bindkey "^[[H" beginning-of-line
 # End
-bindkey "\e[F" end-of-line
+bindkey "^[[F" end-of-line

あとがき

ググっても当該現象が引っかからず(最近のGoogleはアホである)、Claude Opus 4.6に調べさせても見当違いの結果しか返ってこなかったが、GitHubのIssueを漁ったところ、Shift+Arrow keys insert characters in WSL/Bash; Windows Terminal rewrites explicit selection keybindings to "id": null #18921というものがあり、そのIssueに貼ってあった設定コメントに、動きそうなコードがあったため、試してみたら動いたというのが解決の道筋である。

# Home/End (both CSI and SS3)
bindkey -M emacs '^[[H'  _home_nosel
bindkey -M emacs '^[OH'  _home_nosel
bindkey -M emacs '^[[F'  _end_nosel
bindkey -M emacs '^[OF'  _end_nosel

これで動くなら -M emacs を抜いて、_home_noselのアサインを変えればいいだけの話である。^[OH'^[OF'はLinux用[1]なのでMSYS2では考慮しなくてよいから、結果として前述にある「解決した方法」の内容でよくなるという寸法だ。

参考までにFreeBSDと同じコードになっているため、FreeBSDと設定を共有できる。なお、少なくともUbuntuとは異なるため、Linuxとは共有できないと思う。知らんけど。


  1. 私はMSYS2, FreeBSD, Linux用の.zshrcを作っているため、これを判断できたという話