various

various.txt 适用于 Vim 9.0 版本。 最近更新: 2022年7月 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' 包含有不能自动更新项目的时候。 :redrawt :redrawtabline :redrawt[abline] 重画标签页行。用于 'tabline' 包含不能触发自动更新的项 目的时候来更新标签页行。 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, Hex 52, Octal 122 如果该字符不是标准的 ASCII 字符,但据 'isprint' 选项可 以显示,则另给出不可显示的版本。 如果该字符大于 127,还显示 <M-X> 形式的结果。例如: <~A> <M-^A> 129, Hex 81, Octal 201 <p> <|~> <M-~> 254, Hex fe, Octal 376 (其中的 <p> 是某个特殊字符) 文件里的 <Nul> 字符内部以 <NL> 存储,但显示为: <^@> 0, Hex 00, Octal 000 如果字符有组合字符,同时显示它们。'maxcombine' 的值这 时不起作用。 如果该字符可用二合字母插入,也输出可用于创建该字符的两 个字符: <ö> 246, Hex 00f6, Oct 366, Digr 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] 范围里的行 (缺省是当前行)。 注意: 如果你要打印你的文本到纸张上,见 :hardcopy 。 GUI 上可以使用 File.Print 菜单项。 ex-flags 说明 [flags]:filter 命令可用来只显示匹配模式的行。 :[range]p[rint] {count} [flags] 显示 {count} 行,从 [range] 指定的范围开始 (缺省是当前 行 cmdline-ranges )。 ex-flags 说明 [flags] :P :Print :[range]P[rint] [count] [flags] 和 ":print" 相同。Vi 里加入这个功能,很明显地,是给那 些按 Shift 键太久的人用的 ... Vim9 脚本不支持此命令。 备注: 用户命令可以覆盖此命令。 ex-flags 说明 [flags] :l :list :[range]l[ist] [count] [flags] 和 :print 相同,但是不可显示字符用 '^' 代替,行尾加上 $。这可进一步用 'listchars' 选项改变。 ex-flags 说明 [flags] :nu :number :[range]nu[mber] [count] [flags] 和 :print 相同,但每行之前显示行号 (也参见 'highlight''numberwidth' 选项)。 ex-flags 说明 [flags] :# :[range]# [count] [flags] 和 :number 相同。 :#! :#!{anything} 忽略,从而你可以用下面的方式开始 Vim 脚本: #!vim -S echo "this is a Vim script" quit :z E144 :[range]z[+-^.=][count] 显示包围 [range] 指定行的若干行文本,如果没有 [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 屏 当前行 不指定任何标记相当于指定 "+"。如果标记是 "=",当前行会 被连字符组成的两行包围。 :z! :[range]z![+-^.=][count] 和 ":z" 类似,但如果没有 [count],缺省为 Vim 窗口高度 减一。 :[range]z[!]#[+-^.=][count] :z# 和 ":z" 或 ":z!" 类似,但显示行号。 := := [flags] 显示末行的行号。 ex-flags 说明 [flags]。 :{range}= [flags] 显示 {range} 范围内最后一行的行号。例如,打印当前行 号: :.= ex-flags 说明 [flags]。 :norm[al][!] {commands} :norm :normal 执行若干普通模式命令 {commands}。这使得在命令行上执行 普通模式命令成为可能。{commands} 的执行就像从键盘输入 那样。撤销命令会撤销所有的命令。 如果发生错误,结束执行。 如果给出 [!],不使用映射。 如果没有,如果一个不可重新映射的映射 ( :noremap ) 调用 该命令,它的参数就因而还是有可能被重新映射。 {commands} 必须是完整的命令。如果 {commands} 没有完整 给出一个命令,未完成的最后那个命令会被终止,如同键入了 <Esc><C-C> 一样。 这意味着插入命令也必须完整 (要开始插入模式, 见 :startinsert )。":" 命令也必须完整。而且你不能用 "Q" 或 "gQ" 启动 Ex 模式。 ":normal" 还在工作的时候,显示不会被刷新。 {commands} 不能以空格开始,如果要,前面加个计数 1 (一)。"1 " 就是一个空格。 {commands} 里忽略 'insertmode' 选项。 该命令后面不能跟其他命令。因为任何 '|' 都被认为是命令 的一部分。 该命令可以递归使用,但是深度不能超过 'maxmapdepth'。 一个替代的方法是 :execute ,它可以用表达式作为参数。 这样就可使用可显示字符来代表特殊字符。 例如: :exe "normal \<c-w>\<c-w>" :{range}norm[al][!] {commands} :normal-range {range} 指定的范围中的每行执行若干普通模式命令 {commands}。在执行 {commands} 之前,光标先定位在该行的 第一列。除此以外,和没有给出范围的 ":normal" 命令并无 差别。 :sh :shell E371 :sh[ell] 该命令启动一个外壳。外壳退出后 (执行完 "exit" 命令), 你会回到 Vim。外壳命令的名字来自 'shell' 选项。 E360 注意: 当 Vim 在 Amiga 上通过编译器的快速修复模式时启动 时,该命令不能使用。这是因为编译器把标准输入设为非交互 模式。 :!cmd :! :!{cmd} 在外壳里执行 {cmd} 命令。也可参见 'shell''shelltype' 选项。 E34 {cmd} 里的任何 '!' 都被前一个外部命令所取代 (参见 'cpoptions'),除非之前有反斜杠。这时反斜杠被去掉。例 如: "!ls" 之后的 "!echo ! \! \\!" 实际执行 "echo ls ! \!"。 命令执行之后,检查当前文件的修改时间 timestamp{cmd} 里的 '|' 会传给外壳,你不能用来附加 Vim 命令。 见 :bar 。 如果 {cmd} 里包含 "%",它被扩展为当前文件名,"#" 则被 扩展为轮换文件名。不转义特殊字符,用引号可避免其特殊含 义: :!ls "%" 如果文件名包含 "$",用单引号较好,但只适用于不包含单引 号的文件名: :!ls '%' 总是可以这样做,但要多打点字: :exe "!ls " .. shellescape(expand("%")) 要得到按本义出现的 "%" 或 "#",在它之前附加反斜杠。例 如,要列出所有以 "%" 开头的文件: :!ls \%* {cmd} 以换行符结尾,其后的内容被理解为另外一个 ":" 命 令。不过,如果换行之前有反斜杠,该反斜杠被去掉,{cmd} 继续接受参数。无论之前有多少个反斜杠都是如此。只有一个 会被去掉。 Unix 上命令通常在非交互的外壳里运行。如果你希望用交互 外壳 (比如要用别名机制 aliases),设置 'shellcmdflag' 为 "-ic"。Win32 上可参见 :!start 。 命令执行后,检查当前文件的时间戮和大小 timestamp 。 Vim 在命令结束以后重画屏幕,因为命令可能显示任何文本。 因此,你会有一个按回车的提示,以便你看到执行结果。要避 免这一点: :silent !{cmd} 这样屏幕就不会重画。如果确实有输出,你需要用 CTRL-L 或 ":redraw!" 来刷新。 参见 shell-window :!! :!! 重复上次的 ":!{cmd}"。 :ve :ver :version :ve[rsion] 显示编辑器的版本号。如果编译器能解释 "__DATE__",也显 示编译的日期。不然,显示固定的发布日期。 然后,显示 Vim 编译时所带特性的信息。如果某特性之前有 '+',该特性被包含。如果之前有 '-',该特性没有包含。要 改变编译时带的特性,修改 feature.h 并重新编译 Vim。 要在表达式里确定是否包含某特性,参见 has() 。 以下是特性的总览。 第一列显示包含该特性的最小版本。 T tiny (微小) (总是存在) S small (小) N normal (普通) B big (大) H huge (巨大) m 手动设定或者依赖于其他特性 - 永不会,此特性被删除 (无) 依赖于系统 这样,如果一个特性标记为 "N",它包含在 Vim 的 normal、 big 和 huge 版本里。 +feature-list +acl 包含 ACL 支持 +ARP 仅对 Amiga 有效: 支持 ARP B +arabic 支持阿拉伯语 Arabic B +autochdir 支持 'autochdir' 选项 T +autocmd :autocmd ,自动命令 H +autoservername 自动打开 clientserver m +balloon_eval GUI 上气泡表达式支持 balloon-eval 。如果编译时包含支 持的 GUI (Motif、GTK、GUI) 同时还有 Netbeans/Sun Workshop 集成或者 +eval 特性之一就包含此特性。 H +balloon_eval_term 终端上气泡表达式支持 balloon-eval'balloonevalterm' N +browse :browse 命令 N +builtin_terms 一些内建终端项 builtin-terms B ++builtin_terms 最大内建终端项支持 builtin-terms N +byte_offset 支持 'statusline' 选项的 'o' 标志位、"go" 和 ":goto" 命令。 m +channel 进程间通信 channel 6 +cindent 'cindent' ,C 缩进 N +clientserver Unix 和 Win32: 远程调用 clientserver +clipboard 编译时加入了剪贴板支持 clipboard +clipboard_working 编译时加入了剪贴板支持 clipboard 且可用 T +cmdline_compl 命令行补全 cmdline-completion T +cmdline_hist 命令行历史 cmdline-history N +cmdline_info 'showcmd''ruler' S +cmdwin cmdline-window 支持 T +comments 支持 'comments' B +conceal "conceal" 支持,见 conceal :syn-conceal 等。 N +cryptv 加密支持 encryption B +cscope 支持 cscope T +cursorbind 'cursorbind' 支持 m +cursorshape termcap-cursor-shape 支持 m +debug 带调试的编译。 N +dialog_gui 支持 :confirm 显示 GUI 对话框。 N +dialog_con 支持 :confirm 显示控制台对话框。 N +dialog_con_gui 支持 :confirm 显示 GUI 或控制台对话框。 N +diff vimdiff'diff' N +digraphs digraphs E196 +directx 只对 Win32 GUI 有效: DirectX 和 'renderoptions' +dnd "~ 寄存器的拖放支持 quote_~ 。 B +emacs_tags emacs-tags 文件 N +eval 表达式计算 eval.txt T +ex_extra 现在总是打开,用于 Vim 附加的 Ex 命令 N +extra_search 'hlsearch''incsearch' 选项。 - +farsi 已删除: farsi 波斯语 N +file_in_path gfCTRL-W_f<cfile> N +find_in_path 包含文件搜索: [I:isearchCTRL-W_CTRL-I:checkpath ,等等。 N +folding 折叠 folding +footer 信息页脚 gui-footer +fork 只对 Unix 有效: fork 外壳命令 +float 浮点数支持 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 T +insert_expand insert_expand 插入模式补全 m +ipv6 IPv6 网络 channel 支持 m +job 启动和终止作业 job T +jumplist 跳转表 jumplist ;8.2.3795 开始总是打开 B +keymap 键盘映射表 'keymap' N +lambda lambdaclosure B +langmap 语言映射表 'langmap' N +libcall 函数库调用 libcall() N +linebreak 'linebreak''breakat''showbreak' t +lispindent 'lisp' T +listcmds Vim 的缓冲区列表相关命令 buffer-hidden 和参数列表 :argdelete 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' B +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 B +mouse_netterm 只对 Unix 有效: netterm 终端鼠标处理 netterm-mouse N +mouse_pterm 只对 QNX 有效: pterm 终端鼠标处理 qnx-terminal N +mouse_sysmouse 只对 Unix 有效: *BSD 控制台鼠标处理 sysmouse B +mouse_sgr 只对 Unix 有效: sgr 鼠标处理 sgr-mouse B +mouse_urxvt 只对 Unix 有效: urxvt 鼠标处理 urxvt-mouse N +mouse_xterm 只对 Unix 有效: xterm 终端鼠标处理 xterm-mouse T +multi_byte Unicode 支持,16 和 32 位字符 multibyte +multi_byte_ime Win32 多字节字符的输入法 multibyte-ime N +multi_lang 非英语语言支持 multi-lang m +mzscheme Mzscheme 接口 mzscheme m +mzscheme/dyn Mzscheme 接口 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 N +path_extra 'path''tags' 的向上和向下搜索 m +perl Perl 接口 perl m +perl/dyn Perl 接口 perl-dynamic /dyn N +persistent_undo 撤销的持久性 undo-persistence N +popupwin 弹出窗口 popup-window +postscript :hardcopy 可以写 PostScript 文件 N +printer :hardcopy 命令 H +profile :profile 命令 m +python Python 2 接口 python m +python/dyn Python 2 接口 python-dynamic /dyn m +python3 Python 3 接口 python m +python3/dyn Python 3 接口 python-dynamic /dyn N +quickfix :makequickfix 命令 N +reltime reltime() 函数,'hlsearch'/'incsearch' 超时, 'redrawtime' 选项 B +rightleft 从右到左输入 'rightleft' m +ruby Ruby 接口 ruby m +ruby/dyn Ruby 接口 ruby-dynamic /dyn T +scrollbind 滚动绑定 'scrollbind' B +signs 标号 :sign t +smartindent 'smartindent' B +sodium 编译里加入了 libsodium,用于更好的加密支持 B +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 的相反特性 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 接口 tcl-dynamic /dyn m +terminal 终端窗口支持 terminal +terminfo terminfo 代替 termcap N +termresponse 支持 t_RVv:termresponse B +termguicolors xterm 兼容的终端 24 位色彩支持 N +textobjects 文本对象 text-objects 选择 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 开始总是打开。 B +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 gRgr +vtp MS-Windows 控制台上: 'termguicolors' 的支持 N +wildignore 忽略文件通配 'wildignore' N +wildmenu 匹配菜单 'wildmenu' T +windows 多于一个窗口;8.0.1118 开始总是打开。 m +writebackup 'writebackup' 缺省打开 m +xim X 输入法 xim +xfontset X 字体集支持 xfontset +xpm pixmap 支持 m +xpm_w32 只对 Win32 GUI 有效: pixmap 支持 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] @+> 重定向消息到选择区或剪贴板。为了后向兼容,寄存器名后的 '>' 可以省略。见 quotestarquoteplus 。 :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 - 按高亮组过滤 :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" 还可以避免敲入回车 (hit-enter) 的提示。执行 外部命令时,这可能会使屏幕显示混乱。这时,用 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",可以产生相应详细度的消息 但不显示。":silent" 和 ":verbose" 的组合因而可以只在内 部产生消息,然后用 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 要记录 verbose 消息到文件,用 'verbosefile' 选项。 :verbose-cmd 如果 'verbose' 非零,列出 Vim 选项、键映射、缩写、用户定义的函数或命令、高亮组 或者自动命令的值会同时显示它最近被定义的位置。如果手动定义,不会有这个 "Last set" 消息。如果在执行函数、用户命令或者自动命令时定义,报告它定义所在的脚本。 {仅当编译时加入 +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 之前的计数会插在 "-s" 之后。如果没有计数,则去掉 "-s"。 v_K {Visual}K 和 "K" 类似,但用可视的高亮文本代替关键字。只在高亮文 本不超过一行时有效。 [N]gs gs :sl :sleep :[N]sl[eep] [N][m] 停止 (睡眠) [N] 秒。如果有 [m],停止 [N] 毫秒。"gs" 前 的计数总是表示秒数。缺省值是 1 秒。 :sleep "睡眠一秒 :5sleep "睡眠五秒 :sleep 100m "睡眠 100 毫秒 10gs "睡眠十秒 可以被 CTRL-C (MS-Windows 上的 CTRL-Break) 中断。 "gs" 代表 "goto sleep"。 睡眠时如果在可见位置的话,光标定位于文本处。 也处理接收到的 netbeans 信息。{仅当编译时加入 +netbeans_intg 特性才有效} :sl! :sleep! :[N]sl[eep]! [N][m] 同上,但隐藏光标。 :xrestore :xr :xr[estore] [display] 重新初始化 X11 服务器的连接。X 服务器重启后有用,例如 在 screen/tmx 内运行 Vim 很长时间,并连接到不同机器的 时候。 [display] 应为 $DISPLAY 环境变量使用的格式 (如 "localhost:10.0") 如果省略 [display],使用之前运行此命令时使用的值来重新 初始化 X11 服务器的连接。如果该值从未提供过,使用 Vim 启动时 $DISPLAY 环境变量的值。 {仅当编译时加入 +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,例如: func LessInitFunc() set nocursorcolumn nocursorline endfunc vim:tw=78:ts=8:noet:ft=help:norl: