starting

starting.txt 适用于 Vim 9.2 版本。 最近更新: 2026年7月 VIM 参考手册 by Bram Moolenaar 译者: Willis 启动 Vim starting 1. Vim 参数 vim-arguments 2. Amiga 上的 Vim starting-amiga 3. 运行 eVim evim-keys 4. 初始化 initialization 5. $VIM 和 $VIMRUNTIME $VIM 6. 挂起 suspend 7. 退出 exiting 8. 保存设置 save-settings 9. 视图和会话 views-sessions 10. viminfo 文件 viminfo-file

1. Vim 参数 vim-arguments

最常见的 Vim 启动方式是通过以下命令编辑单个文件 vim filename -vim 更通用的启动语法是: vim [option | filename] .. 选项参数和文件名参数可混合使用,数量不限。但要留意带参数的选项。 关于和各个 Vi 版本的兼容性,见 cmdline-arguments 。 下述五种方式只能任选一个,用于指定编辑入口: -file --- 文件名 指定一或多个文件名。首个文件将成为当前文件读入缓冲区。光标会定 位在缓冲区的首行。 要避免以 '-' 开头的文件名被误认为选项,可在文件名列表前加上 "--" 前缀。例如: vim -- -filename "--" 之后的所有参数都会被强制解释为文件名。不再解析其他选项或 "+command" 形式的参数。 关于 MS-Windows 上的引号解析规则,见 win32-quotes -- - 指定单横线参数 '-' 有两个含义,因是否使用 Ex 模式而异。 以普通模式启动时: vim - ex -v - 会从标准输入读取文本内容,载入新建缓冲区。原本从标准输入读入的 交互命令,改为从标准错误 (stderr) 流读入。例如: find . -name "*.c" -print | vim - 缓冲区此时会被标为已修改,这样试图退出时会提醒保存。如果不想触 发此提醒,可在 vimrc 中设置: " 从标准输入读取时不置位 'modified' au StdinReadPost * set nomodified 以 Ex 模式启动时: ex - vim -e - exim - vim -E 会以静默模式启动。见 -s-ex -t -tag -t {tag} 指定标签。从标签文件里查找指定 "tag"。标签所在文件将成为当前文 件,并执行相关搜索命令定位光标。多用于 C 程序,"tag" 通常是函 数名。可一键切换到函数所在文件并跳转到函数定义处 (见 tags )。 -q -qf -q [errorfile] 快速修复模式。读入 {errorfile} 指定的错误文件,并跳转到首个错 误。见 quickfix[errorfile] 省略时,默认使用 'errorfile' 选项给定的文件名。其 缺省值见 'errorfile' 文档。 (无) 不提供以上四类参数时,Vim 会以新空白无名缓冲区开始编辑。 通过调用不同程序名 (替代 "vim"),可直接切换启动模式。等价于以下对应选项: ex vim -e 以 Ex 模式启动 (见 Ex-mode ) ex exim vim -E 以增强版 Ex 模式启动 (见 Ex-mode ) exim (缺省不安装) view vim -R 以只读模式启动 (见 -R ) view gvim vim -g 以 GUI 模式启动 (见 gui ) gvim gex vim -eg 以 Ex 模式启动 GUI gex gview vim -Rg 以只读模式启动 GUI gview rvim vim -Z 类似 "vim",但以受限模式启动 (见 -Z ) rvim rview vim -RZ 类似 "view",但以受限模式启动 rview rgvim vim -gZ 类似 "gvim",但以受限模式启动 rgvim rgview vim -RgZ 类似 "gview",但以受限模式启动 rgview evim vim -y 简易 Vim: 包括置位 'insertmode' (见 -y ) evim eview vim -yR 类似 "evim",但以只读模式启动 eview vimdiff vim -d 以比较模式启动 diff-mode gvimdiff vim -gd 以比较模式启动 GUI diff-mode 程序名后方还追加任意字符,Vim 会忽略额外部分。例如,"gvim-8" 会启动 GUI。前提 是存在包含该名字的可执行文件。 Unix 上,通常只有一份名为 "vim" 的可执行文件,并链接该文件到其他各类启动名。 如果系统不支持链接,又不想复制多份程序,可使用外壳别名等机制。例如,在 C shell 系列版本里,可用: alias view vim -R alias gvim vim -g startup-options 选项参数可以按任意顺序给出。单字母选项可合并写在同一个连字号后。在 "--" 参数之 后,不再解析任何选项参数。 VMS 上,所有选项参数默认小写,要大写参数时,需前置斜杠。例如 "-R" 代表味着恢复 模式、而 "-/R" 代表只读模式。 --help -h --help -? -? -h 显示使用说明 (帮助) 并退出。 如需保存输出文本,见 info-message --version --version 显示版本信息并退出。和 :version 命令的输出结果相同。 如需保存输出文本,见 info-message --noplugin --noplugin 跳过插件加载。复位 'loadplugins' 选项。 注意 -u 参数也可能会跳过插件加载,具体差别是: 参数 是否加载: vimrc 文件 插件 defaults.vim (无) 是 是 是 -u NONE 否 否 否 -u DEFAULTS 否 否 是 -u NORC 否 是 否 --noplugin 是 否 是 --startuptime {fname} --startuptime 将启动时的计时信息写入文件 {fname}。可用于分析在加载 .vimrc、 加载插件和打开首个文件整个启动过程中的耗时瓶颈。 {fname} 已存在时,日志会追加在文件末尾。 {仅当编译时带有 +startuptime 特性才有效} --literal --literal 文件名按本义解析,通配符不自动展开。Unix 上无需本参数,因为通 配符由外壳程序负责展开,Vim 本身只负责按本义获取文件名。 对命令行上所有文件名生效,包括写在它之前的文件名。 -+ +[num] 打开首个文件时,光标定位在第 "num" 行。"num" 省略时默认光标会 定位在文件末行。 -+/ +/{pat} 打开首个文件时,光标定位在首个匹配 "pat" 模式的行 (可用搜索模 式见 pattern )。搜索起点是当前光标位置,缺省是首行或来自 viminfo 的上次使用的光标位置。要强制从首行开始搜索,可用 "+1 +/pat"。 +{command} -+c -c -c {command} 打开首个文件时,在对应文件的自动命令和模式行全部处理完毕后,执 行 Ex 命令 {command}。"command" 包含空白时,必须用双引号括起 (具体写法取决于所用外壳)。示例: vim "+set si" main.c vim "+find stdio.h" vim -c "set ff=dos" -c wq mine.mak 注意: 在一条 Vim 命令里,最多可用 10 组 "+" 或 "-c" 参数。按指 定顺序执行。"-S" 参数占用一个 "-c" 名额。 --cmd {command} --cmd 在读取所有 vimrc 配置文件前,执行命令 {command}。其余行为和 "-c {command}" 一致。最多可用 10 组本命令,额度与 "-c" 命令相 互独立,互不占用。 -S -S {file} 打开首个文件后,执行脚本 {file}。相当于以下命令的快捷方式: -c "source {file}" 可与 "-c" 参数混用以及多次使用。也适用 "-c" 的 10 条上限约束。 {file} 文件名不能以 "-" 开头。 不适合用来执行脚本再退出 Vim,因为错误信息无法正常察看。应改用 -u 参数。 -S 单独使用时相当于 "-S Session.vim"。仅当出现在命令末尾或其后有 其他 "-" 选项时生效。 -r -r 恢复模式。无文件名参数时,列出所有现存交换文件。给出文件名时, 读入对应的交换文件,恢复意外崩溃前的编辑会话。见 crash-recovery -L -L 同 -r -R -R 只读模式。为所有打开的文件置位 'readonly' 选项。此模式下,仍可 编辑缓冲区,但可避免意外覆盖文件。如果确实忘记处于只读 (View) 模式并已做出修改,可在 Ex 命令后附加感叹号强制覆盖文件,如 :w! 。也可用 `:set noro` 复位 'readonly' 选项 (见选项一章, options )。后续再编辑文件时,并不自动进入只读模式。直接执行 "view" 程序名相当于给出 -R 参数。'updatecount' 选项在该模式下 会设为 10000,此时交换文件不会频繁自动更新。要完全禁止修改,可 用 -M -m -m 禁止写入修改内容。会复位 'write' 选项,从而屏蔽文件写入。但之 后可手动重新置位 'write' 选项,恢复写入权限。 -M -M 完全禁止文件修改。会复位 'modifiable' 选项,从而禁止任何缓冲区 改动。同时复位 'write' 选项,屏蔽文件写入。但之后可手动重新置 位两个选项,重新允许编辑与保存。 -Z restricted-mode E145 E981 -Z 受限模式。禁止所有调用外部外壳命令功能。这包括使用 CTRL-Z 暂 停、 :sh 、过滤程序 ( filter )、 system() 函数,反引号展开 ( backtick-expansion ) 和 libcall() 。 也禁用 delete()rename()mkdir()job_start()setenv() 和环境变量设置等。 同时关闭 Python、Ruby 和 Lua 等程可用来绕过限制执行外壳命令的 程序接口,Perl 则仅运行安全模块。 在 Unix 上,当 $SHELL 的末尾是 "nologin" 或 "false" 时,会自动 启用本受限模式。 注意 用户仍然可能找到绕过限制执行外壳命令的方法,只是难度会越 来越高。 -g -g 以 GUI 模式启动 Vim。见 gui 。相反功能可见 -v -v -v 以 Vi 模式启动 Ex。仅当调用程序名为 "ex" 或 "gvim" 时才需要此 参数。gvim 使用时会尽可能不启动图形界面。 -e -e 以 Ex 模式启动 Vim,见 Ex-mode ,仅当调用程序名不为 "ex" 时才 需要此参数。 -E -E 以增强 Ex 模式启动 Vim,见 gQ 。仅当调用程序名不为 "exim" 时 才需要此参数。 -s-ex -s 静默或批处理模式。仅当调用程序名为 "ex" 名或前置携带 -e 参数 时,才解析为本模式。否则为接受参数的 -s 用法。此模式用于从文 件而非终端读取并执行 Ex 命令。此时关闭大多数提示、通知、警告和 错误消息。以下命令仍然显示输出 (写入标准输出 (stdout)): :print :list :number :set (用于查看选项值时)。 'verbose' 非零时,仍然显示各类消息 (用于调试,写入标准错误流 (stderr))。 不考虑 'term' 和 $TERM。 如果 Vim 看起来没有动静,可输入 "qa!<Enter>" 强制退出。谨记不 会有等待输入的回显提示。 会跳过大部分初始化设置 (仅执行通过 -u 参数给出的脚本)。 示例: vim -e -s < thefilter thefile 如果需要执行脚本但要查看脚本错误,可改用 -u 执行脚本: vim -u thefilter thefile -b -b 二进制模式。文件读写仅识别 <NL> 为行尾结束符。复位 'expandtab' 选项。'textwidth' 选项设为 0。复位 'modeline'。置位 'binary' 选项。这些设置发生时间在执行 vimrc/exrc 后,但在打开参数列表文 件前。另见 edit-binary -l -l Lisp 模式。置位 'lisp''showmatch' 选项。 -A -A 阿拉伯语模式。置位 'arabic' 选项。 {仅当编译时加入 +arabic 特性才有效 (已内置 +rightleft 支 持),否则,如果使用本参数,Vim 直接报错退出} -F -F 曾用于打开波斯语模式,此支持现已删除。见 farsi.txt -H -H 希伯来语模式。置位 'hkmap''rightleft' 选项。 {仅当编译时加入 +rightleft 特性才有效。否则,如果使用本参 数,Vim 直接报错退出} -V verbose -V[N] 详细输出。将 'verbose' 选项设为 [N] (缺省: 10)。会显示所有加载 脚本和读写 viminfo 文件时的详细消息。用于排查启动和退出阶段的 执行流程。 示例: vim -V8 foobar -V[N]{filename} 类似 -V,同时将 'verbosefile' 设为 {filename}。效果是详细消息 不在终端上回显,而是写入日志文件 {filename}。不接受以数位开头 的 {filename}。示例: vim -V20vimlog foobar --log {filename} --log 开启日志,将日志项目写入 {filename}。 相当于在启动的很早阶段调用了 `ch_logfile({filename}, 'ao')`。 {仅当编译时加入 +eval+channel 特性才有效} -D -D 调试。在执行脚本的首个命令时自动进入调试模式。 debug-mode {仅当编译时加入 +eval 特性才有效} -C -C 兼容模式。置位 'compatible' 选项。即使 .vimrc 文件存在,也会强 制进入兼容模式,但要注意插件或启动脚本里可通过命令 `:set nocompatible` 覆盖。如果仍然进入非兼容模式。可如此找出原 因: :verbose set compatible? 不少插件无法在置位 'compatible' 时工作,可以考虑在启动后再置 位。具体方式是: vim "+set cp" filename 另见 compatible-default -N -N 非兼容模式。复位 'compatible' 选项。即使不存在 .vimrc 文件或使 用 "-u NONE" 时,也可强制进入非兼容模式。 另见 compatible-default -y easy -y 简易模式。 evimeview 隐含启用本模式。启动时,置位 'insertmode',行为类似普通点击-输入的所见即所得编辑器。设置本 参数会执行脚本 $VIMRUNTIME/evim.vim。预设相应映射,适配常见点 击-输入编辑器的编辑习惯,见 evim-keys 。环境支持时,会自动启 动 GUI。 -n -n 不使用交换文件。崩溃后无法恢复。适合在极慢速媒介上 (如软盘) 浏 览或编辑文件。 `:set updatecount=0` 与此等价。后续可通过给 'updatecount' 选项 赋值重新打开交换文件,如 `:set uc=100`。 注意: 不能将 -n 和 -b 合并写为 -nb,该组合有其他含义: -nb'updatecount' 设为 0 的执行时间在 vimrc 脚本执行完毕 ,但在 GUI 初始化之前。因此会覆盖 vimrc 里 'updatecount' 的相关设置, 但不会影响 gvimrc 中的设置。见 startup 。 只想减少磁盘访问 (如在笔记本上使用) 时,不建议使用 "-n",可改 将 'updatetime''updatecount' 设为极大值,在需要保存时手动 输入 :preserve 。保留崩溃恢复的能力。 -o -o[N] 打开 N 个水平分割的窗口。[N] 省略时,默认为每个文件参数各自打 开一个窗口。如果没有足够空间,只打开前面数项。如果给出的窗口数 超过文件参数的数量,靠后的窗口会打开空文件。 -O -O[N] 打开 N 个垂直分割的窗口。此外和 -o 一致。如果命令行同时给出 -o 和 -O 选项,最后给出的参数决定窗口的分割方向。 -p -p[N] 打开 N 个标签页。[N] 省略时,默认每个文件参数独占一个标签页。 最大标签页数由 'tabpagemax' 决定 (缺省为 10)。如果给出的标签页 数超过文件参数的数量,靠后的标签页会打开空文件。另见 tabpage -T -T {terminal} 手动设置终端类型。会影响 Vim 向终端发送的控制序列编码。通常不 需要手动设置,Vim 会自动识别终端类型 (见 terminal-info )。 --not-a-term --not-a-term 告知 Vim 标准输入和/或输出不与终端连接。可用于消除相关警告与两 秒延迟。 同时也抑制 "从标准输入读取..." 和 "还有 N 个文件等待编辑" 等提 示信息。 --gui-dialog-file {name} --gui-dialog-file 使用 GUI 时,原本要弹出对话框的场景会改将对话框标题和消息写入 对话文件 {name}。文件不存在时创建,否则会追加。仅用于测试,避 免脚本因显示不可见的对话框导致测试卡死。 无 GUI 时忽略此参数。 --ttyfail --ttyfail 如果标准输入或标准输出不是终端 (tty),立即退出。 -d -d 以比较模式启动,相当于 vimdiff{仅当编译时加入 +diff 特性才有效} -d {device} {仅在 Amiga 平台且编译时未加入 +diff 特性才有效} 同 "-dev"。 -dev -dev {device} {仅在 Amiga 平台上有效} 指定 {device} 设备用于编辑打开。 常用于设置窗口位置和大小,格式为: "-d con:x/y/width/height", 示例: "-d con:30/10/600/150"。但也可用于指定其他设备 (如 AUX:) 启动编辑, -f -f GUI: 不脱离启动 Vim 的父进程。'f' 代表 "foreground" (前台)。省 略时默认 GUI 会分叉 (fork) 出独立运行子进程,并退出当前进程。 前台运行适用于其他程序 (如 mail 或 readnews) 启动 gvim 并等待 编辑会话完成后继续后续流程的场合。要永久保持 gvim 启动时在前台 运行,在 gvimrc 里为 'guioptions' 选项加上 'f' (译者注: 见 go-f ,按照该处建议,应在 vimrc 而非 gvimrc 里完成设置)。 小心: "-gf" 会在前台启动 GUI,而 "-fg" 指定前景色。 gui-fork Amiga: 打开新窗口时不会重启原有 Vim 进程。其他程序 (如 mail 或 readnews) 时启动 Vim 并等待编辑会话完成需使用本选项。见 amiga-window 。 MS-Windows: 不支持此选项。可借助配套安装的 vim.bat 或 gvim.bat 脚本实现相同效果。 --nofork --nofork GUI: 不分叉。同 -f -u E282 -u {vimrc} 加载脚本文件 {vimrc} 作为初始化配置。跳过其余绝大多数默认初始 化步骤;见 initialization 。 可使用自定义映射和相关设置,以特殊模式启动 Vim。可搭配外壳别名 方便调用 。例如,在 C shell 系列版本里,可用: alias vimc 'vim -u ~/.c_vimrc \!*' 而在 Bash 外壳里,可用: alias vimc='vim -u ~/.c_vimrc' 也可考虑通过自动命令实现类似功能;见 autocommand{vimrc} 为 "NONE" (全大写) 时,跳过所有基于配置文件和环境变量 的初始化步骤,GUI 启动时也因此跳过 gvimrc 加载。所有插件均不 加载。 {vimrc} 为 "NORC" (全大写) 时,类似 "NONE",但仍然加载插件。 {vimrc} 为 "DEFAULTS" (全大写) 时,类似 "NONE",但加载 defaults.vim 脚本,自动开启 'nocompatible' (非兼容模式) 及其 他设置。另见 --clean 。 "-u" 参数指定非 DEFAULTS 值时,会有缺省打开 'compatible' (兼容 模式) 的副作用。这可能导致意料之外的行为。见 'compatible' -U E230 -U {gvimrc} GUI 启动时,加载脚本文件 {gvimrc} 作为初始化配置。跳过其余的 GUI 初始化步骤。{gvimrc} 为 "NONE" 时,则完全不读取任何 GUI 配 置文件。 gui-init 特例: 系统菜单文件总会被加载。 -i -i {viminfo} 使用指定 {viminfo} 文件而非缺省的 viminfo 文件。参数为 "NONE" (全大写) 时,即使设置 'viminfo' 或执行 :rv:wv 时,也不 读或写任何 viminfo 文件。另见 viminfo-file --clean --clean 相当于 "-u DEFAULTS -U NONE -i NONE": - 跳过所有基于配置文件和环境变量的初始化步骤 - 设置 'runtimepath''packpath',将所有主目录下的项目排除在 外 (单纯执行 "-u DEFAULTS" 无此效果) - 加载 defaults.vim 脚本,自动启用 'nocompatible': 使用 Vim 缺省行为 - 不加载 gvimrc 脚本 - 不读写任何 viminfo 文件 注意 后续再追加 "-u" 参数时,会覆盖 "-u DEFAULTS" 的效果 (以上 第三条)。 -x -x 读写文件时启用加密。启动后会提示密钥,该密钥存入 'key' 选项。 后续所有写操作将使用该密钥加密文本。读取已加密文件无需指定本参 数,因为 Vim 在文件读取时总会自动识别文件是否加密,并自动请求 密钥。 encryption {仅当编译时加入 +cryptv 特性才有效} -X -X 不为获取当前窗口标题或使用 X 剪贴板而试图连接 X 服务器。可避免 终端模拟器里运行 Vim 时,因连接 X 服务器缓慢导致启动时间过长。 可用 --startuptime 判断 X 连接是否是延迟的主要因素。 {仅在 Unix 或 VMS 上且当编译时加入 +X11 特性才有效,否则忽略 本参数} 如只需针对特定终端禁止 X 连接,可见 'clipboard' 选项相关设置。 内建 X11 会话管理协议 (XSMP) 处理器支持时,本选项也同时关闭相 关连接,因为它同样可能带来较长延迟。 之后仍需要恢复连接 (例如用于客户-服务器消息) 时,可调用 serverlist() ,该函数会按需建立 X 连接 (假定使用 X11 后端), 但不会启用 XSMP 处理器。 -Y -Y 不试图连接到 Wayland 合成器。{仅在 Unix 上且当编译时加入 +wayland 特性才有效,否则忽略本参数} 注意 本选项会使所有依赖 Wayland 的功能 如剪贴板) 失效。 -s -s {scriptin} 读取指定脚本文件 {scriptin}。文件内容视同手动键入的按键。相当 于 `:source! {scriptin}`。脚本文件结束而编辑器继续运行时,继续 从键盘接收输入。以 Ex 模式启动时无效,参见 -s-ex 。另见 complex-repeat -w_nr -w {number} -w{number} 设置 'window' 选项为 {number} -w -w {scriptout} 录制直到 Vim 结束为止的所有按键输入到 {scriptout} 文件。录制文 件可用 "vim -s" 或 :source! 重放。{scriptout} 文件存在时,新 内容会追加到已有内容之后。另见 complex-repeat 。 不接受以数位开头的 {scriptout} 文件名。 如需以可读性更高的方式记录键入内容,可用 ch_logfile() ,记录 "原始按键输入" 行。另见 --log -W -W {scriptout} 类似 -w ,但文件存在时覆盖而非追加。 --remote [+{cmd}] {file} ... 在作为服务器运行的另一 Vim 实例中打开 {file}。所有非文件参数必 须写在此参数前面。 见 --remote 。 --remote-silent [+{cmd}] {file} ... 类似 --remote,但无可用服务器时,不报错。 见 --remote-silent 。 --remote-wait [+{cmd}] {file} ... 类似 --remote,但等待服务器结束文件编辑后再返回。 见 --remote-wait 。 --remote-wait-silent [+{cmd}] {file} ... 类似 --remote-wait,但无可用服务器时,不报错。 见 --remote-wait-silent 。 --servername {name} 指定目标 Vim 服务器名,或使当前 Vim 成为指定名称的服务器。 见 --servername 。 --remote-send {keys} 向 Vim 服务器发送键序列 {keys} 后退出。 见 --remote-send 。 --remote-expr {expr} 在作为服务器运行的另一 Vim 上执行表达式 {expr}。结果写到标准输 出。 见 --remote-expr 。 --serverlist 输出 Vim 服务器名列表并退出。 见 --serverlist 。 --socketid {id} --socketid {仅适用于 GTK+ GUI} 启用 GtkPlug 嵌入机制,使 gvim 在第三方窗 口内运行。详见 gui-gtk-socketid 。 --windowid {id} --windowid {仅适用于 Win32 GUI} 使用窗口 {id} 作为父窗口,使 gvim 在第三 方窗口内运行。详见 gui-w32-windowid 。 --echo-wid --echo-wid {仅适用于 GTK+ GUI} 在标准输出上显示窗口 ID。可用于使 gvim 在 kpart 窗口组件内运行。输出格式是: WID: 12345\n --display {display} --display {display} 上运行 Vim,连接到该 X 服务器,而非 $DISPLAY 指定 的 X 服务器。 {仅在 GTK+ 2 或 GTK+ 3 GUI 上支持本长形式参数} 另见短形式 -display{仅当编译时加入 +xterm_clipboard 特性才有效} --role {role} --role {仅适用于 GTK+ 2 GUI} 设置主窗口角色为 {role}。窗口管理器可依 靠此角色唯一标识窗口,用于恢复窗口位置等场景。登录恢复对话时会 自动传递本参数。见 gui-gnome-session 。 -P {parent-title} -P MDI E671 E672 {仅适用于 Win32} 指定父应用程序的窗口标题。Vim 会嵌入该应用作 为 MDI 子窗口运行 (如果可行)。 {parent-title} 必须完整出现在父应用窗口标题中。建议使用足够辨 识度的标题文本。 注意 目前实现仍不完善。无法适用于所有应用程序,且菜单无法正常 使用。 -nb -nb -nb={fname} -nb:{hostname}:{addr}:{password} 尝试连接 Netbeans,作为其内置编辑器服务端。第一种形式使用缺省 选项。第二种形式指定配置文件,从中读取连接信息。第三种形式指定 Netbeans 连接参数: 机器名、地址和密码信息。 netbeans-run {仅当编译时加入 +netbeans_intg 特性才有效;否则使用本参数会 直接使 Vim 退出} 可执行文件名为 "view" 时,Vim 会以可读模式启动。可通过创建从 "vim" 到 "view" 的硬链接或符号链接实现。等价命令是 "vim -R"。 可执行文件名为 "ex" 时,Vim 会以 "Ex" 模式启动。仅接受 ":" 命令。但搭配 "-v" 参数时,仍会以普通模式启动。 在 Unix 系统上,编译时加入 X11 GUI 支持时,还支持额外的 GUI 资源参数。见 gui-resources

