morisolog

ソフトウェア関連の技術書まとめ:新卒3年目エンジニア

zsh: suspended が出た時の対処法

vim でファイルを編集していると、どこかのキーを押してしまい突然

❯ vim zsh_suspend.md
zsh: suspended  vim zsh_suspend.md

の表示とともにコマンドラインに戻された。

結論

❯ fg

fgコマンドを実行すると、元の vim のプロセスに戻れる。

何が起きていたのか?

ファイル編集中に Ctrl+z を押した結果、vim のプロセスがsuspend(一時停止)状態になっていた

その証拠に、現在の端末に割り当てられたプロセスをjobsコマンドで確認してみると、

❯ jobs
[1]  - suspended  vim zsh_suspend.md

さっき突然消えてしまった、Vimのプロセスがあった!

この作業をフォアグラウンド(元の vim の編集画面)に戻すには、fgコマンドを実行すればいい。

ちなみに、複数プロセスが動いている場合は、fgコマンドに引数として%1 %2などを渡せば、プロセスを指定できる。

❯ jobs
[1]  - suspended  vim sample1.md
[2]  - suspended  vim sample2.md

❯ fg %1
# sample1.mdの編集画面

❯ fg %2
# sample2.mdの編集画面

bash の場合、fg 1のように引数は数字のみでも可

参考記事

こちらの@kamyknさんの記事も読んでみてほしいです。

qiita.com

追記 (2022/03/26)

最初に偶然Ctrl-zを押してしまった日から、2ヶ月が経ちました。

今となってはCtrl-zなしでは生きていけません。

上の参考記事を読んでもらえればわかると思いますが、Ctrl-z を使うことで、vim <=> ターミナル の行き来が格段にしやすくなります。

vimでテキスト編集 => ターミナルでGit操作 => vimに戻る

といった具合です。

vimに復帰する度にfgとコマンド入力するのが面倒なので、Ctrl-zキーバインドを設定しています。

~/.zshrc

fancy-ctrl-z () {
  if [[ $#BUFFER -eq 0 ]]; then
    BUFFER="fg"
    zle accept-line
  else
    zle push-input
    zle clear-screen
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z

Ctrl-z のジョブサスペンド機能を使っていない方がいたら、ぜひ使ってみてほしいです!