Изменить 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 раздел, который я хотел ответить для всех:

  1. Похоже, вы удаляете текущий каталог, а затем повторно добавляете его. что это делает?
  2. Что это ^= оператор делает?
  3. Как работает порядок приоритета при использовании проверенных папок в Vim? (Например, добавлена ​​ли последняя папка первой, которую она проверяет?)

Первым делом нужно описать разные операторы. Эти операторы имеют разные значения для опций не-списка строк, так что будьте осторожны!

  • -= удаляет значение из списка строк;
  • += добавляет значение в список строк;
  • ^= добавляет значение в список строк.

Итак backupdir применяются следующие операции:

  1. Удалить текущий каталог из списка.
  2. Добавьте текущий каталог в список (это гарантирует, что он будет проверен последним).
  3. Удалите домашнюю директорию из списка (мне не нравится, что там хранятся вещи).
  4. Prepend ~/.vim/backup/,
  5. Prepend ~/.vim-backup/,

Когда Vim ищет место для сохранения резервных копий, он проверяет от первого до последнего; так что проверим ~/.vim-backup/затем проверьте ~/.vim/backup, затем проверьте список по умолчанию (за исключением . а также ~/ которые были удалены) и, наконец, проверить .

Вы можете получить помощь по всем этим вопросам в Vim с помощью (например) :help ^= или же :help backupdir,

Создать каталог отменить

 $ mkdir ~/.vimundo

Настройте свой файл.vimrc

 set undodir=~/.vimundo
Другие вопросы по тегам