Як я можу запобігти Vim залишати занадто багато файлів (наприклад, swap, резервне копіювання, скасування)?


13

За замовчуванням vimзалишає файли swap у моєму каталозі проектів, а після збоїв залишає резервні файли.

Чи можу я запобігти цьому? Або мені потрібно оновити .VCSignoreфайл усіх моїх проектів ?

Відповіді:


16

Резервне копіювання файлів

За замовчуванням 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, щоб перевірити, чи файл змінено.


5

Я використовую свій .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

1

Це те, що я роблю в своєму 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часто очищається при перезавантаженні. Ви, мабуть, не хочете, щоб цей каталог був доступним для запису у світі, оскільки люди могли потім розміщувати файли там, щоб робити потенційно шкідливі речі, коли ви відкриваєте файл.


1
/var/tmpзавжди доступний для запису у світі - це системний тимчасовий каталог. (Ну, ви можете змінити його, щоб не бути, але це одна з тих речей, де Unix-подібні системи із задоволенням дозволяють вам зберегти шматки після того, як ви його зламаєте). Якщо у вас є інший користувач у системі, він / вона може створити /var/tmp/vim_«your_username»з дозволом на свій вибір. А потім заповніть його символічними посиланнями на ваші важливі файли, які, ймовірно, будуть знищені тимплеймами vim.
дероберт

@derobert Тільки якщо його не існує. Якщо ви користуєтеся цією системою та маєте багато користувачів, ви, ймовірно, хочете додати створення цього каталогу до того adduserчи іншого, що ви використовуєте, щоб зробити користувачів. У будь-якому випадку більшість людей використовують Vim на надійних машинах (але ваш коментар як такий хороший).
Martin Tournoij

Правильно, тільки якщо його не існує. Що, перебуваючи у системному тимчасовому каталозі, трапляється непередбачувано, виходячи з того, коли ці темпфіли будуть очищені. Не впевнений, чому ви не просто його $HOMEкудись покладете .
derobert

@derobert Ну, /var/це інша файлова система. Теорія полягає в тому , що це запобіжить багато записів на /, /usrабо /home, що призводить до зменшення фрагментації і ризик пошкодження файлів у разі аварії ... Ось чому поштові скриньки та інші знаходяться на /varза замовчуванням, а не в homedir ...
Martin Tournoij
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.