2. Amiga 上的 Vim starting-amiga

从 Workbench 启动 Vim workbench

从 Workbench (工作台) 可通过双击 Vim 图标启动程序。启动时打开空白缓冲区。 也可通过 "Project" 图标启动 Vim 并编辑一到多个文件。该图标的 "Default Tool" (默认启动工具) 必须填写 Vim 可执行文件完整路径。".info" 文件应与文本文件同名。 双击图标后,Vim 启动后,会加载该文件到缓冲区 (如果存在),并成为当前文件。也可 按住 Shift 键单击多选图标,最后一个文件上双击,即可一次性打开多个文件。所有图 标的 "Default Tool" 必须统一。 通过工作台启动 Vim 时,仅能传递文件名,无法传递其他启动参数。 Vim 窗口 amiga-window

Vim 启动时默认在启动它的命令行窗口内运行。但通过 "run" 或 "runback" 命令或从工 作台启动时,Vim 会打开独立窗口。 技术细节: 为了打开一个新窗口,Vim 需要用到一点小技巧。一旦检测到自身不在标准命令 行窗口里运行,会在 "t:" 创建一个临时脚本文件。该脚本包含启动 Vim 的原 始命令,然后附加 "endcli" 命令。然后通过 "newcli" 命令执行该脚本 (这依 赖系统命令 "c:run" 和 "c:newcli")。生成的脚本文件会留存,直到系统重启 或用户手动删除为止。 :sh:! 命令都依赖该机制才能正确工作。但 Vim 以 -f 选项 (前台模式) 启动时,不使用以上方案。因为外部程序以 -f 选项 启动 Vim 时会阻塞等待 Vim 返回。脚本机制会导致调用程序无法确定 Vim 何 时退出。比如,mail 程序适合使用 -f 选项启动 Vim,并等待编辑会话结束。 因此,应用 -f 选项时,":sh" 和 ":!" 命令不可用。 Vim 会自动识别窗口大小,并响应窗口缩放操作。在 Amiga DOS 1.3 里,建议使用加速 字体工具 "FF" (fastfonts),提升界面重绘速度。

