皆さんこんにちは、かみけん(@kamykn)です。
(最近、アカウント名をkmszkからkamyknに変えました。)
この記事で紹介すること
bashやzshなら実はscreenやtmuxを使わなくてもVimやMySQL CLIなどを一つのウインドウで複数起動できるので、作業が少し楽になるかもという内容です!
これ教えると結構ヘェ〜ってなってる人(年上のプログラマにも意外と…)が多かったので記事にして見ました。
jobとforegroundとbackground
VimやMySQLなどの開いている状態(実行している状態)のjobはCtrl-zでbackgroundに回すことができます。
backgroundにjobは複数保持することができ、fg
(foreground)コマンドによって任意のタイミングで呼び出すことができます。
fgとjobs
今回登場するコマンドはfg
とjobs
になります。(あと、バックグラウンドに回す際のCtrl-zも使います。)
VimやMySQLなどの開いている状態(実行している状態)のjobをCtrl-zでbackgroundに回し、そして必要になったときにfgコマンド(foreground)で呼び出しています。
↓↓ jobのサイクルのイメージ
[foreground] ─── 入力:Ctrl-z ───> [background]
^ │
└──────────── 入力:fg ────────────┘
実演
おもむろにVimを立ち上げたあとにCtrl-zを押してみましょう。
Vimが消えました。
Vimはどこに行ったのでしょう。消えたVimを探すべく、今度は jobs
と打ち込んでみます。
❯ jobs
[1] + suspended vim ~/.vimrc
いました。なにやらVimがsuspended状態であることがわかったので、次に fg
と打ち込んでみます。(または単に %1
でもいいでしょう。)
無事に先程のvimを開くことができました。
単にfgとすると最後に起動状態にあったjobsに戻ることが出来ます。
次に複数のjobを立ち上げてみます。
またCtrl-zでもどって、今度はmysql
コマンドを叩いてみます。
再度Ctrl-zでログイン中のmysqlをsuspendし、jobs
コマンドでmysqlが増えていることが確認できました。
❯ jobs
[1] - suspended vim ~/.vimrc
[2] + suspended mysql -u root -p
今度はMySQLとVimを交互に開いてみます。%1
、Ctrl-z、%2
、Ctrl-z、%1
、Ctrl-z …
または%1
の代わりにbashならfg 1
でもOKです。(Zshだと fg %1
になります…)
自分の使い方
自分はそんなにたくさんサーバーにSSHする人ではないですが、1環境(サーバー)に対して1ウインドウ(tmuxなどのタブなど)開いておけばバックグラウンドで複数jobを立ち上げることで満足な感じになりました。
あと、バックグラウンドを使い始めると、気がついたら実はVimが複数立ち上がってたみたいなことが増えてくるので、最近はプロンプトにjob数を表示したりしてます。
一番右の1がjob数になっていて1つjobが立ち上がっていることがわかります。
設定はこんな感じです。
local prompt_location="%F{081}%B%~%b%f"local promot_mark="%B%F{208}%(!,#,$) %f%b"local status_code="%(?,,%F{208} / %f%B%F{red}%?%f%b)"local number_of_jobs="%(1j.%F{208} / %f%F{226}%B%j%b%f.)"PROMPT="
${prompt_location}%B"'$vcs_info_msg_0_'"%b${number_of_jobs}${status_code}${promot_mark}"
1行空行作ってプロンプトが入り、更に改行して常にコマンドが左から始まるようにしています。
(終了ステータスもnon-zeroのときに赤字ででます。vcs_infoは他の方の記事をご参考いただけると…!)
Vim乱立はこれでなんとか防げそうです…。
これで、tmuxやscreenを使うことができないような極限状態でも生き抜くことができるかもしれませんね…!
以上で共有は終わりです。
みなさんのCLIライフが捗りますように!!