Jak mogę użyć pliku nieoficjalnego?

36

Ostatni news na vim.org mówi o używaniu „undofile” do zapisywania historii i cofania zmian nawet po ponownym uruchomieniu:

Jak dowiedziałem się w zeszły weekend, funkcja, która sprawia mi przyjemność, nie jest znana wielu użytkownikom. Oprócz cofania z dowolną liczbą poziomów, Vim oferuje również przechowywanie informacji o cofnięciu w pliku. Możesz więc wyjść z Vima, ponownie uruchomić komputer i nadal cofać wprowadzone zmiany. Zobacz pomoc dotyczącą „undofile”. (Bram Moolenaar)

Jak mogę włączyć i korzystać z tej funkcji?

Cofnij
źródło
2
Bram prawdopodobnie mówił o tym wydarzeniu
Kurt Pfeifle,

Odpowiedzi:

37

Najprostsza wersja to: utwórz ~/.vim/undo-dir/katalog i dodaj następujące elementy do .vimrc:

set undodir=~/.vim/undo-dir
set undofile

Jednak nie jest bezbłędny i lepiej czytać dalej. Z mojego własnego .vimrc:

" Let's save undo info!
if !isdirectory($HOME."/.vim")
    call mkdir($HOME."/.vim", "", 0770)
endif
if !isdirectory($HOME."/.vim/undo-dir")
    call mkdir($HOME."/.vim/undo-dir", "", 0700)
endif
set undodir=~/.vim/undo-dir
set undofile

Wolę nie zaśmiecać losowych katalogów plikami cofania. Ustawiłem więc undodiropcję, która umieszcza je wszystkie w jednym katalogu cofania. Pozostaje jeden problem - jestem leniwy i nie mam ochoty tworzyć tego katalogu na wszystkich moich komputerach (używam systemu kontroli wersji do synchronizowania moich .vimrcna wielu komputerach). Na szczęście Vim może łatwo sprawdzić i utworzyć katalogi, jeśli nie istnieją.

Zwróć także uwagę na 0700tryb w katalogu cofania (to pełne uprawnienia dla właściciela, brak uprawnień dla kogokolwiek innego). Które pliki, które edytowałem, kiedy itp. Powinny pozostać prywatne. A ponieważ jest to katalog, do którego tylko ja mogę uzyskać dostęp, nie muszę się martwić, że ktoś w nim umieści dowiązanie symboliczne, własny plik cofania lub cokolwiek, co musiałoby się martwić o użycie systemowego katalogu tymczasowego.

Wreszcie, nie będąc tymczasowym katalogiem systemowym, nie podlega zasadom czyszczenia plików tymczasowych systemu. Często jest to dość krótkie - około tygodnia. Ale aby nie rosnąć wiecznie, umieszczam w moim crontab:

# m h  dom mon dow   command
 43 00 *   *   3     find /home/anthony/.vim/undo-dir -type f -mtime +90 -delete

Więc po 90 dniach bez modyfikacji są usuwane. (Szczerze mówiąc, nie są tak duże, możesz łatwo zostawić je na zawsze z tym, jak tani jest dysk. Ale weź pod uwagę swoją prywatność, jeśli kiedykolwiek twoja maszyna zostanie naruszona.)

derobert
źródło
Dzięki za szczegółową odpowiedź @derobert! Wiem, że to stare pytanie, ale próbowałem wymyślić vimscriptowy sposób usuwania starych plików cofania vim ( vi.stackexchange.com/questions/16053/... ). Myślę, że zrobienie tego w ten sposób byłoby czystsze, ale okazuje się, że nie jest to łatwe. Czy kiedykolwiek myślałeś o użyciu skryptu vimscript do usunięcia starych plików vim? Jeśli nie, czy nadal używałbyś crontab zamiast vimscript?
Logan
1
@Logan Korzystanie ze skryptu vim działałoby tylko wtedy, gdy vim jest uruchomiony, a także, jeśli działa wiele vimów? Ta linia cron jest prosta, nie cierpi z powodu tych problemów i wyraźnie poprawna ...
derobert
Wygląda na to, że mkdir()funkcja obsługuje tworzenie wielu struktur katalogów z "p"opcją {path}parametru. Powyższy skrypt można nieco uprościć. Używanie call mkdir($HOME."/.vim/undo-dir", "p", 0700)działa dla mnie przynajmniej w Vim 7.4.160.
jdhao