3. 运行 eVim evim-keys

eVim 以点击-输入式风格运行 Vim。这与原生 Vi 设计大相径庭。但有助于不常使用 Vim 难以熟悉其命令的用户。希望用户有机会了解学会使用普通模式命令后,编辑效率会大幅 提升。 在 eVim 中,以下选项会被修改为非缺省值: :set nocompatible 使用 Vim 增强特性 :set insertmode 缺省常驻插入模式 :set hidden 隐藏缓冲区保持加载状态 :set backup 生成备份文件 (VMS 除外) :set backspace=2 退格可删除所有内容 :set autoindent 自动缩进新行 :set history=50 保持 50 条 Ex 命令历史 :set ruler 显示光标位置 :set incsearch 输入搜索模式时实时预览所有匹配项 :set mouse=a 所有模式下启用鼠标支持 :set hlsearch 高亮当前搜索模式的所有匹配项 :set whichwrap+=<,>,[,] <Left><Right> 可跨行移动光标 :set guioptions-=a {仅适用于非 Unix} 关闭自动选择 键盘映射: <CTRL-Q> 退出,文件有未保存改动时会弹出 :confirm 提示 <Down> 移动光标时按屏幕行而非文件逻辑行 <Up> 同上 Q 在普通模式下: 同 gq ,执行文本排版,而非进入 Ex 模式 <BS> 在可视模式下: 删除选中内容 CTRL-X 在可视模式下: 剪切到剪贴板 <S-Del> 同上 CTRL-C 在可视模式下: 复制到剪贴板 <C-Insert> 同上 CTRL-V 粘贴到剪贴板 (可用于所有模式) <S-Insert> 同上 CTRL-Z 撤销操作 CTRL-Y 重做操作 <M-Space> 打开系统菜单 CTRL-A 全选文本 <C-Tab> 切换到下一个窗口,等价于 CTRL-W w <C-F4> 关闭当前窗口,等价于 CTRL-W c (译者注: 补遗 CTRL-F 仅适用于 GUI: 弹出搜索对话框 CTRL-H 仅适用于 GUI: 弹出搜索/替代对话框 ) 此外,该模式会: - 执行 `:behave mswin`,采用 Windows 标准的鼠标和选择行为 :behave - 启用语法高亮 - 开启文件类型检测。包括启用文件类型和缩进插件 - 将文本文件的 'textwidth' 设为 78 提示: 要进入普通模式并批量输入一串命令,可按下 CTRL-Li_CTRL-L 本 "简易模式" 无法中途关闭,只有退出 Vim 才能结束此模式。

