Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

端末上でedit-compile-runサイクルを快適にする方法

$
0
0

背景など

例えば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-ooperate-and-get-next)を使うと同じことが出来る。ただしこの仕様は「現在の行を実行し、 履歴内の現在の行の次の行を編集用に取得します」なので、厳密には同じではない。

しかしこの方法、どうも自分の作業スタイルとして定着しづらい。
常にエディタのウィンドウの隣にコマンド実行用のウィンドウがある状態をキープしなければいけないし、screenが入っていないマシンで作業することもあるだろうし…

代替案:vimの中からコマンド実行する

  • quickrun
  • vimの中で端末を開く
  • :!ruby %
    • そして:!!
  • 'errorformat''makeprg'を設定しておいて:mak
    • ちなみに、Vimにはこれらを設定する:compilerというコマンドもある。使っている人はほとんどいないと思うが…

など、色々な方法があると思う。
自分も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がありましたらご意見を頂きたいです。


Viewing all articles
Browse latest Browse all 5608

Trending Articles