По умолчанию vim
оставляет файлы подкачки в каталоге моего проекта, а при сбоях оставляет файлы резервных копий.
Могу ли я предотвратить это? Или мне нужно обновить .VCSignore
файл всех моих проектов ?
По умолчанию vim
оставляет файлы подкачки в каталоге моего проекта, а при сбоях оставляет файлы резервных копий.
Могу ли я предотвратить это? Или мне нужно обновить .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
Что касается файлов подкачки, может быть полезно собрать их в выделенном каталоге. Это можно сделать с помощью 'directory'
опции. Например
:set directory^=$HOME/.vim/tmp//
добавит $HOME/.vim/tmp
в начало списка каталогов, которые Vim попытается использовать при создании файла подкачки. Трейлинг //
заставляет Vim кодировать полное имя пути к файлу, чтобы не было конфликтов с файлами с одинаковыми именами из разных каталогов.
Предупреждение : это фактически отключает возможность для Vim замечать, если несколько пользователей пытаются редактировать один и тот же файл, поскольку файлы подкачки хранятся в разных местах.
Приведенный ниже фрагмент (адаптированный из vimrc из tpope ) также отключит файл подкачки для буфера, если он не был изменен. Таким образом, если Vim / ваш компьютер выйдет из строя, когда у вас откроется куча файлов, оставленные позади файлы подкачки будут только для измененных файлов.
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
Предупреждение : поскольку файл подкачки существует только при изменении буфера, это имеет эффект, аналогичный настройке '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.