4. 初始化 initialization startup

本节针对 Vim 的非 GUI 版本。GUI 启动的额外初始化步骤可见 gui-fork 。 启动时,Vim 会检查环境变量和设置文件,并完成参数初始化。具体处理顺序如下: 1. 设置 'shell''term' 选项 SHELL COMSPEC TERM 读取环境变量 SHELL (如有) 以设置 'shell' 选项。Win32 上,SHELL 未设置 时会改用 COMSPEC 环境变量。 读取环境变量 TERM (如有) 以设置 'term' 选项。后续启动 GUI 后,会重新覆 盖 'term' (见下第 8 步)。 2. 处理命令行参数 解析启动 Vim 时传入的命令行选项以及文件名。 可用 -V 参数显示或记录初始化执行步骤,用于调试启动异常。 执行所有 --cmd 参数。 为所有传入文件创建缓冲区 (暂不读取文件内容)。 3. 执行来自环境变量和/或配置文件的 Ex 命令 读入环境变量作为单行 Ex 命令执行时,可用 '|' 或 <NL> 拼接多条命令。 vimrc exrc 存放初始化命令的文件统称为 "vimrc" 文件。文件每行都会作为 Ex 命令执 行。有时也被称为 "exrc" 文件。两者格式一致。但是 Vi 一直称为 "exrc"。 而 "vimrc" 是 Vim 专属命名。另见 vimrc-intro 。 保存用户个人初始化配置文件的路径是: Unix $HOME/.vimrc、$HOME/.vim/vimrc 或 $XDG_CONFIG_HOME/vim/vimrc MS-Windows $HOME/_vimrc、$HOME/vimfiles/vimrc 或 $VIM/_vimrc Amiga s:.vimrc、home:.vimrc、home:vimfiles:vimrc 或 $VIM/.vimrc Haiku $HOME/config/settings/vim/vimrc 会按上述顺序依次查找目录,只加载首个成功找到的配置文件。 推 荐: 将所有 Vim 配置放到 $HOME/.vim 目录下 (MS-Windows 为 $HOME/vimfiles)。方便跨设备迁移配置。 Vim 启动时使用 "-u filename" 参数时,加载 "filename",但跳过本阶段后面 到第四步前的全部初始化步骤。这包括跳过 $MYVIMRC$MYVIMDIR 的设 置 (但修改 rtp 后,仍会设置 $MYVIMDIR )。 "vim -u NORC" 也跳过相同的初始化步骤,而且不加载任何配置文件。 "vim -u NONE" 同样如此,而且跳过插件的加载。 -u 通过 "-s" 参数以 Ex 模式启动 Vim 时,也跳过本阶段后面到第四步前的全部 初始化步骤。仅解析 "-u" 选项。 此阶段完成后, v:vim_did_init 变量设置为 1 (译者注: 包括使用 -u-s-ex 的情景)。 evim.vim a. 使用 evimeview 程序名启动 Vim、或使用 -y 参数时,加载 $VIMRUNTIME/evim.vim 脚本,进入简易模式。 system-vimrc b. 对 Unix、MS-Windows、VMS、Macintosh 和 Amiga,读入系统 vimrc 文件执行 初始化。 :version 命令可查看该文件路径。通常是 "$VIM/vimrc"。注意 是使用 'compatible' 模式加载该脚本,因为兼容模式自动关闭逻辑在其后发 生。如需关闭,可手动加上 `:set nocp` 命令。 对 Macintosh 平台,额外加载 $VIMRUNTIME/macmap.vim。 VIMINIT .vimrc _vimrc EXINIT .exrc _exrc $MYVIMRC $MYVIMDIR c. 在以下五个位置,依次搜索初始化配置。只加载首个成功找到的配置,忽略其 余位置。 $MYVIMRC 环境变量被设为首个找到的配置文件,但检查 VIMINIT 时如果该 环境变量已被设置,不会覆盖原值。 $MYVIMDIR 环境变量被设为用户 'rtp' 目录 (译者注: 具体实现是用 'rtp' 首个目录,但通常没有歧义),但不会验证该目录是否真实存在。 I 环境变量 VIMINIT (另见 compatible-default ) (*) $VIMINIT 值直接作为 Ex 命令行执行。 II 用户 vimrc 配置文件: "$HOME/.vimrc" (用于 Unix) (*) "$HOME/.vim/vimrc" (用于 Unix) (*) "$XDG_CONFIG_HOME/vim/vimrc" (用于 Unix) (*) "s:.vimrc" (用于 Amiga) (*) "home:.vimrc" (用于 Amiga) (*) "home:vimfiles:vimrc" (用于 Amiga) (*) "$VIM/.vimrc" (用于 Amiga) (*) "$HOME/_vimrc" (用于 Win32) (*) "$HOME/vimfiles/vimrc" (用于 Win32) (*) "$VIM/_vimrc" (用于 Win32) (*) "$HOME/config/settings/vim/vimrc" (用于 Haiku) (*) 注意: 对 Unix 和 Amiga,".vimrc" 不存在时,会再尝试 "_vimrc", 因为有可能使用 MS-DOS 兼容文件系统。而对 MS-Windows 则相反,先 检查 "_vimrc",再检查 ".vimrc",因为有可能使用长文件名环境。 注意: 对 Win32,先检查 "$HOME"。无 "_vimrc" 或 ".vimrc" 时,再 检索 "$VIM"。$VIM 未定义的处理见 $VIM 。 III 环境变量 EXINIT。 $EXINIT 值直接作为 Ex 命令行执行。 IV 用户 exrc 配置文件。 和用户 vimrc 处理方式类似,仅将 "vimrc" 替换为 "exrc"。同样会根据 系统选用 ".exrc" 和 "_exec" 两者之一。而且 (*) 备注不适用! V 缺省 vimrc 配置文件,$VIMRUNTIME/defaults.vim。 内置基础选项配置,并执行 `syntax on` 和 `filetype on` 命令,适配绝 大多数新手使用。见 defaults.vim 。 d. 打开 'exrc' 选项时 ( 并非 缺省),在当前目录搜索以下三个文件。只加载首 个成功找到的配置,忽略其余位置。 - 文件 ".vimrc" (用于 Unix、Amiga) (*) "_vimrc" (用于 Win32) (*) - 文件 "_vimrc" (用于 Unix、Amiga) (*) ".vimrc" (用于 Win32) (*) - 文件 ".exrc" (用于 Unix、Amiga) "_exrc" (用于 Win32) (*) 使用带此标记的文件或环境变量时,缺省关闭 'compatible'。见 compatible-default备注: 启用 mzscheme 接口时,其初始化发生在 vimrc 加载之后。因此,在后续 阶段再修改 'mzschemedll' 不会生效。 4. 加载插件脚本。 load-plugins 相当于执行以下命令: :runtime! plugin/**/*.vim 结果是,遍历 'runtimepath' 所有目录,搜索其中的 "plugin" 子目录,依次 (各目录内按文件名字母顺序) 加载其中所有以 ".vim" 结尾的脚本文件,也会 递归读取子目录内的所有脚本。 不过,这里会跳过 'runtimepath' 里以 "after" 结尾的目录,会在包加载后再 执行,见下。 以下几种情况不加载插件: - vimrc 文件中复位 'loadplugins' 选项。 - 使用了 --noplugin 命令行参数。 - 使用了 --clean 命令行参数。 - 使用了 "-u NONE" 命令行参数 -u 。 - 编译 Vim 时不带 +eval 特性。 注意 使用 "-c set noloadplugins" 命令行参数无效,因为该命令此阶段尚未 执行。需改用 "--cmd 'set noloadplugins'" 或 "--cmd 'set loadplugins'" --cmd 。 加载插件包。和上述步骤类似,但会在 'packpath' 的每项的 "start" 目录里 搜索插件。所有找到的插件目录会自动加入 'runtimepath',随后加载插件。见 packages 。 加载 "after" 目录插件,和上述步骤类似,但仅处理以 "after" 结尾的目录。 注意 插件包搜索会自动更新 'runtimepath',但不会新增以 "after" 结尾的目 录。 5. 设置 'shellpipe''shellredir' 'shellpipe''shellredir' 选项会根据 'shell' 选项值自动设置。如果之 前已经自行设置,则保持原值不变。 6. 使用 -n 命令行参数时,将 'updatecount' 设为零。 7. 启用二进制相关选项 使用 -b 命令行参数时,此时启用二进制编辑相关选项。 8. 进行 GUI 初始化 仅当以 "gvim" 名启动时,才会执行 GUI 初始化。见 gui-init 。 9. 读入 viminfo 文件 'viminfo' 选项非空时,读取 viminfo 文件。见 viminfo-file 。 10. 读入快速修复文件 使用 -q 命令行参数时,读取指定快速修复文件。如果失败,Vim 会退出。 11. 打开所有窗口 使用 -o-O 命令行参数时,打开所有窗口 (暂不渲染)。 使用 -p 命令行参数时,创建所有标签页 (暂不渲染)。 需要切换屏幕时,此时会启动界面重绘。 使用 -q 命令行参数时,跳到首个错误处。 加载所有窗口的缓冲区,不触发 BufAdd 自动命令。 12. 执行启动相关命令 使用 -t 命令行参数时,跳转到指定标签。 执行所有 -c+cmd 参数给出的命令。 开启 'insertmode' 选项时,进入插入模式。 复位启动标志位, has("vim_starting") 现在返回零。 v:vim_did_enter 变量被设为 1。 执行 VimEnter 自动命令。 $MYVIMRC 环境变量被设为首个找到的配置文件,但检查 VIMINIT 时如果该 环境变量已被设置,不会覆盖原值。 $MYVIMDIR 环境变量被设为用户 'rtp' 目录 (译者注: 具体实现是用 'rtp' 首个目录,但通常没有歧义),但不会验证该目录是否真实存在。 $MYVIMRC$MYGVIMRC 环境变量会被设为首个找到的 vimrc 和/或 gvimrc 文件, 而 $MYVIMDIR 会被设为用户 'rtp' 目录 (具体实现是 'runtimepath' 的首个目录)。 'rtp' 发生变更后, $MYVIMDIR 会同步更新。 备注: 这些环境变量会解析符号链接,但 'rtp' 不会。 初始化配置建议 标准安装: 创建 vimrc 文件,存放全局通用的选项和映射。放置在 3b. 步骤可检索的位置: ~/.vimrc (Unix) s:.vimrc (Amiga) $VIM\_vimrc (Win32) ~/config/settings/vim/vimrc (Haiku) 注意 创建 vimrc 文件会使 'compatible' 选项缺省关闭。见 compatible-default 。 本地安装: 仅对指定目录生效的所需命令可放在该目录下的本地 vimrc 文件,名为 ".vimrc" (Win32 则为 "_vimrc")。注意: 必须打开 'exrc' 选项才能使 Vim 访问这些特殊文件, 同时请阅读 trojan-horse 安全风险提示。 系统安装: 适用于多用户 Unix 系统管理员,用于统一所有用户缺省设置。将缺省选项和映射的设置 命令放在 :version 命令展示的系统 vimrc 路径下。 将 Vim 的当前状态保存到文件 实际使用中修改过选项值或自定义映射后,可将当前设置导出到 vimrc 文件,以备后 用。导出当前状态的详细步骤可见 save-settings避免和 Vi 用户的配置冲突 Vi 使用 EXINIT 环境变量以及 "~/.exrc" 配置文件。所以,要不想干扰 Vi 原有设置, 应使用 VIMINIT 环境变量以及 "vimrc" 配置文件。 Amiga 环境变量 Amiga 存在两类环境变量。使用 DOS 1.3 (或以后版本) setenv 命令定义的变量可被 Vim 识别。见 AmigaDos 1.3 官方手册。使用旧版 Manx (5.0 版本以前) Set 命令设置 的环境变量无法被 Vim 识别。 MS-Windows 行分隔符 在 MS-Windows 上,Vim 假定所有 vimrc 文件使用 <CR><NL> 分隔行。只用 <NL> 换行 的配置文件,出现类似 `:map xx yy^M` 的行时,行尾的 ^M 会被忽略,引发异常。 Vi 兼容缺省值 compatible-default Vim 启动时缺省开启 'compatible' 选项。因此初始化流程启动时会使用兼容模式。不过 一旦: - 找到用户 vimrc 文件,或者 - 找到当前目录下的 vimrc 文件,或者 - 设置了 "VIMINIT" 环境变量,或者 - 给出 "-N" 命令行参数,或者 - 给出 "--clean" 命令行参数,或者 - 加载了 defaults.vim 脚本,或者 - 找到 gvimrc 文件, 就会自动切换为 'nocompatible'注意 仅找到系统 vimrc 文件 不会 自动切换。 切换兼容模式会同步修改众多相关选项 (见 'compatible'),但仅限于尚未手动配置过的 选项。其效果等同于 Vim 启动时 'compatible' 就已设为该值。 下述情况下,既 复位 'compatible',也不加载 defaults.vim : - Vim 启动使用 -u 命令行参数时,尤其是 "-u NONE",或者 - 启动使用 -C 命令行参数时,或者 - 程序名以 "ex" 结尾时 (使 Vim 以 "ex" 名启动时与原版 "ex" 程序行为一致) 因为找到 .vimrc 文件而切换 'compatible' 时,要注意以下副作用: 映射会在读取时进 行解析。因此是否识别 "<CR>" 记法等会受当前兼容模式影响。如果映射依赖于特定兼容 模式状态,应先手动置位或复位该选项,再定义映射。 无 .vimrc 文件时的缺省值 defaults.vim E1187 Vim 正常启动且未找到用户 vimrc 文件时,会加载 $VIMRUNTIME/defaults.vim 脚本。 该脚本会关闭 'compatible'、打开语法高亮并提供更多新手友好设置。详见该脚本。 备注: 该机制从 Vim 8.0 开始提供,不是 Vim 7.4 原版 (准确来说由 7.4.2111 补丁版 本引入)。 该脚本的目的是方便新 Vim 用户。自行创建 .vimrc 时,建议在顶部附近加入以下行: unlet! skip_defaults_vim source $VIMRUNTIME/defaults.vim 确保 Vim 行为和自建 .vimrc 前保持一致。 替代方法之一是将 $VIMRUNTIME/vimrc_example 复制到用户 .vimrc。替代方法之二是将 defaults.vim 复制到用户 .vimrc,并自行修改 (缺点是 Vim 更新该脚本时,不会自动 同步官方更动)。 如果不喜欢部分缺省设置,仍可先执行 defaults.vim,再单独回退个别设置。 defaults.vim 脚本内已附加各配置项的回退写法提示。 skip_defaults_vim 如果使用系统 vimrc 且不希望 defaults.vim 覆盖全局设置,可在系统 vimrc 里置位 "skip_defaults_vim" 变量。已置位该变量而又想在用户 .vimrc 里加载 defaults.vim 时,可在用户 .vimrc 里先执行 `unlet skip_defaults_vim`,如上例所示。 xdg-base-dir $XDG_CONFIG_HOME XDG 基础目录规范 XDG 基础目录规范为应用程序配置文件定义统一存放位置。主要目的是避免各类文件都堆 积在用户主目录的老式混乱做法。线上规范文本可见 https://specifications.freedesktop.org/basedir-spec/latest/ 用户可通过环境变量定制标准配置目录位置,变量未提供时,规范也定义了缺省值。 下表为常用目录 (非完整清单): 环境变量 缺省位置 描述 $XDG_CACHE_HOME $HOME/.cache 临时数据文件 $XDG_CONFIG_HOME $HOME/.config 配置文件 $XDG_DATA_HOME $HOME/.local/share 永久数据文件 $XDG_STATE_HOME $HOME/.local/state 状态数据文件 xdg.vim Vim 自身仅使用 $XDG_CONFIG_HOME 目录。脚本 "$VIMRUNTIME/xdg.vim" 提供对其余 XDG 规范目录的支持。 注意: 仅当 $XDG_CONFIG_HOME/vim 目录 (或其缺省备用路径) 存在时,xdg.vim 才会生 效。该脚本缺省仅设置 'viminfofile' 选项。其余相关配置均被注释禁用,启用方法请 查看脚本内的详细说明。 xdg-vimrc Unix 系统上,Vim 会从 $XDG_CONFIG_HOME/vim/vimrc 查找配置 (见 vimrc ),但 仅当 $HOME$HOME/.vim 下找不到任何初始化文件时才会查找 XDG 目录 (确保后 向兼容)。如果要迁移配置文件到 $XDG_CONFIG_HOME/vim/ ,请务必移走 ~/.vimrc~/.vim/vimrc 文件。 xdg-runtime 使用 xdg-vimrc 时,'runtimepath''packpath' 会自动适配 xdg-base-dir : "$XDG_CONFIG_HOME/vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after, $XDG_CONFIG_HOME/vim/after" 防范特洛伊木马 trojan-horse 读取当前目录下的 "vimrc" 或 "exrc" 文件时,可置位 'secure' 选项,出于安全限制 禁用部分命令。执行标签文件里的命令时,总使用该安全机制。否则,可能会不慎执行他 人编写内含恶意指令的 vimrc 或标签文件。禁用命令包括外壳调用命令、文件保存命 令、以及自动命令。此外 :map 命令会回显输出,方便查看被绑定的快捷键。 要 Vim 执行本地 vimrc 文件里的所有命令,可通过 EXINIT、VIMINIT 环境变 量或在全局 "exec"、"vimrc" 文件里关闭 'secure' 选项。显然,这无法在当前目录下 的 "vimrc" 或 "exrc" 里完成。 在 Unix 系统上,仅当用户不是该 vimrc 文件的拥有者时,才会触发该安全机 制。警告: 解压包含 vimrc 或 exrc 的归档包时,文件拥有者会设为用户本人,安全保 护会失效。在该目录下启动 Vim 时,请务必检查是否有本地 vimrc 文件,也可直接复位 'exrc' 选项。部分 Unix 系统允许普通用户执行 "chown" 更换文件拥有者。他人可编写 恶意 vimrc,再将拥有者改为用户本人。务必警惕! 使用标签搜索命令时,标签文件内容行的末尾部分会作为搜索命令执行,此时总 是使用安全机制。规则与当前目录下的 vimrc/exrc 里的命令执行方式一致。 Vim 启动缓慢排查 slow-start 如果 Vim 启动时间过长,可用 --startuptime 启动参数排查耗时操作。可能原因有: - Unix 版本编译时加入 GUI 和/或 X11 支持 (查看 :version 输出是否包含 "+GUI" 和 "+X11") 时,可能需加载共享库并连接 X11 服务器。一个解决方案是重新编译,禁 用 GUI 和 X11。这也有助于减小程序体积。 在终端运行时,可用 -X 命令行参数跳过 X 服务器连接。 - 打开 "viminfo" 功能时,viminfo 文件的加载会拖慢启动速度。可临时屏蔽 viminfo 功能 (通过命令行参数 "-i NONE" -i ) 进行验证。解决方案是减少寄存器存贮行数: `:set viminfo='20,<50,s10`。见 viminfo-file简介消息 :intro Vim 不带文件名启动时,会显示一段介绍文字 (帮助不了解 Vim 功能的新用户)。任意界 面重绘操作都会清空该提示。要再次看到这段文字,可用 :intro 命令 (如果空间不 够,只会显示部分内容)。启动时要跳过介绍文字,可在 'shortmess' 里加上 'I' 标志 位。 info-message --help--version 参数会使 Vim 显示对应消息后退出。该消息缺省发送到标准 输出。可重定向保存到文件: vim --help >file 在 Vim 内部,可用: :read !vim --help 使用 gvim 时,会判断是否从桌面启动,从而无法通过终端显示消息。具体方法是检测标 准输出 (stdout) 和标准错误 (stderr) 都不属于终端 (tty)。此时上例里 :read 命 令不能工作。可通过将 'shellredir' 设为 ">" 而非缺省的 ">&" 进行修正: :set shellredir=> :read !gvim --help 该方案仍然不适用于 gvim 完全不使用标准输出的系统环境。

