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: