有馬総一郎のブログ

(彼氏の事情)

2022年03月14日 00:37:01 JST - 1 minute read - Linux

Alter Linuxの端末(ターミナル)でCtrl+a(先頭移動), Ctrl+e(文末移動)が効かくなった

タイトルの通り。端末(ターミナル)でCtrl+aや、Ctrl+eなど押しても先頭・文末に移動できない…^A^Eと出力されるだけ。

どうしてか?と思ってググると [SOLVED] CTRL + [key] at Terminal Not Working / Newbie Corner / Arch Linux Forumsに辿りついた。

Ctrl-a and Ctrl-e are readline bindings (in Emacs mode); Zsh uses zle.

See: https://wiki.archlinux.org/index.php/Zsh#Key_bindings

Zsh - ArchWiki

ZLE has an Emacs mode and a vi mode. If one of the VISUAL or EDITOR environment variables contain the string vi then vi mode will be used; otherwise, it will default to Emacs mode. Set the mode explicitly with bindkey -e or bindkey -v respectively for Emacs mode or vi mode.

zshをデフォルトシェルにしているとき、環境変数VISUALまたはEDITORviの文字を含んでいると viモード になってしまうのか…

余計なお世話と思ってしまうが、Vimmerであれば viモード で端末も操作したいのは当然だろう。

ターミナルでのキーバインド設定を確認すると

$ bindkey
"^A"-"^C" self-insert
"^D" list-choices
"^E"-"^F" self-insert

となっている。bindkey -eとすることで

$ bindkey
"^A" beginning-of-line
"^B" backward-char
"^D" delete-char-or-list
"^E" end-of-line

と端末でのキーバインドが元に戻った( emcasモード となった)。

~/.zshrc

bindkey -e

と追記することで解決したが、もっとスマートな方法ないだろうか?まあ、いいや。