За замовчуванням 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.