Help us understand the problem. What is going on with this article?

zsh で コマンドライン中に改行する

More than 5 years have passed since last update.

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 に書いておけば便利。

.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 の方がよりふさわしいので修正しました。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away