私のファイルが開いているvim / tmuxを見つけることができますか?

私のファイルが開いているvim / tmuxを見つけることができますか?

私はtmux職場でIDEとして使用しています。またvim、さまざまなtmuxウィンドウで実行してプロセスをバックグラウンドにすることがよくあります(または単にウィンドウを閉じます。ウィンドウが閉じたときに開いているバッファを削除しないようにvimを設定しました)。これで、編集したいファイルが他のvimセッションの1つに開かれていますが、どのセッションかわからないため、問題が発生しました。

すべてのウィンドウとウィンドウを手動で確認せずにどのウィンドウを見つけることができますか?私の特別なケースでは、何も返されなかったvim ~/myfile.txtので編集しなかったことを知っています。ps aux | grep myfile.txt

ベストアンサー1

それは私に言わないすべてしかし、私はfuser ~/.myfile.txt.swpvimセッションの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/2pts/22そこにいます二つマッチ、こんな!

| awk '{ print $1 }'

これにより、session:0.1に渡すのに適したウィンドウ出力の一部が生成されますtmux switch -t

これはセッションとウィンドウの両方で機能し、スワップファイルを含むウィンドウにフォーカスを置きます。

おすすめ記事