Jak rozwiązywana jest historia poleceń między wieloma instancjami Vima?

15

Vim przechowuje historię poleceń ex (dostępnych za pośrednictwem :i q:), a historia ta utrzymuje się po zamknięciu.

Jeśli uruchamiam wiele instancji Vima (ten sam użytkownik, ten sam katalog domowy), w jaki sposób Vim rozróżnia historie poleceń? Wygląda na to, że ostatni proces wyjścia wygrywa. Czy istnieje sposób na zachowanie historii poleceń wszystkich instancji?

200_sukces
źródło
1
Naprawdę? Ta historia nie trwa po moim odejściu. (Vim 7.4.52, Ubuntu 14.04)
Klamka
3
@Doorknob Upewnij się, że Twoja ~/.viminfowłasność jest twoja. Częstym błędem jest uruchamianie się przez ludzi, sudo vim ...którzy, jeśli wcześniej nie uruchomiłeś vima jako własnego użytkownika, utworzą go ~/.viminfojako root. Jeśli to jest problem, sugeruję nauczenie się używania sudoeditlub sudo -eedycji plików uprzywilejowanych.
jamessan
@jamessan Huh, wygląda na to, że to rzeczywiście był problem; chownnaprawienie mojego .viminfo z powrotem do mnie (Nie jestem pewien, jak zmieniła się jego własność na root, ponieważ zawsze go używałem sudoedit, ale no cóż.)
Klamka

Odpowiedzi:

10

Odpowiedź na twoje tytułowe pytanie jest tym, co zaobserwowałeś. Z podręcznika użytkownika vim:help 21.3

Kiedy uruchomisz Vima wiele razy, ostatnie wychodzące zapisze jego informacje. Może to spowodować utratę informacji, które wcześniej opuszczały przechowywane Vims. Każdy element można zapamiętać tylko raz.

Jednak nazwa pliku viminfo (w którym przechowywana jest historia poleceń, między innymi globalne znaki i zawartość rejestru, jeśli tak skonfigurowano) jest zmienna! Oznacza to, że możesz skonfigurować różne „historie” dla różnych projektów lub instancji vima. Zakładając, że nie uruchamiasz więcej niż jednej instancji vim na projekt, zarządzanie nazwą pliku viminfo za pomocą vimrc (lub innej wtyczki ustawień projektu) jest świetnym sposobem na poradzenie sobie z tym.

Skonfiguruj alternatywne pliki viminfo

W przypadku zarządzania na poziomie projektu chcemy skonfigurować vim, aby zapisać twoje viminfo w innym pliku. Można to zrobić w uruchomionym vimie przed zamknięciem lub przez vimrc, na przykład możesz mieć linie w vimrc, które wykrywają określony katalog jako należący do projektu.

:set viminfo+=nPath/to/custom/viminfofile

Przykład automatycznego ustawiania vimrc na podstawie katalogu:

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

Wynikiem powyższego jest to, że historia specyficzna dla projektu zostanie załadowana przy uruchomieniu i zapisana przy wyjściu, jeśli vim zostanie uruchomiony w katalogu / projects / projA.

Załaduj alternatywne viminfo podczas uruchamiania

Jest to dobre w przypadku, gdy chcesz zapisać swoją historię z boku i załadować ją później, bez zarządzania nią na poziomie projektu.

Po pierwsze, aby zapisać historię, przed wyjściem dodajesz opcję viminfo jak wyżej. Następnie, aby załadować historię, uruchom vim z opcją -i

vim -i Path/to/custom/viminfofile

Jeśli nie chcesz wyjść z vima, aby zapisać plik viminfo, możesz użyć :wv( :wviminfo). Spowoduje to zapisanie pliku viminfo bez wychodzenia z vima zgodnie z powyższym ustawieniem n. Możesz także zrobić :wv SomeOtherFilezapis w lokalizacji, która nie jest taka sama jak ustawienie w opcji viminfo. Może to być wygodniejsze niż ustawienie nazwy pliku do użycia przy wyjściu, ale nie powstrzymuje vima przed użyciem domyślnego pliku po zakończeniu.

Na przykład w pierwszym vimie:

:wv ~/customInfo

a na drugim terminalu:

vim -i ~/customInfo

Lub, jeśli drugi vim już działa i chcesz załadować viminfo:

:rv ~/customInfo

Zauważ, że :wvi :rvnie zmieniaj nazwy pliku, który vim zapisze przy wyjściu, ani nazwy pliku odczytanej podczas uruchamiania.

Dodatkowe informacje

Opis set viminfo+=nSomePath: Używamy polecenia set do dostosowania nazwanej opcji viminfo. +=Wskazuje chcemy dołączyć do opcji, nie zmieniają wszystko. Dołączamy nopcję określającą nazwę pliku dla viminfo. Zaraz potem nmamy SomePathnazwę pliku używanego do zapisywania viminfo.

Dokumentacja dla wv( :help wv) wskazuje, że to polecenie najpierw przeczyta plik viminfo, a następnie połączy stare i nowe informacje. Do tej pory nie mam informacji o tym, jak działa scalanie w tym przypadku, ale sądzę, że zachowuje znaki dla nieznanych plików i rejestrów, które nie są ustawione w bieżącej sesji.

John O'M.
źródło