5. $VIM 和 $VIMRUNTIME

$VIM 环境变量 "$VIM" 用于定位 Vim 的各种用户文件,包括用户启动脚本 ".vimrc" (译者注: 原文如此,逻辑上也无不妥,但该环境变量主要目的是 Vim 的安装目录)。具 体位置因系统而异,见 startup 。 为避免每位用户都要设置 $VIM 环境变量,Vim 会按以下顺序确定 $VIM 值: 1. 优先读取已定义的 $VIM 环境变量值。可用于强制 Vim 在指定目录下寻找支持文件。 示例: setenv VIM /home/paul/vim 2. 使用 'helpfile' 路径,但如果其中也包含其他环境变量 (缺省 "$VIMRUNTIME/doc/help.txt",就会遇到先有鸡还是先有蛋的问题),则不采用。随后 去掉文件名部分 ("help.txt" 或其他文件名)。再依次删除以下的末尾目录名: "doc"、"runtime" 和 "vim{version}" (如 "vim82")。 3. 对 Win32,Vim 会试图提取可执行文件目录名。以 "/src" 结尾时,也截去该段。此 逻辑适用于解压 .zip 压缩包,并调整搜索路径以找到 vim 可执行文件的情况。依次 删除以下的末尾目录名: "runtime" 和 "vim{version}" (如 "vim82")。 4. 对 Unix,采用编译时预设的安装目录 (见 :version 输出结果 "$VIM 预设值")。 Vim 仅进行以上操作一次,并据此设置 $VIM 环境变量。此后要修改该值,可用 :let 命令: :let $VIM = "/home/paul/vim/" $VIMRUNTIME 环境变量 "$VIMRUNTIME" 用于定位运行时支持文件,包含在线帮助文档和语法高亮脚本 等。例如,主帮助文档缺省路径是 "$VIMRUNTIME/doc/help.txt"。 通常无需自行设置 $VIMRUNTIME,Vim 自动按以下顺序解析: 1. 优先读取已定义的 $VIMRUNTIME 环境变量值,可用于指定特殊的运行时文件路径。 2. 目录 "$VIM/vim{version}" 存在时,使用该路径。{version} 为 Vim 不含 '-' 或 '.' 的版本号。例如: "$VIM/vim82"。这是 $VIMRUNTIME 常规值。 3. 目录 "$VIM/runtime" 存在时,使用该路径。 4. 直接使用 $VIM 值。用于后向兼容老旧版本。 5. 'helpfile' 选项已设置且不含 '$' 符号时,使用该路径,去掉末尾 "doc/help.txt" 部分。 对 Unix,编译时给出 $VIMRUNTIME 预设缺省值时 (见 :version 输出结果),跳过第 2、3 和 4 步,第五步判断结束后直接使用编译预设值。这意味着编译缺省值优先于 $VIM 值。可用于 $VIM 为 "/etc" 而运行时文件位于 "/usr/share/vim/vim82" 的场 景。 Vim 仅进行以上操作一次,并据此设置 $VIMRUNTIME 环境变量。此后要修改该值,可用 :let 命令: :let $VIMRUNTIME = "/home/piet/vim/vim82" 需要在外壳里 (如对 Vim 帮助文档进行 grep 的脚本) 获取 $VIMRUNTIME 值 ,可用: VIMRUNTIME=$(vim -es '+put=$VIMRUNTIME|print|quit!') 不可将 $VIMRUNTIME 设为空值,会导致多项功能失效。

