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

时间:2010-12-02 04:48:51

标签: vim swapfile

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

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

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

3 个答案:

答案 0 :(得分:70)

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

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

密钥是目录末尾的//。请参阅:help dir中的此说明:

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

答案 1 :(得分:63)

以下是来自github.vimrc的一部分。

这会设置undodir(并将其打开),设置backupdirdirectory(用于.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中运行? (就像最后一个文件夹添加了它检查的第一个文件夹?)
  4. 首先要描述不同的运营商。这些运算符对非字符串列表选项有不同的含义,因此请注意!

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

    因此backupdir已应用以下操作:

    1. 从列表中删除当前目录。
    2. 将当前目录附加到列表中(这确保它是最后检查的内容)。
    3. 从列表中删除主目录(我不喜欢那里保存的东西)。
    4. 前置~/.vim/backup/
    5. 前置~/.vim-backup/
    6. 当Vim查找保存备份的位置时,它会从头到尾进行检查;所以它会检查~/.vim-backup/,然后检查~/.vim/backup,然后检查默认列表(已移除的.~/除外),最后检查{{ 1}}

      您可以使用(例如).:help ^=来获取Vim中所有这些内容的帮助。

答案 2 :(得分:2)

创建目录undo

 $ mkdir ~/.vimundo

设置.vimrc文件

 set undodir=~/.vimundo