Изменить имя файла Vim swap/backup/undo
Можно ли изменить способ, которым Vim называет свои файлы подкачки/резервного копирования/отмены?
Чтобы избежать беспорядка, я установил параметры в своем ~/.vimrc
, чтобы сбрасывать эти файлы в ~/.vim/tmp/{swap,backup,undo}
; однако, поскольку я регулярно редактирую файлы в разных каталогах с одним и тем же именем, я часто получаю много других неразличимых файлов, и у Vim иногда возникают проблемы с восстановлением.
В идеале, я бы хотел использовать схему именования, которая была бы постоянной (для %path%to%file.undo
) для всех этих вспомогательных файлов; нет очевидного способа установить его, но можно ли это сделать с помощью Buf{Read,Write}
макросов?
Ответы
Ответ 1
У меня есть это в моем .vimrc
и он называет файлы подкачки с полными именами путей и знаками процента так же, как вы описываете:
" Store swap files in fixed location, not current directory.
set dir=~/.vimswap//,/var/tmp//,/tmp//,.
Ключ //
в конце каталогов. См. Это примечание от :help dir
:
- Для Unix и Win32, если каталог заканчивается двумя разделителями путей
"//"
или "\\"
, имя файла подкачки будет создано из полного пути к файл со всеми разделителями путей заменен на знаки% '%'. Это обеспечит уникальность имени файла в каталоге сохранения.
Ответ 2
Здесь часть моего .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
Надеюсь, он прокомментировал достаточно хорошо, чтобы понять, что происходит. Если нет, добавьте комментарий, и я исправлю его.
Ciao!
Обновление [07/16/2012]
Я получил электронное письмо от Роба Кина, задающее эти вопросы о разделе backupdir
, на который я хотел ответить всем:
- Похоже, вы удаляете текущий каталог, а затем повторно добавляете его. что это делает?
- Что делает оператор
^=
?
- Как работает порядок приоритета в использовании папок в Vim? (Как и последняя папка добавлена первая, которую она проверяет?)
Первое, что нужно описать для разных операторов. Эти операторы имеют разные значения для параметров, отличных от строкового списка, поэтому будьте предупреждены!
-
-=
удаляет значение из списка строк;
-
+=
добавляет значение в список строк;
-
^=
добавляет значение в список строк.
Итак, backupdir
имеет следующие операции:
- Удалить текущий каталог из списка.
- Добавить текущий каталог в список (это гарантирует, что это проверено последним).
- Удалите домашнюю директорию из списка (мне не нравится, когда там сохраняется материал).
- Подготовить
~/.vim/backup/
.
- Prepend
~/.vim-backup/
.
Когда Vim ищет, где сохранить резервные копии, он проверяет от первого до последнего; поэтому он проверяет наличие ~/.vim-backup/
, затем проверяет ~/.vim/backup
, затем проверяет список по умолчанию (за исключением .
и ~/
, которые были удалены), и, наконец, проверьте .
Вы можете получить помощь по всем этим в Vim, используя (например) :help ^=
или :help backupdir
.
Ответ 3
Создать каталог отменить
$ mkdir ~/.vimundo
Настройте файл .vimrc
set undodir=~/.vimundo