Изменить имя файла подкачки/резервного копирования/отмены Vim
Вопрос
Можно ли изменить способ именования файлов подкачки/резервного копирования/отмены в Vim?
Чтобы избежать беспорядка, я установил параметры в своем ~/.vimrc
сбросить эти файлы в ~/.vim/tmp/{swap,backup,undo}
;однако, поскольку я регулярно редактирую файлы с одним и тем же именем в разных каталогах, я часто получаю множество неотличимых друг от друга файлов, и у Vim иногда возникают проблемы с восстановлением.
В идеале я хотел бы использовать схему именования, которую имеет постоянная отмена (%path%to%file.undo
) для всех этих вспомогательных файлов;нет очевидного способа установить его, но можно ли это сделать с помощью Buf{Read,Write}
макросы?
Решение
У меня это в моем .vimrc
И это называет файлы подмены с полными именами путей и процентными знаками так же, как вы описываете:
" Store swap files in fixed location, not current directory.
set dir=~/.vimswap//,/var/tmp//,/tmp//,.
Ключ - это //
В конце каталогов. Смотрите эту записку из :help dir
:
- Для Unix и Win32, если каталог заканчивается в двух сепараторах пути
"//"
или"\\"
, Имя файла свопа будет построено с полного пути к файлу, когда все разделители пути заменили процентные знаки «%». Это обеспечит уникальность имени файла в справочнике.
Другие советы
Вот часть моего .vimrc
от github.
Это устанавливает undodir
(и включает его), устанавливает backupdir
, и directory
(используется для .swp
файлы).Обратите внимание, что он создает каталоги, если они еще не существуют.
" Save your backup files to a less annoying place than the current directory.
" If you have .vim-backup in the current directory, it'll use that.
" Otherwise it saves it to ~/.vim/backup or .
if isdirectory($HOME . '/.vim/backup') == 0
:silent !mkdir -p ~/.vim/backup >/dev/null 2>&1
endif
set backupdir-=.
set backupdir+=.
set backupdir-=~/
set backupdir^=~/.vim/backup/
set backupdir^=./.vim-backup/
set backup
" Save your swap files to a less annoying place than the current directory.
" If you have .vim-swap in the current directory, it'll use that.
" Otherwise it saves it to ~/.vim/swap, ~/tmp or .
if isdirectory($HOME . '/.vim/swap') == 0
:silent !mkdir -p ~/.vim/swap >/dev/null 2>&1
endif
set directory=./.vim-swap//
set directory+=~/.vim/swap//
set directory+=~/tmp//
set directory+=.
" viminfo stores the the state of your previous editing session
set viminfo+=n~/.vim/viminfo
if exists("+undofile")
" undofile - This allows you to use undos after exiting and restarting
" This, like swap and backup files, uses .vim-undo first, then ~/.vim/undo
" :help undo-persistence
" This is only present in 7.3+
if isdirectory($HOME . '/.vim/undo') == 0
:silent !mkdir -p ~/.vim/undo > /dev/null 2>&1
endif
set undodir=./.vim-undo//
set undodir+=~/.vim/undo//
set undofile
endif
Надеюсь, это прокомментировано достаточно хорошо, чтобы понять, что происходит.Если нет, оставьте комментарий и я исправлю.
Чао!
Обновление [16.07.2012]
Я получил электронное письмо от Роба Кайна с вопросами о backupdir
раздел, на который я хотел ответить для всех:
- Похоже, вы удаляете текущий каталог, а затем добавляете его заново.что это делает?
- Что это
^=
оператор делает? - Как работает порядок приоритета использования проверенных папок в Vim?(Например, последняя добавленная папка проверяется первой?)
Первое, что нужно сделать, это описать различные операторы.Эти операторы имеют разные значения для параметров, не являющихся списком строк, так что будьте осторожны!
-=
удаляет значение из списка строк;+=
добавляет значение в список строк;^=
добавляет значение в список строк.
Итак backupdir
применяются следующие операции:
- Удалить текущий каталог из списка.
- Добавьте текущий каталог в список (это гарантирует, что он будет проверен последним).
- Удалите домашний каталог из списка (мне не нравится, что там что-то сохраняется).
- Подготовить
~/.vim/backup/
. - Подготовить
~/.vim-backup/
.
Когда Vim ищет место для сохранения резервных копий, он проверяет от начала до конца;так что он проверит ~/.vim-backup/
, затем проверьте ~/.vim/backup
, затем проверьте список по умолчанию (кроме .
и ~/
которые были удалены), и, наконец, проверьте .
Вы можете получить помощь по всем этим вопросам в Vim, используя (например) :help ^=
или :help backupdir
.
Создать каталог отменить
$ mkdir ~/.vimundo
Настройте файл .vimrc
set undodir=~/.vimundo