2022-01-30

Zsh: Ctrl key combinations don't work

訳あって Zsh を使うことになり、手持ちの Bash 資産を Zsh に対応させていた時のこと。screen / tmux で訳の分からない挙動にハマった。

screen や tmux で Zsh を使うと、何故か Ctrl + p とか Ctrl + n とか、Ctrl キーを絡めた入力が使えなくなる。Ctrl + p と打っても、「^P」とか出る。ググってもみんなは普通に使えてるっぽいし、探し方が悪かったのかこれといった情報も見つからず、解決に 5 週間かかった。:-/

.zshrc に「bindkey -e」を入れるだけ。orz

しかし何故 screen / tmux だけで発生するのか。普通にターミナルで Zsh を使う分には何も問題ない。

% man zshzle

       <...snip...>

       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 `vi‐
       ins', otherwise it will be `emacs'.  bindkey's -e and -v  options  pro‐
       vide a convenient way to override this default choice.

環境変数 VISUAL / EDITOR に「vi」という文字列があると、Zsh が気を利かせて viins モードにしてくれるらしい。・・・いやいやいや、Vim 使いでもシェルは普通 emacs モードだと思うけど? ともかく、確かに私は(Emacs 使いだけど) EDITOR=vim としている。これで一応は先の疑問に説明はつく。

  1. Zsh 起動時、EDITOR は未設定なので emacs モードになる。
  2. 起動した Zsh が .zshrc を読み込み、EDITOR=vim になる。
  3. この状態で Zsh の子プロセスが起動すると、EDITOR=vim なので viins モードになる。

説明はつくが、これが適切な仕様だとはとても思えない。これだと EDITOR の値に関係なくログインシェルは常に emacs モードになる。だからこそ、他の人は困ってないっていうね。screen / tmux 使いの内、更にその一部の人だけが困ることになる。これが本当に意図通りの仕様だとしたら、こんな分かりにくい仕様はさっさと捨てた方がいいよ。

しばらく Zsh を使ってみて、Zsh は使い勝手を重視した結果として、驚き最小の法則に反することがあるような気がする。別に Zsh に拘りや思い入れがある訳でもなし、これ以上何かあったら Bash に戻すかも知れない。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。