53

是否可以更改 Vim 命名其交换/备份/撤消文件的方式?

为避免混乱,我在其中设置了选项~/.vimrc以将这些文件转储到~/.vim/tmp/{swap,backup,undo}; 但是,由于我经常在不同目录中编辑具有相同名称的文件,因此我经常会得到很多原本无法区分的文件,而且 Vim 有时难以恢复。

理想情况下,我想%path%to%file.undo对所有这些辅助文件使用持久撤消具有 () 的命名方案;没有明显的设置方法,但是可以用Buf{Read,Write}宏来完成吗?

4

3 回答 3

70

我有这个,.vimrc它用完整的路径名和百分号命名交换文件,就像你描述的那样:

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

关键是//在目录的末尾。请参阅以下说明:help dir

  • 对于 Unix 和 Win32,如果目录以两个路径分隔符"//" 或结尾"\\",则交换文件名将从文件的完整路径构建,所有路径分隔符都替换为百分号 '%' 符号。这将确保保留目录中的文件名唯一性。
于 2010-12-02T04:56:30.813 回答
67

这是我.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

希望它的评论足够好,以了解发生了什么。如果没有,请添加评论,我会修复它。

再见!

更新 [07/16/2012]

我收到了一封来自 Rob Kine 的电子邮件,询问了backupdir我想为每个人回答的部分的以下问题:

  1. 看起来您正在删除当前目录,然后重新添加它。那有什么用?
  2. 运营商是做什么的^=
  3. 在 Vim 中,使用检查的文件夹的优先顺序如何工作?(就像添加的最后一个文件夹是它检查的第一个文件夹?)

首先是描述不同的运营商。这些运算符对于非字符串列表选项有不同的含义,因此请注意!

  • -=从字符串列表中删除值;
  • +=将值附加到字符串列表;
  • ^=将值添加到字符串列表。

所以backupdir应用了以下操作:

  1. 从列表中删除当前目录。
  2. 将当前目录附加到列表中(这确保它是最后检查的)。
  3. 从列表中删除主目录(我不喜欢保存在那里的东西)。
  4. 前置~/.vim/backup/.
  5. 前置~/.vim-backup/.

当 Vim 查找保存备份的位置时,它会从头到尾检查;所以它会检查~/.vim-backup/,然后检查~/.vim/backup,然后检查默认列表(除了.~/被删除的),最后检查.

在 Vim 中,您可以使用(例如):help ^=:help backupdir.

于 2012-03-02T05:12:54.810 回答
2

创建目录撤消

 $ mkdir ~/.vimundo

设置你的 .vimrc 文件

 set undodir=~/.vimundo
于 2010-12-19T19:25:29.903 回答