背景など
例えばRubyスクリプトを開発するとき、自分はvimで編集してC-z
でサスペンドし、シェルからruby hoge.rb
のように実行している。
$ vim hoge.rb
(C-zでvimをサスペンド)
$ ruby hoge.rb
(実行)
$ fg
(vimに戻る)
ここでvimから再度C-z
してC-p
をすると、fg
がコマンドラインに出てきてしまう。ruby hoge.rb
が出てきてほしい。
あるいは、もっと快適にこのサイクルを回す方法はないだろうか?
Tips(bashの場合)
HISTIGNORE="fg:bg"
で自分の希望通りの動作になる。
Tips(zshの場合)
下記記事の方法で、fg
がコマンドラインに出ないようにできる。
zshでC-pしたときfgが履歴に出ないようにする - Qiita
代替案:GNU screenを使う
edit-compile-runサイクルの代替案として、screen(またはtmux)で別ウィンドウを開いておいて、ruby hoge.rb
は必ずそちらのウィンドウで実行するようにする方法がある。
この場合、zshのaccept-and-hold
(デフォルトではM-a
にバインド)を使うと少し楽ができる。つまり
$ ruby hoge.rb(ここでM-aを押す)
(するとコマンドラインが実行されて、さらにもう一度同じコマンドラインが現れた状態になる)
$ ruby hoge.rb(ここにカーソルが出る)
これによってM-a
を押すだけで何度も同じコマンドを繰り返し実行できる。
bashではC-o
(operate-and-get-next
)を使うと同じことが出来る。ただしこの仕様は「現在の行を実行し、 履歴内の現在の行の次の行を編集用に取得します」なので、厳密には同じではない。
しかしこの方法、どうも自分の作業スタイルとして定着しづらい。
常にエディタのウィンドウの隣にコマンド実行用のウィンドウがある状態をキープしなければいけないし、screenが入っていないマシンで作業することもあるだろうし…
代替案:vimの中からコマンド実行する
- quickrun
- vimの中で端末を開く
:!ruby %
- そして
:!!
- そして
'errorformat'
と'makeprg'
を設定しておいて:mak
- ちなみに、Vimにはこれらを設定する
:compiler
というコマンドもある。使っている人はほとんどいないと思うが…
- ちなみに、Vimにはこれらを設定する
など、色々な方法があると思う。
自分もquickrunと同じような自作スクリプトを使っているが、どうしてもC-z fg
のスタイルを払拭するには至らない。
- シェルの上で直接実行する安心感
- 後から出力を見返しやすい
といった理由があるのだと思う。
C-zでfgできるようにする(zsh)
次のように書いておくと、zsh上でC-z
を押すだけでfg
できるようになる。
bindkey -s "^Z" "^Ufg^M"
タイプ量がfg<Enter>
の3キーから2キーに減るので少し楽になるが、この設定がされていない端末で作業するとき戸惑うデメリットの方が勝ると思うので、実際に導入はしていない。
ご意見募集
ということで、他にedit-compile-runサイクルを快適にするTipsがありましたらご意見を頂きたいです。