コメントへの返信

コメントへの返信

私は多くのvimウィンドウを実行し、しばしばbgに入れます。問題は、vim私がリストをリストすると、誰もがそう言うので、jobs違いを言うのは難しいということです。

[1]  - suspended  nvim
[2]  - suspended  nvim
[3]  + suspended  nvim

この問題を解決する1つの方法は、vimの起動時に特定のファイルを開くことです。

nvim ./myfile

jobs:

[1]  + suspended  nvim myfile

しかし、それは不都合な名前の代替品です。

別のオプションは、次の環境変数を(誤って)使用してバッファ名を指定することです。

vim name=my_name

ただし、出力がjobsより便利になる可能性があり、プロセスを開始するときに望ましくないプロセスの背景を準備する必要があるという欠点があります。

[1]  - suspended  nvim name=my_name
[2]  + suspended  nvim name=other_name

理想的には、ボタンを押したときにプロセスのオプション名を指定するように求められますctl-z。たぶんこれを処理するプラグインがあるかもしれませんが、まだ見つかりませんでした。

自分で書いたいのですが、どこから始めるべきかわかりません。おそらくctl-z他のプログラムに再マップするのでしょうか?たぶん、前にfg座ってjobs出力を制御するために書く必要があるかもしれません...

これに提案がありますか?

ベストアンサー1

nvim名前と現在のパラメータと一致するバックグラウンドジョブを確認するシェル関数を作成できます。見つかったら、再び前景に戻ります。そうでない場合は、新しいコマンドラインを実行してください。

コマンド全体を再入力しなくても、シェル履歴を使用できます。

  1. 新しいコマンドを開始しましたnvim foo.txt
  2. このコマンドをバックグラウンドにします。
  3. [通常のbash設定を使用]をクリックするとCtrlr foo表示されるため、実行コマンドラインをもう一度nvim foo.txt押すとEnter、シェル機能が呼び出され、一時停止したvimプロセスに戻ることができます。

コメントへの返信

Ctrl-zそのように動作しません。設定可能なシェル機能を割り当てません。bashすべての文字(および他のいくつかの文字)を確認できます。

start cmd:> bind -p | grep -F '\C-a'
"\C-a": beginning-of-line

ほとんどはシェル(readlineプロンプト編集コンポーネントなど)にいくつかの設定がありますが、Ctrl- はありませんz。これは、これが「より高い優先順位」として他の場所で定義されているため、シェルに到達しないためです。

start cmd:> stty -a
speed 38400 baud; rows 47; columns 210; line = 0;
intr = ^C; [...] kill = ^U; eof = ^D; [...] start = ^Q; stop = ^S; susp = ^Z;

ターミナルエミュレータはこのキーの組み合わせをキャプチャし、SIGTSTP(TERMINAL STOP)信号をフォアグラウンドプロセスグループに送信します。

start cmd:> strace -f -p 20171
strace: Process 20171 attached
restart_syscall(<... resuming interrupted read ...>) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
--- SIGTSTP {si_signo=SIGTSTP, si_code=SI_KERNEL} ---
--- stopped by SIGTSTP ---
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=3583, si_uid=1000} ---

これがカーネルレベルで起こることです。フォアグラウンドプロセスが停止し(信号を捕捉できなかったため)、シェルは子プロセスがカーネルから信号を受信して​​停止したことを知らせます。実行fg結果は、ユーザープロセス(シェル)から送信された継続シグナルである最後の行に表示されます。

おすすめ記事