GNU/Linux >> Linux の 問題 >  >> Linux

ファイルが開いているVim/tmuxを見つけることは可能ですか?

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

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

承認された回答:

すべては教えてくれません 、しかし私はfuser ~/.myfile.txt.swpを使用しました これでvimセッションのPIDがわかりました。 ps aux | grep <PID> 使用しているvimセッションを見つけることができ、どのウィンドウで開いているかについてのヒントが得られました。

ジャイルズのインスピレーションと少しの粘り強さと幸運のおかげで、私は次のコマンドを思いつきました:

⚘ (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が生成されます lsofを使用して検出したPIDの 。

tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_tty}'

これにより、session:0.1 /dev/pts/1のようなエントリのペインリストが生成されます。 。最初の部分はtmuxがターゲットに好む形式で、2番目の部分はptsです。

| grep $(...)$

これにより、ペインリスト(末尾の$)がフィルタリングされます そのため、1つにのみ一致します 私たちは気にします。 pts/2を持っていたので、まったく偶然にそれを発見しました およびpts/22 、つまり2つありました マッチ、おっと!

| awk '{ print $1 }'

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

これは、ペインだけでなくセッション間でも機能し、スワップファイルを含むペインに焦点を合わせる必要があります。

関連:最初の行を除いて、ファイルから余分なヘッダー行を削除しますか?
Linux
  1. 印刷されない文字が含まれているファイル名のファイルを削除するにはどうすればよいですか?

  2. Xdg-openコマンドは、ファイルを開くために使用するアプリケーションをどのように認識しますか?

  3. ファイルのURLを探す

  1. Linuxのviでfindによって返されたすべてのファイルを編集するにはどうすればよいですか?

  2. デフォルトのファイルマネージャを見つける方法は?

  3. 複数のセッションを定義した tmux 設定ファイルをリロードするには?

  1. Linuxのディレクトリツリーで最も古いファイルを見つける方法

  2. ファイルを切り捨てない「dd」の代わりに使用しますか?

  3. パイプを使用してvimでファイルを開く方法