various

various.txt 适用于 Vim 9.2 版本。 最近更新: 2026年10月 VIM 参考手册 by Bram Moolenaar 译者: Willis 各类其他命令 various 1. 各类命令 various-cmds 2. 将 Vim 用作 less 或 more less

1. 各类命令 various-cmds

CTRL-L CTRL-L 清屏并重绘屏幕。重绘可能延后,等预读入输入处理完成后再 执行。 :redr :redraw :redr[aw][!] 立即重绘屏幕。带 [!] 时,重绘前先清屏。 可用于在脚本或函数中 (置位 'lazyredraw' 时,也可用于映 射) 重绘屏幕。 :redraws :redrawstatus :redraws[tatus][!] 重绘当前窗口状态行。带 [!] 时,重绘所有窗口的状态行。 'statusline' 包含不会自动更新的项目时有用。 最后一个窗口如果没有状态行,改为重绘标尺, 'rulerformat' 包含非自动更新项时有用。 命令行编辑期间,重绘会延后。 :redrawt :redrawtabline :redrawt[abline] 重绘标签栏。'tabline' 包含不会自动更新的项目时有用。 E1547 :redrawtabp :redrawtabpanel :redrawtabp[anel] 重绘标签页面板。'tabpanel' 包含不会自动更新的项目时有 用。 N<Del> <Del> 输入数值时: 删除最后一位。注意: 要用 <BS> 实现此功能, 可在 .vimrc 里加入: :map CTRL-V <BS> CTRL-V <Del> 如果 <Del> 键行为不符预期,可见 :fixdel 。 :as[cii] 或 ga :as :ascii ga 输出光标下字符的 ASCII 值,分别以十进制、十六进制和八 进制显示。 助记: 得到 (Get) Ascii 值。 光标下字符为 'R' 时的示例: <R> 82, 十六进制 52, 八进制 122 不是标准 ASCII 字符,但 'isprint' 选项判定可显示时,会 同时展示不可显示形式。 对于取值大于 127 的字符: <<81>> 129, 十六进制 0081, 八进制 201 <þ> 254, 十六进制 00fe, 八进制 376 (其中的 <þ> 是特殊字符) 文件内的 <Nul> 字符内部存为 <NL>,但显示为: <^@> 0, 十六进制 00, 八进制 000 包含组合字符时,一并显示。不受 'maxcombine' 值影响。 字符可用二合字母插入时,同时给出对应的二合字符: <ö> 246, 十六进制 00f6, 八进制 366, 二合字符 o: 代表可按 CTRL-K o : 以插入 ö。 g8 g8 输出光标下字符在 UTF-8 编码下的十六进制字节序列。包 含可能的组合字符。不受 'maxcombine' 值影响。 带有两个组合字符的字符示例: e0 b8 81 + e0 b8 b9 + e0 b9 89 8g8 8g8 在光标所在或之后,查找非法 UTF-8 字节序列。适用两种场 景: 1. 'encoding' 为任意 8 位编码时 2. 'encoding' 为 "utf-8" 且 'fileencoding' 为任意 8 位编码时 也就是说,适用于文件本应是 UTF-8,但因存在非法字节被误 当作 8 位编码的场景。 不会从文件末尾回绕。 注意 如果光标当前落在非法字节上,或处在多字节字符中 间,命令不会移动光标。 :p :pr :print E749 :[range]p[rint][flags] 显示 [range] 范围 (缺省为当前行) 内的所有行。为兼容 Vi,也可写作 :[range]| (见 :bar )。空缓冲区会报错。 注意: 如需将文本打印到纸张,见 :hardcopy 。GUI 版本也 可用文件菜单的打印项。 [flags] 用法参见 ex-flags 。 可搭配 :filter 命令,模式匹配行文本。 :[range]p[rint] {count} [flags] 从 [range] 范围开始 (缺省为当前行 cmdline-ranges ), 显示 {count} 行。 [flags] 用法参见 ex-flags 。 :P :Print :[range]P[rint] [count] [flags] 同 ":print"。当初只是为手滑长按 Shift 键的 Vi 用户添 加。 Vim9 脚本不支持本命令。 备注: 可被用户命令覆盖。 [flags] 用法参见 ex-flags 。 :l :list :[range]l[ist] [count] [flags] 类似 :print ,但不可显示字符会用 '^' 代替,并在行尾追 加 $。可通过 'listchars' 选项进一步调整显示方式。 [flags] 用法参见 ex-flags 。 :nu :number :[range]nu[mber] [count] [flags] 类似 :print ,但每行前面附带行号 (另见 'highlight' 和 'numberwidth' 选项)。 [flags] 用法参见 ex-flags 。 :# :[range]# [count] [flags] 同 :number 。 :#! vim-shebang :#!{任意内容} 忽略,Vim 脚本从而可用以下格式开头: #!vim -S let mylogbook='$HOME/logbook.md' exe $':e {mylogbook}' $ put ='## ' .. strftime('%d. %b %Y') norm! o 使脚本可执行,运行该脚本时就可新建日记项目。 :z E144 :[range]z[+-^.=][count] 显示 [range] 范围指定行 (省略时默认为当前行) 周边若干 行文本。 给出 [count] 时,指定展示行数。[count] 省略且仅有一个 窗口时,使用两倍 'scroll' 选项值。否则,使用当前窗口高 度减 3。下表中,1 "屏" 代表此值。 给出 [count] 时,'window' 选项会被设为该值。 :z 可单独使用,也可后跟单个标记符号。其效果如下: 标记 显示首行 显示末行 新光标行 ---- ---------- --------- ------------ + 当前行 正向 1 屏 正向 1 屏 - 反向 1 屏 当前行 当前行 ^ 反向 2 屏 反向 1 屏 反向 1 屏 . 反向 1/2 屏 正向 1/2 屏 正向 1/2 屏 = 反向 1/2 屏 正向 1/2 屏 当前行 不写标记等价于 "+"。标记为 "=" 时,会在当前行上下两侧 显示虚线分隔线。 开启 'number' 选项时,输出会附带绝对行号。 :z! :[range]z![+-^.=][count] 类似 :z ,但 [count] 省略时默认使用 Vim 窗口高度减 一。 :[range]z[!]#[+-^.=][count] :z# 类似 :z 或 :z! ,但输出时总是显示行号。 := := [flags] 显示末行的行号。 [flags] 用法参见 ex-flags 。 :{range}= [flags] 显示 {range} 范围内最后一行的行号。例如,要显示当前行 号: :.= [flags] 用法参见 ex-flags 。 :norm[al][!] {commands} :norm :normal 执行若干普通模式命令 {commands}。从而可在命令行上输入 并执行普通模式按键序列。{commands} 的执行效果如同键盘 输入。撤销时,会将所有命令作为一个整体撤销。 遇到错误即停止执行。 带 [!] 时,不使用按键映射。否则,即使本命令是在不可递 归映射 ( :noremap ) 中调用,其参数中的按键仍然可以使用 映射。 {commands} 必须是完整命令。如果命令未结束,最后一条会 被中止,如同按下了 <Esc> 或 <C-C>。这意味着插入命令 (如需进入插入模式,见 :startinsert ) 和 : 命令都必 须完整。也不能用 Q 或 gQ 启动 Ex 模式。 本命令执行期间,显示不刷新。 {commands} 不能以空格开头,确有需要时,可在前面加个计 数 1 (一)。"1 " 代表单个空格按键命令。 {commands} 执行时忽略 'insertmode' 选项。 本命令不能后跟其他命令。'|' 被认为是命令内容。 支持递归使用,递归深度上限由 'maxmapdepth' 决定。 另一种方法是通过 :execute 构造 :normal 的参数。它 以表达式作为参数,从而可用可显示字符来表示特殊字符。 示例: :exe "normal \<c-w>\<c-w>" :{range}norm[al][!] {commands} :normal-range 对 {range} 范围内的每一行执行若干普通模式命令 {commands}。执行前,光标先定位在每行首列。其余行为与不 带范围的 :normal 命令一致。 :sh :shell E371 :sh[ell] 启动外壳。外壳退出时 (执行完 "exit" 命令),回到 Vim。 使用外壳命令名取自 'shell' 选项。 E360 注意: Amiga 上,由编译器以快速修复模式启动 Vim 时,本 命令不可用。因为编译器已将标准输入设为非交互模式。 :!cmd :! :!{cmd} 通过外壳执行 {cmd} 命令。另见 'shell' 和 'shelltype' 选项。过滤命令参见 :range! 。 Vim 按以下顺序,使用 'shell'、'shcf'、'sxq' 和 'shq' 选项构造命令行: `&sh &shcf &sxq &shq {cmd} &shq &sxq` 由此可见,虽然可同时设置 'sxq' 和 'shq',但很少有用。 {cmd} 内部受 'sxe' 选项影响,可能需要额外转义。 此外,{cmd} 内所有 cmdline-special 特殊字符,在传给 外壳前会先由 Vim 替换。 E34 {cmd} 里的 '!' 会被替换为前次外部命令 (另见 'cpoptions'),但 '!' 前带反斜杠时,不进行替换,只移除 单个反斜杠。例如: 先执行 "!ls",然后在执行 "!echo ! \! \\!" 时,实际会执行 "echo ls ! \!"。 {cmd} 里的 '|' 会传给外壳,而不会用于拼接 Vim 命令。见 :bar 。 {cmd} 里的 "%" 会被展开为当前文件名,"#" 会被展开为轮 换文件名。不转义文件名内特殊字符,必要时加引号以避免特 殊含义: :!ls "%" 文件名含 "$" 时,单引号效果更好,但文件名不能包含单引 号: :!ls '%' 以下写法始终有效,但需要输入更多内容: :exe "!ls " .. shellescape(expand("%"),1) 要使用按本义出现的 "%" 或 "#",前面加上反斜杠。例如, 要列出所有以 "%" 开头的文件: :!ls \%* 换行符会终止 {cmd},换行之后会被视作后续的 ":" 命令。 但如果换行前带反斜杠,则移除该反斜杠,{cmd} 继续接受参 数。无论换行前有多少个反斜杠都是如此,但仅移除一个反斜 杠。 Unix 上,命令通常在非交互外壳里运行。要改用交互式外壳 (例如需要别名机制 aliases),可将 'shellcmdflag' 设为 "-ic"。Win32 上另见 :!start 。 命令执行完毕后,会检查当前文件的时间戮和大小 timestamp 。 命令结束后,可能输出文本,Vim 因此会重绘屏幕。此时会触 发按-回车提示以便阅读消息。要跳过提示,可用: :silent !{cmd} 此时不会重绘屏幕。命令确实有输出时,需用 CTRL-L 或 :redraw! 来刷新。不过,具体行为取决于 t_ti 和 t_te 终端能力项的设置。 提示: 要在 Vim 窗口里运行 {cmd},可用 :terminal 命 令。`:term ++shell ++close {cmd}` 大致模拟了 :!{cmd} 的运行效果。 :!! :!! 重复执行上一条 ":!{cmd}" 外部命令。 :ve :ver :version :ve[rsion] 输出编辑器版本号。编译器支持 "__DATE__" 时,也会显示编 译日期。否则显示固定发布日期。 后续行列出 Vim 编译时启用的特性信息。带前导 '+' 的特性 被启用。带 '-' 则代表未启用。如需修改,需要编辑 feature.h 并重新编译 Vim。 要在表达式中检测特性,参见 has() 。 以下为特性总览。 首列代表包含该特性的最小版本。 T tiny (精简版,始终包含) N normal (标准版) H huge (完整版) m 需手动开启,或依赖其他特性 - 不再包含,此特性已删除 (无) 视系统而定 例如,标记为 "N" 的特性,代表在 Vim 的标准版与完整版中 均会包含。 +feature-list +acl ACL 支持 +ARP 仅对 Amiga 有效: ARP 支持 H +arabic 阿拉伯语 Arabic 支持 N +autochdir 'autochdir' 选项支持 T +autocmd :autocmd 自动命令支持。自 8.0.1564 起永久启用 H +autoservername 自动开启 clientserver ,无需指定 --servername m +balloon_eval GUI 上的气泡表达式支持 balloon-eval 。编译带支持的 GUI (Motif、GTK、GUI),且开启 Netbeans/Sun Workshop 集 成或 +eval 特性之一时,才会包含。 H +balloon_eval_term 终端上的气泡表达式支持 balloon-eval ,见 'balloonevalterm' N +browse :browse 命令支持 T ++builtin_terms 内置完整终端支持 builtin-terms ,自 9.0.0280 起永久启 用 N +byte_offset 支持 'statusline' 选项的 'o' 标志位、"go" 和 ":goto" 命令。 m +channel 进程间通信 channel 支持 T +cindent 'cindent' C 缩进支持;永久启用 N +clientserver Unix 和 Win32: 远程调用 clientserver +clipboard 已编译剪贴板支持 clipboard +clipboard_working 已编译剪贴板支持 clipboard 且可用 +clipboard_provider 已编译 clipboard-providers 支持 T +cmdline_compl 命令行补全 cmdline-completion 支持 T +cmdline_hist 命令行历史 cmdline-history 支持 T +cmdline_info 'showcmd' 和 'ruler' 支持; 自 9.0.0747 起永久启用 T +cmdwin cmdline-window 支持;自 9.0.0657 起永久启用 T +comments 'comments' 支持 N +conceal 隐藏文本支持,见 conceal :syn-conceal 等 N +cryptv 加密支持 encryption H +cscope cscope 支持 T +cursorbind 'cursorbind' 支持 m +cursorshape termcap-cursor-shape 支持 m +debug 编译开启调试支持 N +dialog_gui GUI 对话框形式的 :confirm 支持 N +dialog_con 控制台对话框形式的 :confirm 支持 N +dialog_con_gui 同时提供对 GUI 或控制台对话框的 :confirm 支持 N +diff vimdiff 和 'diff' 比较功能支持 N +digraphs digraphs 二合字母支持 E196 +directx 仅对 Win32 GUI 有效: DirectX 和 'renderoptions' 支持 +dnd "~ 寄存器的拖放支持 quote_~ H +emacs_tags Emacs 标签文件 emacs-tags 支持 N +eval 表达式求值支持 eval.txt T +ex_extra 现已永久启用,曾用于 Vim 扩展 Ex 命令 N +extra_search 'hlsearch' 和 'incsearch' 选项支持 - +farsi 已删除: farsi 波斯语支持 T +file_in_path gf 、 CTRL-W_f 和 <cfile> 支持,自 9.0.265 起永久 启用 N +find_in_path 包含文件 (头文件) 搜索支持: [I 、 :isearch 、 CTRL-W_CTRL-I 、 :checkpath 等 N +folding 折叠 folding 支持 +footer 信息页脚 gui-footer 支持 +fork 仅对 Unix 有效: 通过 fork 机制执行外壳命令 T +float 浮点数支持;自 9.0.0491 起永久启用 N +gettext 消息翻译 multi-lang 支持 - +GUI_Athena 仅对 Unix 有效: Athena GUI 支持 +GUI_neXtaw 仅对 Unix 有效: neXtaw GUI 支持 +GUI_GTK 仅对 Unix 有效: GTK+ GUI 支持 +GUI_Motif 仅对 Unix 有效: Motif GUI 支持 +GUI_Photon 仅对 QNX 有效: Photon GUI 支持 m +hangul_input 韩语输入 hangul 支持 +iconv 编译内置 iconv() 函数 +iconv/dyn 同上,动态链接库版 iconv-dynamic /dyn H +image 图像渲染 image 支持 H +image_popup 弹窗图像渲染 popup-image 支持 T +insert_expand insert_expand 插入模式补全支持 m +ipv6 IPv6 网络 channel 支持 m +job 作业启动和终止 job 支持 T +jumplist 跳跃表 jumplist 支持;自 8.2.3795 起永久启用 H +keymap 键盘映射表 'keymap' 支持 N +lambda 匿名函数 lambda 和闭包 closure 支持 H +langmap 语言映射表 'langmap' 支持 N +libcall 外部函数库调用 libcall() 支持 N +linebreak 'linebreak'、'breakat' 和 'showbreak' 换行相关支持 T +lispindent Lisp 缩进 'lisp' 支持 T +listcmds 缓冲区列表 buffer-hidden 和参数列表 :argdelete 相 关 Vim 命令支持 T +localmap 局部缓冲区映射 :map-local 支持 m +lua Lua 接口支持 m +lua/dyn Lua 接口支持,动态链接库版 /dyn N +menu 菜单 :menu 支持 N +mksession 创建会话 :mksession 支持 T +modify_fname 文件名修饰符 filename-modifiers 支持 T +mouse 鼠标 mouse-using 支持 N +mouseshape 鼠标形状 'mouseshape' 支持 N +mouse_dec 仅对 Unix 有效: Dec 终端鼠标 dec-mouse 支持 N +mouse_gpm 仅对 Unix 有效: Linux 终端鼠标 gpm-mouse 支持 m +mouse_gpm/dyn 同上 +mouse_gpm ,动态链接库版 /dyn N +mouse_jsbterm JSB 鼠标 jsbterm-mouse 支持 N +mouse_netterm 仅对 Unix 有效: netterm 终端鼠标 netterm-mouse 支持 N +mouse_pterm 仅对 QNX 有效: pterm 终端鼠标 qnx-terminal 支持 N +mouse_sysmouse 仅对 Unix 有效: *BSD 控制台鼠标 sysmouse 支持 N +mouse_sgr 仅对 Unix 有效: sgr 鼠标 sgr-mouse 支持 N +mouse_urxvt 仅对 Unix 有效: urxvt 鼠标 urxvt-mouse 支持 N +mouse_xterm 仅对 Unix 有效: xterm 终端鼠标 xterm-mouse 支持 T +multi_byte Unicode、16 和 32 位字符 multibyte 支持。自 8.1.0811 起永久启用 +multi_byte_ime 仅对 Win32 有效: 多字节字符输入法 multibyte-ime 支持 N +multi_lang 非英语语言 multi-lang 支持 m +mzscheme Mzscheme 接口 mzscheme 支持 m +mzscheme/dyn 同上,动态链接库版 mzscheme-dynamic /dyn m +netbeans_intg netbeans 集成支持 T +num64 64-位数值 Number 支持。自 8.2.0271 起永久启用, 可用 v:numbersize 查看数值型的实际宽度 m +ole 仅对 Win32 GUI 有效: ole-interface 支持 N +packages 插件包加载 packages 支持 T +path_extra 'path' 和 'tags' 的向上和向下递归搜索支持。自 9.0.0270 起永久启用 m +perl Perl 接口 perl 支持 m +perl/dyn 同上,动态链接库版 perl-dynamic /dyn N +persistent_undo 持久化撤销 undo-persistence 支持 N +popupwin 弹窗 popup-window 支持 +postscript :hardcopy PostScript 文件输出支持 +pango :hardcopy 通过 Pango 和 Cairo 引擎渲染页面的支持 N +printer :hardcopy 打印命令支持 H +profile :profile 性能分析命令支持 m +python Python 2 接口 python 支持 m +python/dyn 同上,动态链接库版 python-dynamic /dyn m +python3 Python 3 接口 python 支持 m +python3/dyn 同上,动态链接库版 python-dynamic /dyn m +python3/dyn-stable Python 3 接口稳定 ABI 支持 python-dynamic python-stable /dyn N +quickfix :make 和 quickfix 等快速修复相关命令支持 N +reltime reltime() 函数、'hlsearch'/'incsearch' 超时、 'redrawtime' 选项等实时支持 H +rightleft 从右到左输入 'rightleft' 支持 m +ruby Ruby 接口 ruby 支持 m +ruby/dyn 同上,动态链接库版 ruby-dynamic /dyn T +scrollbind 滚动绑定 'scrollbind' 支持 N +signs 标号 :sign 支持 T +smartindent 智能缩进 'smartindent' 支持 N +socketserver 仅对 Unix 有效: 客户端-服务器功能的套接字服务后端支持 H +sodium 编译时链接了 libsodium 库,提供更强加密支持 H +sound sound_playevent() 、 sound_playfile() 函数等音频支持 N +spell 拼写检查 spell 支持 N +startuptime --startuptime 参数支持 N +statusline 支持 'statusline'、'rulerformat' 选项、以及 'titlestring'、'iconstring' 所用特殊格式。 - +sun_workshop 已删除: workshop 支持 N +syntax 语法高亮 syntax 支持 +system() 仅对 Unix 有效: +fork 的相反特性,通过 system() 机制 执行外部命令 H +tabpanel 标签页面板 tabpanel 支持 T +tag_binary 标签文件二分法查找 tag-binary-search 支持 - +tag_old_static 已删除: 旧版静态标签 tag-old-static 支持 - +tag_any_white 已删除: 标签文件内接受任意空白 tag-any-white m +tcl Tcl 接口 tcl 支持 m +tcl/dyn 同上,动态链接库版 tcl-dynamic /dyn m +terminal 终端窗口 terminal 支持 +terminfo 使用 terminfo ,代替 termcap 实现终端能力库 N +termresponse t_RV 和 v:termresponse 终端响应支持 N +termguicolors 兼容 xterm 终端的 24 位真彩支持 T +textobjects 文本对象选择 text-objects 支持;自 9.0.0222 起永久启 用 N +textprop 文本属性 text-properties 支持 +tgetent 仅对非 Unix 有效: 可加载外部 termcap 库 N +timers timer_start() 定时器函数支持 T +title 设置窗口标题 'title' 与图标文本 'icon';永久启用 N +toolbar GUI 工具栏 gui-toolbar 支持 T +user_commands 用户自定义命令 user-commands 支持;自 8.1.1210 起永 久启用 H +vartabs 可变宽度制表位 'vartabstop' 支持 T +vertsplit 垂直分割窗口 :vsplit 支持;自 8.0.1118 起永久启用 T +vim9script Vim9 脚本支持 N +viminfo 'viminfo' 信息持久化支持 T +virtualedit 'virtualedit' 虚拟编辑支持;自 8.1.826 起永久启用 T +visual 可视模式 Visual-mode 支持;自 7.4.200 起永久启用 T +visualextra 扩展可视模式命令 blockwise-operators 支持 T +vreplace gR 和 gr 虚拟替换模式支持 +vtp 仅对 MS-Windows 控制台有效: 'termguicolors' 支持 N +wayland 仅对 Unix 有效: Wayland 协议支持 N +wayland_clipboard 仅对 Unix 有效: Wayland 选区/剪贴板支持 T +wildignore 忽略文件通配 'wildignore' 支持;自 9.0.0278 起永久启用 T +wildmenu 匹配菜单 'wildmenu' 支持;自 9.0.0279 起永久启用 T +windows 多窗口支持;自 8.0.1118 起永久启用 m +writebackup 'writebackup' 缺省开启 m +xim X 输入法 xim 支持 +xfontset X 字体集 xfontset 支持 N +xattr 仅对 Linux 有效: 编译时加入扩展属性支持 +xpm XPM 像素图支持 m +xpm_w32 仅对 Win32 GUI 有效: XPM 像素图支持 w32-xpm-support +xsmp XSMP (X 会话管理) 支持 +xsmp_interact 交互式 XSMP (X 会话管理) 支持 N +xterm_clipboard 仅对 Unix 有效: xterm 剪贴板处理 m +xterm_save 保存和恢复 xterm 屏幕 xterm-screens N +X11 仅对 Unix 有效: 窗口标题恢复支持 X11 /dyn E370 E448 部分特性会显示 "/dyn" 后缀,代表该特性仅在相关库可动态 加载时可用。 :ve[rsion] {nr} 现已忽略。曾用于检验 .vimrc 文件版本号。现已移除,因为 可用 :if 命令实现版本依赖逻辑。 :redi :redir :redi[r][!] > {file} 重定向消息到文件 {file}。命令输出消息会写入该文件,直 到重定向结束为止。消息仍会在屏幕上显示。带 [!] 时,会 覆盖已有文件。否则如果文件 {file} 存在,本命令会失败。 同一时间只能激活一个 ":redir" 目标。调用 ":redir" 开启 重定向新目标前,会先关闭当前正在执行的重定向。要 递归捕获输出,可改用 execute() 。 要停止消息或命令在屏幕上回显,可将命令放入函数,然后用 `:silent call Function()` 调用。 'verbosefile' 选项是一个替代方案,且可与 ":redir" 组合 使用。 :redi[r] >> {file} 重定向消息到文件 {file},{file} 已存在则追加写入。 :redi[r] @{a-zA-Z} :redi[r] @{a-zA-Z}> 重定向消息到寄存器 {a-z}。使用大写 {A-Z} 寄存器时,会 追加到原有内容之后。寄存器名后的 '>' 可选。 :redi[r] @{a-z}>> 向寄存器 {a-z} 追加消息。 :redi[r] @*> :redi[r] @+> 重定向消息到选区或剪贴板。为后向兼容,寄存器名后的 '>' 可省略。见 quotestar 和 quoteplus 。 :redi[r] @*>> :redi[r] @+>> 追加消息到选区或剪贴板。 :redi[r] @"> 重定向消息到无名寄存器。为后向兼容,寄存器名后的 '>' 可省略。 :redi[r] @">> 追加消息到无名寄存器。 E1092 :redi[r] => {var} 重定向消息到变量。 老式脚本里: 变量不存在则自动创建。变量已存在则初始化为 空串。重定向开启后,如果变量被删除、加锁或变更类型,后 续命令输出消息会报错。使用局部变量 (函数内 l:var、或脚 本内 s:var) 时,如果另一个 :redir 终止当前重定向,作 用域可能会发生变化导致赋值失败。 Vim9 脚本里: 变量必须预告声明为字符串类型。 变量在重定向结束前保持为空, 仅支持字符串变量。 要获取单条命令输出,可改用 execute() 函数,无需重定 向。 :redi[r] =>> {var} 追加消息到已有变量。仅支持字符串变量。 E1185 :redi[r] END 终止消息重定向。 :filt :filter :filt[er][!] {pattern} {command} :filt[er][!] /{pattern}/ {command} 过滤 {command} 命令的输出,仅显示匹配 {pattern} 的行。 例如,要仅列出 xml 文件: :filter /\.xml$/ oldfiles 带 [!] 时,则保留 {command} 输出中 不 匹配 {pattern} 的行。 {pattern} 为 Vim 搜索模式。可用 / 之外的任意非 ID 字符 (见 'isident') 作为定界符,只要该字符不在 {pattern} 里 出现即可。 不使用定界符时,模式不能包含竖杠字符。 模式匹配时不考虑 'ignorecase'。 模式仅匹配输出的相关部分,未必是整行。仅部分命令支持过 滤,可对此自行测试。部分支持过滤的命令及过滤部分如下: :# - 整行过滤 :clist - 按文件名或模块名过滤 :command - 按命令名过滤 :files - 按文件名过滤 :highlight - 按高亮组过滤 :history - 按历史命令过滤 :jumps - 按文件名过滤 :let - 按变量名过滤 :list - 整行过滤 :llist - 按文件名或模块名过滤 :marks - 当前文件按文本过滤,其他文件按文件 名过滤 :oldfiles - 按文件名过滤 :registers - 按寄存器内容过滤 (不支持多行) :set - 按选项名过滤 仅过滤普通信息,不过滤错误信息。 :sil :silent :silent! :sil[ent][!] {command} 静默执行命令 {command}。普通消息不会显示,也不会写入消 息历史。 带 [!] 时,错误消息也被跳过,遇到错误不会终止命令和映 射,但仍会相应设置 v:errmsg 。 不带 [!] 时,一旦出现错误信息,后续所有消息都会正常显 示。 由 :redir 开启的重定向照常工作,但可能有细微差异。此 时,命令输出仍然被重定向,但不在屏幕上显示。示例: :redir >/tmp/foobar :silent g/Aap/p :redir END 要静默执行普通模式命令,可用 :normal 命令。例如,要 搜索字符串且不弹出消息: :silent exe "normal /path\<CR>" :silent! 适合执行可能失败,但需要忽略失败的命令。示 例: :let v:errmsg = "" :silent! /^begin :if v:errmsg != "" : ... 无匹配项 :silent 同时会屏蔽按-回车提示。用于执行外部命令时, 可能造成屏幕显示混乱。可用 CTRL-L 重绘修复。 用 `:silent menu ...` 定义菜单时,不会在命令行中回显命 令。但菜单命令本身仍然会产生消息。在命令内用 :silent 可屏蔽消息: `:silent menu .... :silent command`。 :uns :unsilent :uns[ilent] {command} 非静默执行命令 {command}。仅当通过 :silent 执行到此 命令时才有意义。 用于在 :silent 环境中强制输出消息。下例中, :silent 用于屏蔽读取文件提示,而 :unsilent 用于显示每个文件 的首行。 :silent argdo unsilent echo expand('%') .. ": " .. getline(1) :verb :verbose :[count]verb[ose] {command} 执行命令 {command},执行期间 'verbose' 设为 [count]。 [count] 省略时默认为 1。可用 :0verbose 将 'verbose' 设为零。 搭配 :silent 时,可产生相应详细度的消息但不显示。 此种搭配从而可在内部生成消息,然后通过 v:statusmsg 或相关命令读取消息。 示例: :let v:statusmsg = "" :silent verbose runtime foobar.vim :if v:statusmsg != "" : " foobar.vim 文件未找到 :endif 拼接多条命令时,":verbose" 仅作用于首条命令: :4verbose set verbose | set verbose verbose=4 verbose=0 要将详细消息存入日志文件,可用 'verbosefile' 选项。 :verbose-cmd 'verbose' 非零时,查看 Vim 选项值、按键映射、缩写、用户自定义函数或命令、高亮 组或自动命令时,会同时显示其最后定义位置。如果是手动定义,无此 "最近修改于" 消 息。如果在函数、用户命令或自动命令执行期间定义,会报告定义所在脚本。 {仅当编译时加入 +eval 特性才有效} K K 调用特定程序查询光标下的关键字。程序名由 'keywordprg' ('kp') 选项指定 (缺省是 "man")。关键字由字母、数值以及 'iskeyword' 列出的字符组成,使用光标所在或光标右侧的关 键字。等效以下命令 :!{program} {keyword} Vim 运行时 tools 目录下有名为 "ref" 的示范程序,可进行 简单拼写检查。 特例: - 'keywordprg' 以 ":" 开头时,则作为带 [count] 的 Vim Ex 命令执行。 - 'keywordprg' 为空时,调用 :help 命令。此时建议在 'iskeyword' 中加入更多字符,便于查找更多帮助项。 - 'keywordprg' 为 "man" 或以 ":" 开头时,K 前的 [count] 会插入在 keywordprg 与关键字之间。例如光标在 "mkdir" 上按 "2K",相当于: !man 2 mkdir - 'keywordprg' 为 "man -s" 时,K 前的 [count] 会放在 "-s" 之后。[count] 省略时会自动移除 "-s"。 v_K {Visual}K 类似 "K",但用可视高亮文本作为关键字。仅当高亮文本不超 过一行时有效。 [N]gs gs :sl :sleep :[N]sl[eep] [N][m] 暂停 (睡眠) [N] 秒。带 [m] 则暂停 [N] 毫秒。"gs" 使用 的计数单位固定为秒数。[N] 省略时默认暂停 1 秒。 :sleep "睡眠一秒 :5sleep "睡眠五秒 :sleep 100m "睡眠 100 毫秒 10gs "睡眠十秒 可按 CTRL-C (MS-Windows 上为 CTRL-Break) 中断。 "gs" 代表 "goto sleep"。 睡眠期间,如果文本光标当前位于可见位置,光标会定位到该 位置 (译者注: 主要针对光标位于命令行的情况)。 睡眠期间,依然会处理排队信息与计时器 ( +timers )。 :sl! :sleep! :[N]sl[eep]! [N][m] 同上,但隐藏光标。 :xrestore :xr :xr[estore] [display] 重新初始化与 X11 服务器的连接。X 服务器重启后,例如在 screen/tmx 中长期运行 Vim,并从多台机器切换接入时,会 有用。 [display] 格式同 $DISPLAY 环境变量 (如 "localhost:10.0") [display] 省略时,默认重用上次执行本命令时使用的值。如 果从未指定过,则使用 Vim 启动时的 $DISPLAY 环境变量 值。 执行本命令时,同时会更新 v:clipmethod 。 {仅当编译时加入 +xterm_clipboard 特性才有效} :clipreset :clip :clip[reset] 尝试通过 'clipmethod' 选项,重新选择剪贴板访问方式。如 果当前方式失效,可用于切换其他可用方式。 {仅当编译时加入 +clipboard 特性才有效} g_CTRL-A g CTRL-A {仅当 Vim 编译时定义 MEM_PROFILING 才有效 (极少启用)} 显示内存用量统计信息。仅用于 Vim 自身调试。 可视模式下,此命令为数值增量操作,见 v_g_CTRL-A 。

2. 将 Vim 用作 less 或 more less

如果使用 less 或 more 程序查看文件,无法获得语法高亮。为此可改用 Vim。可用外壳 脚本 "$VIMRUNTIME/macros/less.sh" 实现。 该外壳脚本会加载 Vim 脚本 "$VIMRUNTIME/macros/less.vim"。设置映射来模拟 less 支持的命令。同时仍可正常使用 Vim 原生命令。 本实现尚未尽善尽美。例如即使查看短文件,Vim 仍会占用整屏。但大多数场景应该可以 正常工作,何况还额外拥有语法高亮。 按 "h" 键可查看可用命令的简要说明。 要在该 less 模式下自定义选项,可在 vimrc 中定义 LessInitFunc,示例: >vim func LessInitFunc() set nocursorcolumn nocursorline endfunc < vim:tw=78:ts=8:noet:ft=help:norl: