За замовчуванням vimзалишає файли swap у моєму каталозі проектів, а після збоїв залишає резервні файли.
Чи можу я запобігти цьому? Або мені потрібно оновити .VCSignoreфайл усіх моїх проектів ?
За замовчуванням vimзалишає файли swap у моєму каталозі проектів, а після збоїв залишає резервні файли.
Чи можу я запобігти цьому? Або мені потрібно оновити .VCSignoreфайл усіх моїх проектів ?
Відповіді:
За замовчуванням Vim не залишає резервних файлів позаду. Вони є лише перехідними файлами, які існують під час збереження Vim буфера на диску. Як описано в :help backup-tableцій поведінці, можна керувати за допомогою параметрів 'backup'та 'writebackup':
'backup' 'writebackup' action ~
off off no backup made
off on backup current file, deleted afterwards (default)
on off delete old backup, backup current file
on on delete old backup, backup current file
Що стосується файлів swap, то їх може бути корисно збирати у спеціальному каталозі. Це можна зробити за допомогою 'directory'опції. Наприклад
:set directory^=$HOME/.vim/tmp//
додасть $HOME/.vim/tmpдо голови списку каталогів, які Vim намагатиметься використовувати при створенні файлу swap. За допомогою трейлінгу //Vim кодує ім'я всього шляху до файлу, щоб не було зіткнень з файлами з подібними назвами з різних каталогів.
Caveat : Це ефективно вимикає можливість Vim помічати, якщо кілька користувачів намагаються редагувати один і той же файл, оскільки файли своп зберігаються в різних місцях.
Фрагмент, наведений нижче (адаптований з vimrc tpope ), також відключить файл swap для буфера, коли він не буде змінено, таким чином, якщо Vim / ваш комп'ютер вийде з ладу, коли у вас відкрита купа файлів, залишені файли підкачки залишаться лише для модифікованих файлів.
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
Caveat : Оскільки файл swap існує лише тоді, коли буфер модифікований, це має аналогічний ефект, як налаштування 'directory'. Якщо буфер немодифікований, то інший Vim може розпочати його редагування без попереднього повідомлення. Якщо другий Vim зберігає до того, як перший внесе більше змін, вони не будуть помічені, поки користувач не спробує зберегти або щось не запустить Vim, щоб перевірити, чи файл змінено.
Я використовую свій .vimrcна багатьох машинах, включаючи спільні сервери. Я не обов'язково хочу, щоб люди могли бачити файли, над якими я працюю, і мені подобається підтримувати домашній каталог відносно чистим. Тож це моє рішення, яке буде добре працювати на Linux та Mac OS X.
" Sets central temp file location, to prevent local default behavior.
if isdirectory($HOME . '/.vim/.tmp') == 0
:silent !mkdir -m 700 -p ~/.vim/.tmp > /dev/null 2>&1
endif
set backupdir=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
set directory=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
Зауважте, що це створить .tmpкаталог внизу, ~/.vimякщо він ще не існує. Це буде новим будинком ваших файлів своп. Для скасування файлів у мене також є таке .vimrc(що досить схоже):
if exists("+undofile")
" undofile -- This allows you to use undos after exiting and
" restarting. NOTE: only present in 7.3+
" :help undo-persistence
if isdirectory( $HOME . '/.vim/.undo' ) == 0
:silent !mkdir -m 700 -p ~/.vim/.undo > /dev/null 2>&1
endif
set undodir=~/.vim/.undo
set undofile
endif
Це те, що я роблю в своєму vimrc:
fun! MkdirIfNeeded(dir, flags, permissions)
if !isdirectory(a:dir)
call mkdir(a:dir, a:flags, a:permissions)
endif
endfun
" Set (& create if needed) a temp directory to keep backup & swap files
if has('win32')
let whoami = substitute(system("whoami /LOGONID"), '\n', '', '')
let tmpdir = 'C:/tmp/vim_' . whoami
else
let whoami = substitute(system("whoami"), '\n', '', '')
let tmpdir = '/var/tmp/vim_' . whoami
endif
call MkdirIfNeeded(tmpdir, 'p', 0700)
let &backupdir = tmpdir
let &dir = tmpdir
let &undodir = tmpdir
Він створить /var/tmp/vim_<username>і використовувати це для зберігання всіх файлів, пов’язаних з vim. Підтримання чистого каталогу каталогу.
Використання whoamiгарантує, що ви можете використовувати vimrc у всьому світі (тобто для користувача та root), використовуючи окремі каталоги; якщо вам це не потрібно, ви можете замінити його на жорсткий кодований каталог для швидшого запуску. Ви також можете використовувати ~/.vim/каталог, але мені подобається використовувати, /var/tmpоскільки це, як правило, окрема файлова система.
Я використовую, /var/tmpтому що /tmpчасто очищається при перезавантаженні. Ви, мабуть, не хочете, щоб цей каталог був доступним для запису у світі, оскільки люди могли потім розміщувати файли там, щоб робити потенційно шкідливі речі, коли ви відкриваєте файл.
adduserчи іншого, що ви використовуєте, щоб зробити користувачів. У будь-якому випадку більшість людей використовують Vim на надійних машинах (але ваш коментар як такий хороший).
$HOMEкудись покладете .
/var/це інша файлова система. Теорія полягає в тому , що це запобіжить багато записів на /, /usrабо /home, що призводить до зменшення фрагментації і ризик пошкодження файлів у разі аварії ... Ось чому поштові скриньки та інші знаходяться на /varза замовчуванням, а не в homedir ...
/var/tmpзавжди доступний для запису у світі - це системний тимчасовий каталог. (Ну, ви можете змінити його, щоб не бути, але це одна з тих речей, де Unix-подібні системи із задоволенням дозволяють вам зберегти шматки після того, як ви його зламаєте). Якщо у вас є інший користувач у системі, він / вона може створити/var/tmp/vim_«your_username»з дозволом на свій вибір. А потім заповніть його символічними посиланнями на ваші важливі файли, які, ймовірно, будуть знищені тимплеймами vim.