Od czasu do czasu podczas pracy nad wieloma projektami i / lub czymkolwiek, pozostawia mi (zbyt) wiele instancji Vima - jak to się dzieje, otwieram plik, który jest już otwarty gdzie indziej, pozostawiając mi opcję:
[O]pen Read-only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort
Czy jest jakiś wbudowany sposób na podniesienie instancji, jak w GUI / terminalu, przechowujący otwarty plik? Idealnie przeniesienie danego pliku na pierwszy plan (w przypadku wielu buforów).
W tej chwili używam skryptu bash, który wyodrębnia PID z wymiany, sprawdź, czy ten PID należy do Vima, a jeśli tak, używa wmctrl
do podniesienia okna. Chociaż działa to dobrze, przynajmniej w GUI i na X11 Linux, pytam, czy istnieje bardziej natywny sposób.
Odpowiedzi:
Jednym rozwiązaniem byłoby użycie pojedynczej instancji vim na projekt, co zapobiegłoby temu problemowi, chyba że wiele projektów miałoby nakładające się pliki.
Zakładam, że szukasz zautomatyzowanego rozwiązania zamiast sugestii dotyczącej zmiany zachowania.
Istnieje możliwość innego rozwiązania w FocusLost, które jest bardziej natywne dla vima.
Zdarzenie autocommand FocusLost działa w GUI Vim i niektórych terminalach konsoli. Mógłbyś zamiast przełączać się na plik w otwartej wersji vima (która, jeśli używasz wielu okien GUI, jest nieporządny), możesz zachować wszelkie zmiany, które nie zostały zapisane w innym wystąpieniu vima, nie zostaną utracone (a oddzielną gałąź git, zapisz, a następnie cofnij, aby znalazła się w drzewie cofania lub po prostu zapisz) i otwórz ją w nowej instancji ze wskazaniem, że była wcześniej otwierana.
Innym potencjalnie przydatnym zdarzeniem autocommand, dostępnym w vimie 7, jest SwapExists , który wskazuje, że plik wymiany istnieje dla pliku, tzn. Że jest otwarty.
Jeśli trzymałeś wszystko w tmuxie lub ekranie, prawdopodobnie istnieje sposób na przejście do odpowiedniego okna / panelu.
Krótkie wyszukiwanie na githubie wywołuje także https://github.com/lynnard/editexisting.vim, który wydaje się działać dla określonych menedżerów okien, takich jak Xmonad.
źródło
Dawno zagubiony i prawie zapomniany.
Chodzi o ponowne uwzględnienie kodu itp., Ale poczta jest taka, jaka jest. Ten kod jest używany w systemie 32-bitowym. Nie jestem pewien, jak będzie się zachowywał w wersji 64-bitowej (lub innej).
Miej też hack w kodzie C (wyodrębnianie PID).
Zostaw to jako post, aby każdy mógł się zhakować i dostosować. Mój obecny skrypt jako całość (używając
pid
jako opcji powinien działać na dowolnym GUI, biorąc pod uwagę, że jest to „GUI-PID / Program” oraz użyciewmctrl -l -p
i tak dalej):źródło