根据选项的不同, VIM 最多会创建 4 种工作文件。
备份文件
你可以让 VIM 在将修改写入到文件之前先备份原文件。默认情况下, VIM 会保存一个备份文件但是当修改成功写入后会立即删除它(:set writebackup
)。如果你想一直保留这个备份文件的话,可以使用 :set backup
。而如果你想禁用备份功能的话,可以使用 :set nobackup nowritebackup
。咱们来看一下上次我在 vimrc 中改了什么:
$ diff ~/.vim/vimrc ~/.vim/files/backup/vimrc-vimbackup
390d389
< command! -bar -nargs=* -complete=help H helpgrep <args>
帮助文档::h backup
交换文件
假设你有一个非常棒的科幻小说的构思。在按照故事情节已经写了好几个小时几十万字的时候..忽然停电了!而那时你才想起来你上次保存 ~/来自外太空的邪恶入侵者.txt
是在.. 好吧,你从来没有保存过。
但是并非没有希望了!在编辑某个文件的时候, VIM 会创建一个交换文件,里面保存的是对当前文件所有未保存的修改。自己试一下,打开任意的文件,并使用 :swapname
获得当前的交换文件的保存路径。你也可以将 :set noswapfile
加入到 vimrc 中来禁用交换文件。
默认情况下,交换文件会自动保存在被编辑文件所在的目录下,文件名以 .file.swp
后缀结尾,每当你修改了超过 200 个字符或是在之前 4 秒内没有任何动作时更新它的内容,在你不再编辑这个文件的时候会被删除。你可以自己修改这些数字,详见::h 'updatecount'
和 :h 'updatetime'
。
而在断电时,交换文件并不会被删除。当你再次打开 vim ~/来自外太空的邪恶入侵者.txt
时, VIM 会提示你恢复这个文件。
帮助文档::h swap-file
和 :h usr_11
撤销文件
内容变更历史记录 是保存在内存中的,并且会在 VIM 退出时清空。如果你想让它持久化到磁盘中,可以设置 :set undofile
。这会把文件 ~/foo.c
的撤销文件保存在 ~/foo.c.un~
。帮助文档::h 'undofile'
和 :h undo-persistence
viminfo 文件
备份文件、交换文件和撤销文件都是与文本状态相关的,而 viminfo 文件是用来保存在 VIM 退出时可能会丢失的其它的信息的。包括历史记录(命令历史、搜索历史、输入历史)、寄存器内容、标注、缓冲区列表、全局变量等等。默认情况下,viminfo 被保存在 ~/.viminfo
。帮助文档::h viminfo
和 :h 'viminfo'
临时文件管理设置示例
如果你跟我一样,也喜欢把这些文件放到一个位置(如:~/.vim/files
)的话,可以使用下面的配置:
" 如果文件夹不存在,则新建文件夹
if !isdirectory($HOME.'/.vim/files') && exists('*mkdir')
call mkdir($HOME.'/.vim/files')
endif
" 备份文件
set backup
set backupdir =$HOME/.vim/files/backup/
set backupext =-vimbackup
set backupskip =
" 交换文件
set directory =$HOME/.vim/files/swap//
set updatecount =100
" 撤销文件
set undofile
set undodir =$HOME/.vim/files/undo/
" viminfo 文件
set viminfo ='100,n$HOME/.vim/files/info/viminfo
注意:如果你在一个多用户系统中编辑某个文件时, VIM 提示你交换文件已经存在的话,可能是因为有其他的用户此时正在编辑这个文件。而如果将交换文件放到自己的 home 目录的话,这个功能就失效了。因此服务器非常不建议将这些文件修改到 HOME 目录,避免多人同时编辑一个文件,却没有任何警告。