TL;DR
Z-shellのAUTO_RESUME機能をfish-shellで実現するプラグインを作ったので、その宣伝記事です。
Z-shellのAUTO_RESUME機能について
私は以前Z-shellとNeovimを使って開発をしていました。
Neovimをターミナル上で起動して、コマンドを実行したいときはCtrl-Zを押してコマンドプロンプトに戻って、またNeovimに戻ってコーディングするみたいなことをやっていましたが、その際にZ-shellのAUTO_RESUME機能というのが便利です。
AUTO_RESUME機能というのはZ-shellのドキュメントに以下のように書かれていますが、簡単に言うと、コマンドを入力した際にすでに同じジョブが存在している場合、新しく実行する代わりに既存のジョブを再開する、というものです(Z-shellの設定ファイルにsetopt auto_resume
と書くことによって有効化できます)。
Treat single word simple commands without redirection as candidates for resumption of an existing job.
このAUTO_RESUME機能がない場合、Ctrl-ZでNeovimをバックグラウンドジョブにしたあと、fg
コマンドで再開することになりますが、新規実行するか再開するかなんて一々意識していないので、間違えてfg
コマンドを打ってしまったりNeovimのジョブを2つ起動してしまったりすることがあって不便です。
そのようなことを意識せずに、同じコマンドで既存のジョブを使い回すことができるようになるのがAUTO_RESUME機能です。これが結構便利なので、自分はNeovimのターミナルやTmuxでの複数ペインなどをあまり使わなくなりました。
fish-shellでAUTO_RESUME機能を実現する
ある時fish-shellに興味が湧いて移行してみることにして、概ね機能としては満足したのですが、このAUTO_RESUME機能だけ代替となるようなものが見つからなかったので、自分で作ることにしました。
インストールする以外ユーザが意識することは一切ないので、もし興味がある方は試してみていただけると幸いです。
NeovimのターミナルやTmux等との違いについて
NeovimのターミナルやTmux等を使えばこんなことをしなくても良いと思う方も結構いるんじゃないかと思います。
ただ、個人的にはNeovimのターミナルはコマンドの実行速度が遅い時があったり、Neovimを閉じたらプロセスが消えてしまうなどの制約もあってちょっと使いづらいイメージを持っています。また、両方とも若干タイピング数が多くなるので、今はCtrl-Z + AUTO_RESUME機能をよく使っています。