私はtmux
職場でIDEとして使用しています。またvim
、さまざまなtmuxウィンドウで実行してプロセスをバックグラウンドにすることがよくあります(または単にウィンドウを閉じます。ウィンドウが閉じたときに開いているバッファを削除しないようにvimを設定しました)。これで、編集したいファイルが他のvimセッションの1つに開かれていますが、どのセッションかわからないため、問題が発生しました。
すべてのウィンドウとウィンドウを手動で確認せずにどのウィンドウを見つけることができますか?私の特別なケースでは、何も返されなかったvim ~/myfile.txt
ので編集しなかったことを知っています。ps aux | grep myfile.txt
答え1
それは私に言わないすべてしかし、私はfuser ~/.myfile.txt.swp
vimセッションのPIDを提供するために使用しました。これを実行した後ps aux | grep <PID>
、私はどのvimセッションを使用しているかを知り、どのウィンドウで開いているかについてのヒントを得ました。
Gilesのインスピレーションと少しの粘り強さと幸運のおかげで、私は次のコマンドを思い出しました。
⚘ (FNAME="/tmp/.fnord.txt.swp"; tmux switch -t $(tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_tty}' | grep $(ps -o tty= -p $(lsof -t $FNAME))$ | awk '{ print $1 }'))
それが何をしているかを説明してください:
(FNAME="/tmp/.fnord.txt.swp";
これにより、サブシェルが作成され、FNAME
環境変数に設定されます。厳密に言えば、これは必要ありません。$FNAME
ファイル名を直接置き換えることができますが、編集が簡単になります。それでは、内部から作業してみてください。
lsof -t $FNAME
これは生産しますただファイルを開いたプロセスのPID。
ps -o tty= -p $(...)
これはpts
私たちが使用して見つけたPIDを生成しますlsof
。
tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_tty}'
これにより、入力ウィンドウのリストが作成されます(例:)session:0.1 /dev/pts/1
。最初の部分はtmuxが好きなターゲット形式で、2番目の部分はpts
| grep $(...)$
これにより、ウィンドウのリストがフィルタリングされます。末尾には一致$
するもののみが表示されます。一つ私たちは心配しています。私は偶然見つけたのでpts/2
、pts/22
そこにいます二つマッチ、こんな!
| awk '{ print $1 }'
これにより、session:0.1
に渡すのに適したウィンドウ出力の一部が生成されますtmux switch -t
。
これはセッションとウィンドウの両方で機能し、スワップファイルを含むウィンドウにフォーカスを置きます。
答え2
あなたの質問に対する要約答えは次のとおりです。
for all the tmux sessions:
for all the windows in the session:
for all the panes in windows:
for all sub process pids (recursively):
find the open files
すべてのセッション: tmux list-sessions -F '#{session_id}:#{session_name}
すべてのウィンドウ: tmux list-windows -F '#{window_id}XX#{window_index}XX#{window_name}' -t "$session_id"
すべてのウィンドウ: tmux list-panes -F '#{pane_id}:#{pane_index}:#{pane_pid}' -t ""$session_id":"$window_index""
すべての子プロセス pid: ps -o pid --no-headers --ppid $pid
ファイルを開く:lsof -p $ pid
上記の実装はツリーを示しています。
sessions
windows
panes
process
open files
ファイルが開いているプロセスを表示します(私の場合はvimでもあります)。
以下で見つけることができます。https://github.com/nkh/tmux-ls
5年間githubにいたが、削除された場合やgithubがクラッシュした場合に備えて複製することをお勧めします。