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