16
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

zshAdvent Calendar 2013

Day 6

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

Last updated at Posted at 2013-12-06

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

16
13
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?