zsh を使っていて、コマンドラインで for とか if とかを使いたくなることがたまにある。こんな感じ。
% for i in *; do
echo $i
done
こういうのは改行して書きたい。
実際に改行してみると、
% for i in *; then # ここで改行
一応次の行の続きが書ける。
% for i in *; then
for>
でも実はこれ、for i in *; then
の部分はもう入力が確定した状態で、1行目に戻って修正とかできなくて便利じゃない。^P
とか上矢印とか押しても1行目に移動できない。
そういうときはこれを ~/.zshrc に書いておけば便利。
bindkey '^J' self-insert
改行したくなったら Ctrl+J
を押せば OK。
% for i in *; then # ここで Ctrl+J
そのまま改行できる。
% for i in *; then
echo ... # 改行できる!
コマンドライン中に改行文字をそのまま埋め込んでいるような感じになるので、^P
か上矢印で1行目に戻って修正もできるようになる。ちなみに、'^J'
というキーバインドを J 以外に変えるとうまく動かないので注意。
実はこの機能は bindkey で設定していない時でも使えて、 ESC-^J
ESC-^M
を押せば OK。でもちょっと押しにくいので、このキーバインドを設定しておいたほうがいいと思う。
2013/12/07 12:00 追記
コメントで self-insert-unmeta
ではなく self-insert
で良いのではという指摘をもらいました。たしかにその通りです。self-insert-unmeta
でも動作するのですが self-insert
の方がよりふさわしいので修正しました。