Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@mollifier

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

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 not register and get more from Qiita?
  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
15
Help us understand the problem. What are the problem?