Von Zeit zu Zeit, während ich an mehreren Projekten arbeite und / oder was auch immer, bleiben mir (zu) viele Vim-Instanzen offen - wie es passiert, öffne ich eine Datei, die bereits an einer anderen Stelle geöffnet ist, und habe dann die Möglichkeit:
[O]pen Read-only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort
Gibt es eine eingebaute Methode, um die Instanz zu erhöhen, wie in GUI / Terminal, die die geöffnete Datei enthält? Idealerweise sollte die betreffende Datei in den Vordergrund gestellt werden (wenn mehrere Puffer vorhanden sind).
Ab sofort verwende ich ein Bash-Skript, das die PID aus dem Swap extrahiert. Überprüfen Sie, ob diese PID zu Vim gehört, und rufen Sie wmctrl
in diesem Fall das Fenster auf. Das funktioniert zwar gut, zumindest für GUI und unter X11 Linux, aber ich frage, ob es einen nativeren Weg gibt.
Antworten:
Eine Lösung wäre, eine einzige Instanz von vim pro Projekt zu verwenden, um dieses Problem zu vermeiden, es sei denn, Ihre mehreren Projekte hatten überlappende Dateien.
Ich gehe davon aus, dass Sie nach einer automatisierten Lösung suchen, anstatt einen Vorschlag zur Änderung Ihres Verhaltens zu machen.
Es gibt die Möglichkeit einer anderen Lösung in FocusLost , die vim ursprünglicher ist.
Das FocusLost-Autobefehlsereignis funktioniert in GUI Vim und in einigen Konsolenterminals. Anstatt zu der Datei in der Version von vim zu wechseln, die geöffnet ist (was bei Verwendung mehrerer GUI-Fenster problematisch ist), können Änderungen, die nicht in der anderen Instanz von vim geschrieben wurden, nicht verloren gehen (a) Trenne den Git-Zweig, speichere ihn dann und mache ihn rückgängig, so dass er sich im Rückgängig-Baum befindet, oder speichere ihn einfach und öffne ihn in der neuen Instanz mit dem Hinweis, dass er zuvor geöffnet wurde.
Ein weiteres potenziell nützliches Autocommand-Ereignis, das in Version 7 verfügbar ist, ist SwapExists , das angibt, dass für die Datei eine Auslagerungsdatei vorhanden ist, dh sie ist geöffnet.
Wenn Sie alles in tmux oder screen gespeichert haben, gibt es wahrscheinlich eine Möglichkeit, zum entsprechenden Fenster / Bereich zu wechseln.
Eine kurze Github-Suche ruft auch https://github.com/lynnard/editexisting.vim auf, was für bestimmte Fenstermanager wie Xmonad zu funktionieren scheint.
quelle
Lange verloren und fast vergessen.
Bedeutet, den Code usw. neu zu faktorisieren, aber die Post ist wie sie ist. Dieser Code wird auf einem 32-Bit-System verwendet. Ich bin mir nicht sicher, wie es sich bei 64-Bit (oder anderen) verhalten würde.
Machen Sie auch irgendwo einen Hack im C-Code (PID extrahieren).
Überlasse es als einen Beitrag, den jeder hacken und optimieren kann. Mein aktuelles Skript als Ganzes (
pid
als Option sollte es auf jeder GUI funktionieren, vorausgesetzt es ist "GUI-PID / Programm" und die Verwendung vonwmctrl -l -p
und so weiter):quelle