Використовуєте постійне скасування Vim?


96

Однією з нових можливостей Vim 7.3 є "постійне скасування", яке дозволяє зберігати ультрадрево у файлі при виході з буфера.

На жаль, мені не вдалося його належним чином увімкнути, або я, мабуть, використовую неправильно. Ось те, що я намагався до цього часу:

Я додав наступне до ~ / .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

Після цього я нібито мав змогу відкрити будь-який файл, відредагувати його, потім зберегти-закрити, а коли я його знову відкрию, я мав би змогу скасувати / повторити, ніби ніколи не виходив. На жаль, це, здається, не так, оскільки жоден файл відміни ніколи не пишеться.

Примітки:

  1. Я на Win 7, використовуючи Vim 7.3 від проекту Vim без крему. Постійне скасування запечене.

  2. $ HOME / .vim / undo існує у моїй файловій системі


38
Просто наголосити, пункт 2) дуже важливий. Vim не створить для вас каталог, а постійне скасування не буде працювати, поки виmkdir ~/.vim/undo
puk

2
+1. Вибачте, на Linux це працює ... дякую, що розповіли мені про це!
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Для майбутніх відвідувачів цього питання: НЕ ставте лапки навколо значення undodir! Я на деякий час застряг у цій проблемі - використовуйте абсолютний paht, без лапок навколо нього.
naiveai

Відповіді:


51

Помістіть це у свій, .vimrcщоб створити, undodirякщо він не існує, і увімкнути постійне скасування. Перевірено як на Windows, так і на Linux.

" Put plugins and dictionaries in this dir (also on Windows)
let vimDir = '$HOME/.vim'
let &runtimepath.=','.vimDir

" Keep undo history across sessions by storing it in a file
if has('persistent_undo')
    let myUndoDir = expand(vimDir . '/undodir')
    " Create dirs
    call system('mkdir ' . vimDir)
    call system('mkdir ' . myUndoDir)
    let &undodir = myUndoDir
    set undofile
endif

5
Це може бути кращим для створення каталогу::silent call system('mkdir -p ' . &undodir)
Кайл Странд

1
Я використовую , &тому що я , а не твані його. (На мою думку, ця різниця між і є однією з багатьох, багатьох, багатьох приголомшливо жахливих "особливостей" Vimscript, але YMMV.)setundodirletletset
Кайл Стренд,

1
Дякую Кайлу, гарну ідею творити, .vimякщо її не існує. На жаль, -pпрапор у Windows не існує, тому я mkdirдвічі редагував відповідь на дзвінок, щоб забезпечити сумісність Windows.
Маттіас Браун,

2
Ага. Моєю основною причиною використання -pпрапора є насправді уникнення помилки, коли каталог існує. У мене є команда всередині if has('win32')блоку, тому я просто використовую mkdirбез -pWindows.
Kyle Strand

4
Чому б не використовувати mkdir()? Тоді це може стати:, call mkdir(myUndoDir, 'p')який поводиться як mkdir -p.
нельстрем

8

Я спробував це у своєму _gvimrc:

" Persistent undo
try 
    set undodir=C:\vim\undodir
    set undofile
catch
endtry

Він почав працювати так, як рекламується, коли я видалив дужку try-catch, таким чином:

" Persistent undo
set undodir=C:\vim\undodir
set undofile

Мені довелося створити каталог.


if has('persistent_undo')
Арелав

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1
Арелав

set undodir=~/.config/nvim/backups
Арелав

1
endif"додавання коментованого повідомлення для збільшення довжини повідомлення
Арелав,

3

Я вважаю, що $ HOME не працює так, як рекламується.

У моїй системі :echo $HOMEпоказує H: \, але : e $HOME/говорить: ~/недійсне ім'я файлу.

Можна спробувати за допомогою абсолютного шляху побачити, чи виліковує це


Я міг би |: echo $ HOME | та |: e $ HOME / | без проблем, але я все одно намагався щось змінити. Здавалося, це спрацьовувало часом, а не в інших. Зокрема, він ніколи не зберігає резервні копії, коли я редагую свій файл ~ / .vimrc.
duckworthd

У Windows 7 я використовую $TEMP. Коли я дивлюсь, set undodir?це видно ~/AppData/Local/Temp. Файл скасування зберігається і завантажується правильно. Може, $TEMPбуде надійнішим?
slawek

1

Тепер це працює, як очікувалося: file.txtвідкрийте в буфері Vim 7.4 в Windows 7, :setlocal undofileпотім збережіть зміни в буфері, і скасувати файл .file.txt.un~буде створено поряд із :set undodir?повідомленнями, що "undodir =." за замовчуванням - тобто немає необхідності вказувати це вручну. Ви також можете :set undofileв моделі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.