Изменить Vim swap / backup / отменить имя файла - PullRequest
53 голосов
/ 02 декабря 2010

Можно ли изменить способ, которым Vim называет свои файлы подкачки / резервного копирования / отмены?

Чтобы избежать беспорядка, я установил параметры в моем ~/.vimrc для выгрузки этих файлов в ~/.vim/tmp/{swap,backup,undo}; однако, поскольку я регулярно редактирую файлы в разных каталогах с одним и тем же именем, я часто получаю множество неразличимых файлов, и Vim иногда сталкивается с проблемами при восстановлении.

В идеале, я хотел бы использовать схему именования, которую постоянная отмена имеет (%path%to%file.undo) для всех этих вспомогательных файлов; нет очевидного способа установить его, но можно ли это сделать с помощью Buf{Read,Write} макросов?

Ответы [ 3 ]

70 голосов
/ 02 декабря 2010

У меня есть это в моем .vimrc, и он называет файлы подкачки полными путями и знаками процента, как вы описываете:

" Store swap files in fixed location, not current directory.
set dir=~/.vimswap//,/var/tmp//,/tmp//,.

Ключ - // в концекаталоги.См. Это примечание от :help dir:

  • Для Unix и Win32, если каталог заканчивается двумя разделителями пути "//" или "\\", имя файла подкачки будет построено изполный путь к файлу со всеми разделителями пути, замененными знаками процента «%».Это обеспечит уникальность имени файла в каталоге preserve.
63 голосов
/ 02 марта 2012

Вот часть моего .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!

Обновление [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, затем проверять список по умолчанию (за исключением . и ~/, которые были удалены) и, наконец, проверять .

Youможно получить помощь по всем этим вопросам в Vim, используя (например) :help ^= или :help backupdir.

2 голосов
/ 19 декабря 2010

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

 $ mkdir ~/.vimundo

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

 set undodir=~/.vimundo
...