Jedną z nowych funkcji w Vim 7.3 jest „trwałe cofnięcie”, które pozwala na zapisanie undotree do pliku przy wychodzeniu z bufora.
Niestety, nie udało mi się prawidłowo go włączyć lub chyba źle go używam. Oto, czego próbowałem do tej pory:
Dodałem do ~ / .vimrc
set undofile " Save undos after file closes
set undodir=$HOME/.vim/undo " where to save undo histories
set undolevels=1000 " How many undos
set undoreload=10000 " number of lines to save for undo
Po tym powinienem być w stanie otworzyć dowolny plik, edytować go, a następnie zapisać i zamknąć, a kiedy ponownie go otworzę, powinienem być w stanie cofnąć / powtórzyć, jakbym nigdy nie wyszedł. Niestety, wydaje się, że tak nie jest, ponieważ żaden plik undofile nigdy nie jest zapisywany.
Uwagi:
Jestem na Win 7 i używam Vima 7.3 z projektu Vim without cream. Trwałe cofanie jest wbudowane.
$ HOME / .vim / undo istnieje w moim systemie plików
mkdir ~/.vim/undo
Odpowiedzi:
Umieść to w swoim,
.vimrc
aby utworzyć,undodir
jeśli nie istnieje, i włącz trwałe cofanie. Przetestowano na Windowsie i Linuksie.źródło
:silent call system('mkdir -p ' . &undodir)
&
bo zamiast ting nim. (Moim zdaniem to rozróżnienie między i jest jedną z wielu, wielu, wielu zadziwiająco okropnych "cech" Vimscript, ale YMMV.)set
undodir
let
let
set
.vim
jeśli coś takiego nie istnieje. Niestety-p
flaga nie istnieje w systemie Windows, więcmkdir
dwukrotnie poprawiłem odpowiedź, aby zadzwonić, aby zapewnić zgodność z systemem Windows.-p
flagi jest w rzeczywistości uniknięcie błędu, gdy katalog istnieje. Mam polecenie wewnątrzif has('win32')
bloku, więc po prostu używaćmkdir
bez-p
systemu Windows.mkdir()
? Wtedy może się to staćcall mkdir(myUndoDir, 'p')
:, które zachowuje się jakmkdir -p
.Próbowałem tego w moim _gvimrc:
Zaczęło działać zgodnie z reklamą, kiedy usunąłem nawias try-catch, w ten sposób:
Musiałem stworzyć katalog.
źródło
if has('persistent_undo')
silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1
set undodir=~/.config/nvim/backups
endif
"dodanie komentowanej wiadomości w celu zwiększenia długości wiadomościPrzypuszczam, że $ HOME nie działa zgodnie z reklamą.
W moim systemie
:echo $HOME
pokazuje H: \, ale: e $HOME/
mówi:~/
nieprawidłowa nazwa pliku.Możesz spróbować absolutną ścieżką, aby zobaczyć, czy to wyleczy
źródło
$TEMP
. Kiedy patrzę,set undodir?
to widać~/AppData/Local/Temp
. Plik cofania jest utrwalany i ładuje się poprawnie. Może$TEMP
będzie bardziej niezawodny?Teraz działa to zgodnie z oczekiwaniami:
file.txt
otwórz w buforze Vima 7.4 w systemie Windows 7,:setlocal undofile
a następnie zapisz zmianę w buforze, a plik undofile.file.txt.un~
zostanie utworzony obok, ponieważ:set undodir?
zgłasza „undodir =”. domyślnie - tzn. nie ma potrzeby określania tego ręcznie. Możesz także:set undofile
w modelinie.źródło