社内でVSCodeのターミナルで ^A^A^A
みたいになって困るみたいな話があって気になったので調べてみた。
In addition to these names, either ‘emacs’ or ‘viins’ is also linked to the name ‘main’. If one of the VISUAL or EDITOR environment variables contain the string ‘vi’ when the shell starts up then it will be ‘viins’, otherwise it will be ‘emacs’. bindkey’s -e and -v options provide a convenient way to override this default choice.
知らなかったけど zle
は EDITOR
環境変数を読んで良い感じにキーバインディングを判定してくれるらしい。
つまり EDITOR=vim
だけ書いておいて、 bindkey -e
を書いてないと、ログインシェル以外を起動したときに Emacs キーバンドが使えなくて ^A^H^H
みたいな文字列を眺めることになる。
エディターだと Vim キーバインドなのにそれ以外は Emacs キーバインドなのが悪いんだけれど、そういう人は多そう。
具体的にはログインシェルから別プロセスで zsh
を起動すると急にバインディングが変わって困る。
他にもVSCodeのターミナルで困る。VSCodeは環境変数(起動方法によってどこから引き継ぐかは変わる)を引き継いでくれるので EDITOR
を設定していると bindkey -v
相当で zle
が起動してしまう。
これをやっているときに一瞬ハマってしまったが深追いしなかったので今回調べてみてやっとすっきりした。