6. 挂起 suspend

iconize iconise CTRL-Z v_CTRL-Z CTRL-Z 挂起 Vim,同 ":stop"。 适用于普通和可视模式。在插入和命令行模式下,CTRL-Z 会 作为普通字符插入。在可视模式下,Vim 会在挂起前先回到普 通模式。 注意: 如果 CTRL-Z 触发撤销操作而非挂起,见 mswin.vim 。 :sus[pend][!] 或 :sus :suspend :st :stop :st[op][!] 挂起 Vim。 '!' 省略且置位 'autowrite' 时,自动保存每个修改过且带 文件名的缓冲区。否则,也就是给出 '!' 或 'autowrite' 未 置位时,修改过的缓冲区不会自动保存。后续切记要将 Vim 带回前台! 在 GUI 上,挂起是通过使 Vim 图标化实现的。在 MS-Windows 上,gvim 会被最小化。 多数 Unix 系统上,仅在普通和可视模式下 (见 vim-modes ) CTRL-Z 会挂起 Vim。Vim 返回前台后会恢复工作。在其他系统上,CTRL-Z 会启动新的外壳。相当于 :sh 命令。 外壳退出后会回到 Vim。 在 X 窗口系统环境上,Vim 挂起时不再拥有选择区。此时无法向其他应用粘贴文本 (因 为 Vim 进程进入休眠,读取选区内容会导致外部程序卡死)。

7. 退出 exiting

Vim 提供多种退出方式: - 用 :quit 关闭最后一个窗口。仅当缓冲区没有改动时有效。 - 用 :quit! 强制关闭最后一个窗口。即使缓冲区有改动也可退出。 - 用 :qall 关闭所有窗口。仅当缓冲区没有改动时有效。 - 用 :qall! 强制关闭所有窗口。即使缓冲区有改动也可退出。 - 用 :cquit 异常退出。即使缓冲区有改动也可退出。 如果使用 :cquit 或运行时出现报错,Vim 退出码为 1。可用 :silent! 或异常捕获 异常 :catch 屏蔽报错。

8. 保存设置 save-settings

用户一般会手动编辑 vimrc 文件。这能提供最大程度的灵活性。Vim 也提供内置命令自 动生成 vimrc 文件。生成文件可被直接使用,也可将部分内容通过复制/粘贴加入用户 vimrc。 :mk :mkexrc :mk[exrc] [file] 将当前键盘映射和已修改的选项写入 [file] (缺省是当前目 录下的 ".exrc"),文件已存在时不覆盖。 :mk[exrc]! [file] 强制将当前键盘映射和已修改的选项写入 [file] (缺省是当 前目录下的 ".exrc")。 :mkv :mkvi :mkvimrc :mkv[imrc][!] [file] 类似 ":mkexrc",但缺省是当前目录下的 ".vimrc"。同时也 写入 :version 版本信息。 这些命令向指定文件写入 ":map" 和 ":set" 命令,执行后可还原当前所有键盘映射和选 项值。不含以下选项 'columns''endofline''fileformat''key''lines''modified''scroll''term''textmode''ttyfast''ttymouse',因为它们依 赖终端和特定文件。注意 选项 'binary''paste''readonly' 一并包含,但这未必 符合用户预期。 映射包含特殊键时,会暂时将 'cpoptions' 选项设为 Vim 缺省值,防止映射被错误解 析。这会使配置文件无法兼容 Vi,但能确保在不同终端环境下正常加载。 只保存全局映射,缓冲区局部映射不会导出。 典型流程是从缺省 ".vimrc" 文件开始,通过 ":map" 和 ":set" 命令调整配置后导出新 配置。示例: 先用命令 ":source ~piet/.vimrc.Cprogs" 读入缺省 ".vimrc" 文件,修 改设置,然后用命令 ":mkvimrc!" 导出设置到当前目录。要将该文件设为用户 .vimrc, 可将该文件移动到主目录 (Unix),s: (Amiga) 或 $VIM 目录 (MS-Windows)。 也可用自动命令 autocommand 和/或模式行 modeline 等其他机制进行设置修改。 vimrc-option-example 如果仅需向 vimrc 增加一条选项,可用以下步骤: 1. 用 Vim 编辑 vimrc 文件。 2. 反复测试目标选项值,直到满意为止。比如更换 'guifont' 不同字体值。 3. 追加配置行,通过表达式寄存器 '=' 输入当前选项值。'guifont' 选项示例: o:set guifont=<C-R>=&guifont<CR><Esc> [<C-R>CTRL-R<CR> 是回车,<Esc> 是 Esc 键] 特殊字符 (尤其是空格) 需要转义。 注意 创建 .vimrc 文件本身会影响 'compatible' 选项,并有一系列副作用。见 'compatible'。因为影响很大, :mkvimrc:mkexrc:mksession 会首先写入开 关 'compatible' 选项的命令。

