~/.viminfo 文件由Vim系统自动生成,用于记录和保存一些Vim的操作记录和状态信息,便于重启Vim进程后能恢复之前的各种历史操作行为。

一、viminfo文件简介

viminfo文件用于保存命令行(command line history) 和 搜索模式的历史记录(search string history)、输入记录(input-line history)、非空寄存器内文本内容(Contents of non-empty registers)、各种文件的标记(Marks for several files)、文件缓存列表(The buffer list)和全局变量(Global variables)等内容。

每次退出Vim都会把上述类信息存放在一个viminfo文件中,当Vim重新启动时会读取这个信息文件。

使用 :wviminfo file_name命令,可以手动创建一个viminfo文件。

可以在Vim命令行模式下通过命令 :help viminfo 获取关于viminfo文件的官方说明。

:如果 +viminfo 特性在编译时被关闭,则编译出来的Vim不支持 viminfo 文件

二、viminfo配置

viminfo保存哪些内容,以及保存的数量和viminfo文件保存的位置等信息由 viminfo 选项决定,这个选项的值在windows上和在linux上的缺省值不同,可以通过 :help 'viminfo' 查看手册说明,

viminfo 选项的值是由逗号分隔的字符串,每个参数由单个字符组成,标识特定的参数名,后面跟着标识该参数的值的一个数值或字符串。如果某个字符没有列出,则使用该参数的缺省值。可以在Vim配置文件 ~/.vimrc 中设置 set viminfo= 来定制viminfo的配置。

例如: :set viminfo='50,<1000,s100,:0,n~/vim/viminfo

下表是Vim能识别的viminfo参数选项和它们值对应的效果介绍。

option (选项)
! 如果包含 ! 则表示保存和恢复大写字母开头、且不包含小写字母的Vim全局变量。例如,保存 “KEEPTHIS” 和 “K_L_M”,但不保存 “KeepThis” 和”_K_L_M”。不能正确读回嵌套的列表和字典值,它们变成空值。
" 设置每个寄存器最大保存的行数。是 < 选项的旧名,缺点是你需要在 " 之前加上反斜杠,不然它被识别为注释的开始!
% 如果包含,表示保存和恢复文件缓冲区列表,如果后跟数值,该数值指定保存的缓冲区的最大个数,如果没有此数,保存所有的缓冲区。如果 Vim 启动时指定文件名参数,缓冲区列表不予恢复。如果 Vim 启动时没有指定文件名参数,缓冲区列表从 viminfo 文件里恢复。没有文件名的缓冲区和帮助文件的缓冲区不会写入 viminfo 文件。不保存 quickfix (‘buftype’)、未列出 (‘buflisted’)、无名和在可移动媒介上 (viminfo-r) 的缓冲区。
' 编辑过的文件的最大数目,为它们记住位置标记。如果 ‘viminfo’ 非空,必须包含本参数。包含本项目意味着 jumplist 和 changelist 也保存在 viminfo文件里。
/ 保存的搜索模式历史的最大项目数目。如果非零,那么也保存前次搜索和替代模式。如果不包含,使用 history 选项设置的值。
: 保存的命令行历史的最大项目数目。如果不包含,使用 history 选项的值。
< 每个寄存器最大保存的行数。如果为零,不保存寄存器。如果不包含,所有的行都被保存。" 是本项目的旧名,另见下面的 s 选项:千字节指定的限制。
@ 保存的输入行历史的最大项目数目。如果不包含,使用 history 选项的值。
c 如果包含,把 viminfo 里的文本从写入时使用的 ‘encoding’ 转换为当前的 ‘encoding’。可参考 :help viminfo-encoding
f 是否保存文件位置标记。如果为零,不保存文件位置标记 (0~9,A~Z)。如果不存在或者非零,它们都被保存。0 记住光标的当前位置 (退出或者执行 :wviminfo 时)。
h 载入 viminfo 文件时,关闭 hlsearch 设置的高亮效果。如果不包含,取决于在最近的搜索命令之后是否使用过 :nohlsearch
n viminfo 文件的名字。该名字必须立即跟随在 n之后,且必须为最后一个选项!如果启动 Vim 时指定 -i 参数,那个文件名覆盖’viminfo’ 在这里设置的文件名。环境变量在文件打开时被扩展,而不是设置选项时。
r 可移动的媒介。参数是字符串 (直到下一个 ‘,’ 为止),本参数可以多次给出。每个参数指定路径的开始部分,符合者不保存位置标记。这被用于避免可移动的媒介。MS-DOS 上你可以用 “ra:,rb:”,Amiga 则可用 “rdf0:,rdf1:,rdf2:”。你也可用于指定临时文件的路径,比如Unix 上: “r/tmp”。大小写忽略。每个 r 参数的最大长度是 50 个字符。
s 每个项目千字节计的最大长度。如果为零,不保存寄存器。目前只适用于寄存器。缺省的 s10 会忽略包含超过 10 千字节文本的寄存器。另见上面的 < 选项: 行数限制。

现在,可以根据上表的viminfo选项含义来分析 :set viminfo='50,<1000,s100,:0,n~/vim/viminfo 设置的含义。

首先,'50 表示记住最近 50 个你编辑的文件的位置标记;<1000 设置记住寄存器的内容,且每个不超过 1000 行;s100 表示不保存超过 100 千字节文本的寄存器;:0 表示不保存命令行历史;n~/vim/viminfo 表示viminfo使用的文件名为 “~/vim/viminfo”。此外,因为没有指定 / 选项,使用缺省设置:保存所有的搜索历史和前次搜索和替代模式;没有指定 %,表示不保存也不读入文件缓冲区列表,没有设置 h,所以会恢复 hlsearch 高亮。

`viminfo 选项从空值改设为非空值以后,可以用 :rviminfo 读入viminfo文件的内容,但这不是自动进行的。

history 参数表示 : 命令行模式下执行的命令历史和最近的搜索模式的历史会被记住,最大值为10000,可使用命令 :help 'history' 获取更多介绍。

嗯,扫一扫就可以找到小女子我啦~