更改Vim交换/备份/撤消文件的名称

是否有可能改变Vim命名交换/备份/撤消文件的方式?

为了避免混乱,我在~/.vimrc设置了一些选项来将这些文件转储到~/.vim/tmp/{swap,backup,undo} ; 然而,由于我经常用不同的目录编辑同名的文件,所以我经常会遇到很多其他难以区分的文件,Vim有时会遇到恢复问题。

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

我在.vimrc有这个名称,并且用完整的path名和百分号来命名交换文件,就像你描述的那样:

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

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

  • 对于Unix和Win32,如果目录以两个path分隔符"//""\\"结尾,交换文件名将从文件的完整path构build,所有path分隔符都replace为%'%'符号。 这将确保保留目录中的文件名唯一性。

这是我的github的 .vimrc的一部分。

这将设置undodir (并将其打开),设置backupdirdirectory (用于.swp文件)。 请注意,如果它们不存在,它将创build这些目录。

 " 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中如何检查使用文件夹的优先顺序? (像是最后一个文件夹添加第一个它检查?)

首先要描述不同的运营商。 这些操作符对于非string列表选项有不同的含义,所以要注意!

  • -=从string列表中删除值;
  • +=将值附加到string列表中;
  • ^=将该值预先添加到string列表中。

所以backupdir应用了以下操作:

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

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

你可以通过使用(例如) :help ^=或者:help backupdir来获得所有这些:help backupdir

创build目录undo

  $ mkdir ~/.vimundo 

设置你的.vimrc文件

  set undodir=~/.vimundo