9. 视图和会话 views-sessions

相关介绍请参考用户手册 21.421.5 两节。 View view-file 视图是作用于单个窗口的一组设置集合。保存视图后,稍后恢复时会确保文本以相同方式 显示。窗口内的所有选项和映射也一并恢复,继续以视图保存时的状态进行编辑。 Session session-file 会话保存所有窗口的视图,外加全局设置。保存会话后,稍后恢复时会确保窗口以相同布 局显示。可以借助会话在多个项目之间快速切换,切换时自动载入上次处理该项目时打开 的所有文件。 视图和会话是 viminfo 文件的有益补充,后者用于统一保存所有视图和会话都使用的相 关信息 viminfo-file 。 可通过 -S 参数加载之前保存的视图或会话,快速启动编辑: vim -S Session.vim {仅当编译时加入 +mksession 特性才有效} :mks :mksession :mks[ession][!] [file] 生成可用于恢复当前的编辑会话的 Vim 脚本。 给出 [!] 时,会强制覆盖已有文件。省略 [file] 时,默认 使用 "Session.vim"。 ":mksession" 输出结果类似 :mkvimrc ,但额外写入更多命令。具体写入内容取决于 'sessionoptions' 选项值。用 :source 命令执行时,会执行以下逻辑: 1. 'sessionoptions' 含 "options" 时,恢复全局映射和选项,不包括脚本局部映射。 2. 'sessionoptions' 含 "globals" 时,恢复符合命名规则 (首字母大写,且至少包含 一个小写字母) 的全局变量。 3. 当前标签页里仅保留当前窗口,关闭其他窗口;仅保留当前标签页,关闭其他标签页 (当前加载的缓冲区会被卸载,置位 'hidden' 或以其他方式指定时,部分缓冲区会被 隐藏);当前缓冲区为无名空缓冲区时,会被真正删除。 4. 'sessionoptions' 含 "curdir" 时,恢复工作目录。含 "sesdir" 时,则切换到会话 文件所在目录。两者不能同时存在。 5. 'sessionoptions' 含 "winpos" 时,恢复 GUI Vim 主窗口屏幕位置。 6. 'sessionoptions' 含 "resize" 时,恢复屏幕大小。 7. 恢复缓冲区列表以及各文件最后光标位置。'sessionoptions' 含 "buffers" 时,恢 复包括已隐藏和未加载在内的所有缓冲区。否则仅恢复在窗口中打开的缓冲区。 8. 恢复所有窗口及已有布局。'sessionoptions' 含 "help" 时,也恢复帮助窗口。含 "blank" 时,也恢复无名缓冲区窗口。含 "winsize" 且未忽略 (帮助/空白) 窗口 时,按屏幕比例还原窗口大小。否则,会为窗口自动分配合适大小。 9. 恢复各个窗口的对应视图,类似 :mkview ,但相关配置采用 'sessionoptions' 而非 'viewoptions'。 10. 存在和会话文件同名,但以 "x.vim" (x 代表 "附加" eXtra) 结尾的文件时,自动 执行该脚本。这脚本可用于为指定会话追加额外设置及其他逻辑,在 GUI 上创建专 属菜单便是一例。 恢复会话后,内部变量 v:this_session 可获取当前会话完整路径 this_session-variable 。用于映射的示例: :nmap <F2> :wa<Bar>exe "mksession! " .. v:this_session<CR>:so ~/sessions/ 该映射会保存当前会话,并预填命令行用于加载其他会话。 会话缺省包含所有标签页,除非 'sessionoptions' 中移除了 "tabpages"。 tab-page 加载/执行会话文件前,会触发 SessionLoadPre 自动命令事件,加载/执行完成后,会 触发 SessionLoadPost 自动命令事件。 SessionLoad-variable 会话文件载入期间,全局变量 g:SessionLoad 会被设为 1。插件可通过此变量推迟部 分初始化逻辑,直到 SessionLoadPost 事件触发时才执行。 :mkvie :mkview :mkvie[w][!] [file] 生成可用于恢复当前窗口内容的 Vim 脚本。 给出 [!] 时,会强制覆盖已有文件。 省略 [file] 或传入从 1 到 9 的数值时,会根据缓冲区文件 名和数值自动生成文件名,路径名会加上 'viewdir' 前缀, 'viewdir' 路径末尾部分尚不存在时,会先自动创建该目录。 例如 'viewdir' 为 "$VIM/vimfiles/view" 时,会在 "$VIM/vimfiles" 下创建 "view" 目录。使用自动命名时,总 会强制覆盖已有文件。要加载该视图,可用 :loadview[file] 给出文件路径时 (此时不考虑 'viewdir'),生成脚本 会附加打开该文件的编辑命令。 ":mkview" 输出脚本包含以下内容: 1. 当前窗口使用的参数列表。如果使用的是全局参数列表,则恢复为当前的全局参数列 表。同时恢复参数列表中的索引位置。 2. 窗口正在编辑的文件。没有关联文件时,该窗口恢复时会被清空。 3. 'viewoptions' 含 "options" 或 "localoptions" 时,恢复映射、缩写和窗口局部选 项。缺省只恢复缓冲区和窗口的局部选项值。当视图作为会话的一部分被保存且 'sessionoptions' 含 "options" 时,也一并保存局部选项的全局值。 4. 'viewoptions' 含 "folds" 时,恢复手动折叠、手动展开和关闭的折叠状态。 5. 文件内滚动位置及光标位置。有已关闭折叠时,效果不甚理想。 6. 和全局工作目录不同且 'viewoptions' 含 "curdir" 时,恢复窗口局部工作目录。 注意 视图和会话并不完善: - 并不恢复全部信息。例如自定义函数、自动命令和 ":syntax on" 语法高亮配置等均不 保存。寄存器内容、命令行历史则存于 viminfo 而非会话或视图。 - 全局选项仅当不同于缺省值时才会保存。加载会话时,如果全局选项当前值不同于缺省 值,不会恢复为缺省值。但局部选项会恢复其缺省值。 - 已有映射会被静默覆盖。已有映射可能会因产生歧义触发错误。 - 如果保存视图后修改了文件内容,恢复视图保存的手动折叠和手动展开/关闭的折叠状 态会引发错乱。 - Vim 脚本效率不高,但仍远胜于用户手动逐条输入命令。 :lo :loadview :lo[adview] [nr] 加载为当前文件生成的自动命名视图。省略 [nr] 时,加载 :mkview 保存的视图。给出 [nr] 时,加载 `:mkview [nr]` 保存的视图。 :mkview:loadview 组合可为单个文件最多保存十套独立视图。文件统一存放于 'viewdir' 选项指定目录。通过原文件名查找视图文件。如果文件重命名或通过 (符号) 链接访问,将无法匹配并读取对应视图文件。 建议定期清理 'viewdir' 目录。 自动保存和恢复 *.c 文件视图的示例: au BufWinLeave *.c mkview au BufWinEnter *.c silent loadview

10. viminfo 文件 viminfo viminfo-file E136

