GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es möglich herauszufinden, in welchem ​​Vim/tmux die Datei geöffnet ist?

Ich verwende tmux bei der Arbeit als meine IDE. Ich verwende auch vim in einer Vielzahl von tmux-Bereichen und wird den Prozess ziemlich oft im Hintergrund ausführen (oder alternativ schließe ich einfach das Fenster – ich habe vim so konfiguriert, dass offene Puffer nicht entfernt werden, wenn das Fenster geschlossen wird). Jetzt habe ich ein Problem, weil eine Datei, die ich bearbeiten möchte, in einer meiner anderen vim-Sitzungen geöffnet ist, aber ich weiß nicht, welche.

Ist es möglich, herauszufinden, welches, ohne alle meine Fenster und Bereiche manuell zu durchsuchen? In meinem speziellen Fall weiß ich, dass ich es nicht mit vim ~/myfile.txt bearbeitet habe weil ps aux | grep myfile.txt gibt nichts zurück.

Akzeptierte Antwort:

Es sagt mir nicht alles , aber ich habe fuser ~/.myfile.txt.swp verwendet was mir die PID der vim-Sitzung gab. Ausführen von ps aux | grep <PID> Ich konnte herausfinden, welche vim-Sitzung ich benutzte, was mir einen Hinweis darauf gab, in welchem ​​Fenster ich sie geöffnet hatte.

Dank der Inspiration von Giles und etwas Beharrlichkeit und Glück kam ich auf den folgenden Befehl:

⚘ (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 }'))

Um zu erklären, was das bewirkt:

(FNAME="/tmp/.fnord.txt.swp";

Dadurch wird eine Subshell erstellt und FNAME festgelegt als Umgebungsvariable. Es ist streng genommen nicht notwendig – Sie könnten einfach $FNAME ersetzen mit dem Dateinamen selbst, aber es erleichtert die Bearbeitung. Jetzt von innen nach außen arbeiten:

lsof -t $FNAME

Dies erzeugt nur die PID des Prozesses, der die Datei geöffnet hat.

ps -o tty= -p $(...)

Dies erzeugt die pts der PID, die wir mit lsof gefunden haben .

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

Dies erzeugt eine Bereichsliste mit Einträgen wie session:0.1 /dev/pts/1 . Der erste Teil ist das Format, das tmux für Ziele bevorzugt, und der zweite Teil sind die pts

| grep $(...)$

Dies filtert unsere Bereichsliste – das nachgestellte $ Es wird also nur mit dem Einen übereinstimmen wir kümmern uns um. Ich habe das eher zufällig entdeckt, da ich pts/2 hatte und pts/22 , also waren es zwei Streichhölzer, hoppla!

| awk '{ print $1 }'

Dies erzeugt die session:0.1 Teil der Pane-Ausgabe, der zur Übergabe an tmux switch -t geeignet ist .

Dies sollte sitzungs- und bereichsübergreifend funktionieren und den Bereich mit Ihrer Auslagerungsdatei in den Fokus rücken.

Verwandte:Zusätzliche Kopfzeilen aus der Datei entfernen, außer der ersten Zeile?
Linux
  1. So finden Sie die älteste Datei in einem Verzeichnisbaum in Linux

  2. Wie lösche ich eine Datei, deren Dateiname nicht druckbare Zeichen enthält?

  3. Alternative zu „dd“, die die Datei nicht abschneidet?

  4. Ist es möglich zu erkennen, wann eine Datei heruntergeladen wurde?

  5. Wie finde ich den Typ einer Img-Datei und mounte sie?

So speichern Sie eine Datei in Vim / Vi und beenden den Editor

Woher weiß der Befehl Xdg-open, welche Anwendung zum Öffnen einer Datei verwendet werden soll?

Wie finde ich den my.cnf-Speicherort von MySQL?

Warum ist es möglich, den Bildschirm umzudrehen?

Öffnen Sie eine Datei, die durch das Ergebnis eines Befehls in vim angegeben wird

Finden Sie heraus, welcher Prozess eine Datei ändert