Як я можу використовувати скасувати файл?


36

Останній випуск новин на vim.org розповідає про використання 'скасувати файл' для збереження історії та скасування змін навіть після перезавантаження:

Функція, якою я користуюся, не відома багатьом користувачам, як я дізнався минулих вихідних. Окрім скасування настільки рівнів, скільки вам подобається, Vim пропонує також зберігати інформацію про скасування у файлі. Таким чином, ви можете вийти з Vim, перезавантажити комп’ютер і все одно скасувати внесені вами зміни. Дивіться довідку для "скасувати файл". (Брам Муленаар)

Як я можу включити та використовувати цю функцію?


2
Брам, ймовірно, говорив про цю подію
Курт Пфайфл

Відповіді:


37

Найпростіша версія: створити ~/.vim/undo-dir/каталог і додати наступне до .vimrc:

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

Однак це не бездоганно, і краще читати далі. З мого власного .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

Я вважаю за краще не захаращувати випадкові каталоги з скасуванням файлів. Тож я встановив undodirпараметр, який розміщує їх усіх в одному скасуванні каталогу. Це залишає одну проблему - я ледачий, і мені не здається створювати цей каталог на всіх моїх машинах (я використовую систему контролю версій для синхронізації моїх .vimrcвершин у багатьох машинах). На щастя, досить легко попросити Vim перевірити і створити каталоги, якщо вони не існують.

Зверніть увагу також і на 0700режим скасування режиму (це повні дозволи для власника, жодні дозволи для інших). Які файли я редагував, коли і т. Д. Повинні залишатися приватними. А оскільки це лише каталог, до якого я можу отримати доступ, мені не потрібно турбуватися про те, щоб хтось там вклав симпосилання, або власний файл скасування, або все, що вам потрібно буде турбуватися про використання системного тимчасового каталогу.

Нарешті, не будучи тимчасовим каталогом системи, він не підпадає під дію політики очищення системних темпфілів. Часто це досить коротко - тиждень або близько того. Але щоб вона не зростала назавжди, я вклав у своє crontab:

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

Тож через 90 днів, коли їх не змінювали, їх видаляють. (Чесно кажучи, вони насправді не такі великі, ви можете легко залишити їх назавжди за допомогою дешевого диска. Але врахуйте також свою конфіденційність, якщо ваша машина коли-небудь буде порушена.)


Дякуємо за детальну відповідь @derobert! Я знаю, що це давнє запитання, але я намагався придумати спосіб видалення старих файлів vim undo ( v.stackexchange.com/questions/16053/… ). Я думаю, що було б чистіше зробити це саме так, але це виявляється не просто. Ви коли-небудь думали використовувати vimscript для видалення старих файлів vim? Якщо ні, то ви все-таки використовуватимете crontab над vimscript?
Логан

1
@Logan Використання сценарію vim працює тільки тоді, коли працює vim, а також що робити, якщо працює кілька версій? Ця лінія
крона

Здається, що mkdir()функція підтримує створення декількох структур каталогів з "p"опцією для {path}параметра. Тож вищезазначений сценарій можна трохи спростити. Використовуючи call mkdir($HOME."/.vim/undo-dir", "p", 0700)для мене роботи у Vim 7.4.160 принаймні.
jdhao
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.