E575 E576 E577 退出 Vim 后再启动时,很多操作记录通常会丢失。可用 viminfo 文件持久保存这类信 息,继续上次未完成的编辑工作。 相关介绍请参考用户手册 21.3 一节。 viminfo 文件可用于保存: - 命令行历史。 - 搜索字符串历史。 - 输入行历史。 - 非空寄存器内容。 - 多个文件的位置标记。 - 文件标记,记录文件内的光标位置。 - 最近搜索/替代模式 (用于 n& )。 - 缓冲区列表。 - 全局变量。 {仅当编译时加入 +viminfo 特性时才有效} 与此同时,也可使用会话文件。两者差别是,viminfo 文件不和任何工程绑定,全局通常 只保存一份。而会话文件用于保存特定编辑会话的状态。可同时保存多份会话文件,每个 工程单独保存一份。viminfo 和会话文件可搭配使用,在 Vim 启动后有效恢复完整的编 辑环境。 session-file viminfo-security Vim 生成的 viminfo 文件为纯文本格式,其中 ListDictionaryTuple 可能会 以 Vim 表达式形式保存。处理 viminfo 文件且 'viminfo' 选项含 "!" 时,这些表达式 会被解析执行。 'viminfo' 选项缺省值不含 "!",因此缺省不会解析执行任何表达式。 直接打开 (如通过 :edit ) viminfo 文件没有安全风险,Vim 只会展示文件内容。风险 源于通过 viminfo 机制自动加载不可信文件,以下场景会触发此机制: - 对该文件执行 :rviminfo 命令 - 设置 'viminfofile' 指向该文件 - 将该文件放置在 Vim 默认读取 viminfo 的标准路径,见 viminfo-file-name 在以上任一场景下,如果文件未必可信,切勿在 'viminfo' 选项中加入 "!"。 viminfo-read 启动 Vim 且 'viminfo' 选项非空时,自动读取 viminfo 文件内容并载入环境。填充 v:oldfiles 变量。启动时不立即导入文件内位置标记,但导入文件标记。启动时设置 'viminfo' 选项的方法可见 initialization viminfo-write Vim 退出且 'viminfo' 非空时,相关信息会被保存到 viminfo 文件 (该文件存在时,实 际会和已有内容合并)。'viminfo' 选项控制应保存信息类型、以及各类记录保存条数上 限 (见 'viminfo')。 合并有两种方式。多数项目在当前 Vim 会话中被修改或重新设置时会保存新值,而未改 动的项目会沿用原有 viminfo 中的旧值。示例: - Vim 会话 A 读入 viminfo,其中包含变量 START。 - Vim 会话 B 也读入同一份 viminfo - Vim 会话 A 设置变量 AAA 和 BOTH 后退出 - Vim 会话 B 设置变量 BBB 和 BOTH 后退出 最终 viminfo 包含的内容是: START - 会话 A 或 B 均未改变 viminfo 的原有内容 AAA - 由会话 A 定义,会话 B 保留 BBB - 由会话 B 定义 BOTH - 会话 B 修改并覆盖了会话 A 的值,A 原值丢失 viminfo-timestamp 另一类项目会附带时间戳,仅保留最后修改的版本。不受 Vim 会话退出先后顺序影响, 总是保存最新项目 (可有多项)。这类项目包括: - 命令行历史。 - 搜索字符串历史。 - 输入行历史。 - 非空寄存器内容。 - 跳跃表。 - 文件标记。 时间戳功能在 Vim 8.0 之前被引入。从 7.4.1131 开始的旧版 Vim 版本保存项目时会记 录时间戳,但不实际使用。因此,混用新旧版本 Vim 时,仍会正确保留最新数据。 Unix 上的 注意 事项: - 因为 viminfo 文件内可能包含敏感文本和命令,该文件权限会自动设为禁止其他用户 读取。 - 需要和其他用户共享 viminfo 文件 (如 "su" 切换其他用户) 时,可手动赋予用户组 甚至所有人写入权限。Vim 覆盖该 viminfo 文件时会保留文件权限。请谨慎使用,不 要随意开放 viminfo 文件权限给任意用户。 - Vim 不会覆盖当前 "真实" 用户无法写入的 viminfo 文件。例如用 "su" 成为 root, 但 $HOME 仍指向普通用户主目录时,此保护可防止生成由 root 拥有,而普通用户无 法读取的 viminfo 文件。 - 为规避安全漏洞,viminfo 文件不允许为符号链接。 位置标记按文件独立存贮。'viminfo' 非空时,打开文件时会从 viminfo 文件读取该文 件专属的位置标记。注意: 位置标记仅当退出 Vim 时才会保存。但因为当前编辑会话中 所有打开的文件都会记住位置标记 (使用 :bdel 时除外),这不会引发问题。要在 :bdel 放弃文件前保存位置标记,可用 :wv 命令。不会保存 '['] 位置标 记,但 '"' 位置标记会。因为后者可用于跳转到上次关闭文件时的光标位置。文件名以 'viminfo' 的 "r" 标志位 ( viminfo-r ) 指定的任一字符串开头时,不保存任何该文件 的位置标记。可用于避免保存可移动介质文件的位置标记 (MS-Windows 上可用 "ra:,rb:",Amiga 上则是 "rdf0:,rdf1:,rdf2:")。 v:oldfiles 变量会填入所有在 viminfo 文件中存有位置标记的文件名。 viminfo-file-marks 大写位置标记 ('A 到 'Z) 在写入 viminfo 文件时会被自动保存。编号标记 ('0 到 '9) 会有特殊处理。写入 viminfo 文件 (退出 Vim 或执行 :wviminfo 命令) 时,当前光 标位置及所在文件会存入 '0,原有 '0 移到 '1,'1 到 '2,依此类推。逻辑类似删除寄 存器 "1 到 "9。当前光标位置已在 '0 到 '9 标记出现时,该位置会被移到 '0,避免重 复记录。结果是,用 '0 命令总可跳转回上次退出 Vim 时光标所在的文件和行号。要 启动时一键实现该逻辑,可用: vim -c "normal '0" 在 C shell 系列外壳里,可为此建立别名: alias lvim vim -c '"'normal "'"0'"' 在 Bash 兼容外壳里,则可用: alias lvim='vim -c "normal '\''0"' 可通过 'viminfo' 的 "r" 标志位指定不保存位置标记的文件路径 viminfo-r 。 VIMINFO 文 件 名 viminfo-file-name - 在 Unix 上,viminfo 文件缺省路径为 "$HOME/.viminfo"。Amiga 为 "s:.viminfo"。 在 Win32 上,缺省为 "$HOME\_viminfo",$HOME 未设置时改用 "$VIM\_viminfo", $VIM 也未设置时,最后使用 "c:\_viminfo"。 - 'viminfo' 选项里的 'n' 标志位可自定义 viminfo 文件路径 viminfo-n 。 - Vim 的 -i 命令行参数可用于自定义文件名。传入 "NONE" (全大写) 时,不读写任 何 viminfo 文件。下面列出的手动读写命令也不会! - 'viminfofile' 选项和 "-i" 参数功能相同。事实上,"-i" 参数传入值会存入 'viminfofile' 选项。 - 下面列出的手动读写命令指定的新文件名会覆盖缺省文件名和 'viminfo' 或 "-i" 指 定的原有文件名 (NONE 除外)。 字 符 编 码 viminfo-encoding viminfo 文件文本使用 'encoding' 选项指定的编码。通常总是使用相同的 'encoding' 值,因此不会有问题。不过,如果读取 viminfo 文件时使用的 'encoding' 与写入时不 同,部分文本 (非 ASCII 字符) 可能会失效。如果无法接受这种情况,可在 'viminfo' 选项里加上 'c' 标志位: :set viminfo+=c 此后,Vim 会尝试将 viminfo 文件从写入时使用的 'encoding' 编码转换为当前的 'encoding'。这需要 Vim 编译时加上 +iconv 特性。文件名不会进行转换。 手 动 读 写 viminfo-read-write 两条命令可用于手动读写 viminfo 文件。可用于在两个运行中的 Vim 实例间交换寄存器 值: 先在其中一个实例中输入 :wv ,然后在另一个实例中用 :rv注意 目标寄存器 已有内容时,需要 :rv! 强制覆盖。但 注意 此操作会全盘覆盖包括命令行历史在内的 所有记录。 viminfo 文件本身也可手动编辑,但建议基于现有 viminfo 文件开始修改,确保格式正 确。熟悉后,应当很容易理解相关格式。可创建独立 viminfo (如 "~/.my_viminfo"), 包含每次启动 Vim 时的所需设置。例如用于预填充寄存器,或预设命令行历史。要加载 该文件,可在 .vimrc 文件里加入 :rviminfo! ~/.my_viminfo 甚至可通过 :autocmd 命令,根据文件名针对不同文件类型 (如 C 源码) 加载专属 viminfo。 viminfo-errors 如果 Vim 在读入 viminfo 文件时检测到错误,后续不会覆盖该文件。如果报错超过 10 次,直接停止解析,以防给错 viminfo 文件名时意外造成文件损坏。例如本来想输入 "vim -R file" 但实际误写为 "vim -i file" (这是真实案例)。如果确实需要覆盖存在 错误的 viminfo 文件,或者修正错误,或者在 Vim 运行时,先删除该文件,会话内大部 分信息会重新生成写入。 :rv :rviminfo E195 :rv[iminfo][!] [file] 读取 viminfo 文件 [file] (缺省: viminfo-file-name )。 给出 [!] 时,覆盖当前已存在的寄存器、位置标记、 v:oldfiles 等信息。 如果 'viminfofile' 为 "NONE",执行本命令会报错 E195。 :wv :wviminfo E137 E138 E574 E886 E929 :wv[iminfo][!] [file] 写入 viminfo 文件 [file] (缺省: viminfo-file_name )。 如果 'viminfofile' 为 "NONE",本命令无任何效果。 先读入原有文件内容,新旧数据合并后写回。给出 [!] 时, 不读取原有数据,直接写入当前内存数据。'viminfo' 为空 时,默认写入不超过 100 个文件的位置标记。 如果出现报错 "E929: 太多 viminfo 临时文件",先清理残留 临时文件 (如 ~/.viminf*),然后确认对 .viminfo 文件所在 目录拥有写入权限。 :ol :oldfiles :ol[dfiles] 列出 viminfo 文件中存储位置标记的所有文件。该列表在启 动时读入,仅执行 :rviminfo! 后才会更新。对应变量为 v:oldfiles 。 列表序号可配合 c_#< 使用。 支持 :filter 过滤输出,例如: filter /\.vim/ oldfiles 过滤匹配文件名。 {仅当编译时加入 +eval 特性才有效} :bro[wse] ol[dfiles][!] 像 :oldfiles 那样列出文件名,然后提示输入序号。序号 合法时,打开对应文件。 出现 press-enter 提示时按 "q" 键,仍会出现输入序号的 提示。 给出 [!] 时,会放弃已修改的缓冲区。 abandon {仅当编译时不使用 tiny 特性包才可用} vim:tw=78:ts=8:noet:ft=help:norl: