VARIOUS

*various.txt*   For Vim version 6.4.  最近更新: 2006年2月


                  VIM 参考手册    by Bram Moolenaar
                                译者: Willis
                                http://vimcdoc.sf.net


各种其他命令                                            *various*

1. 其他命令                     |various-cmds|
2. 线上帮助                     |online-help|
3. 打印                         |printing|
4. 用 Vim 代替 less 或 more     |less|


1. 其他命令 *various-cmds*

*CTRL-L* CTRL-L 清屏并 (稍后) 重画屏幕。 *:redr* *:redraw* :redr[aw][!] 立即重画屏幕。如果有 !,先清屏。 这对在执行脚本或函数的中间要刷新屏幕,或者在置位了 'lazyredraw' 而执行映射的过程中间都有用。 *:redraws* *:redrawstatus* :redraws[tatus][!] 重画当前窗口的状态行。如果有 !,重画所有的状态行。它适 用于 'statusline' 包含有不能自动更新项目的时候。 *N<Del>* <Del> 输入数字的时候: 删除上一位数字。 注意: 如果你想要 <BS> 做同样的事,在 .vimrc 里加入如下的映射: :map CTRL-V <BS> CTRL-V <Del> 如果你的 <Del> 键工作不正常,可参见 |:fixdel|。 :as[cii] 或 *ga* *:as* *:ascii* ga 显示光标下字符的 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 助记: 得到 (Get) Ascii 值。{Vi 无此功能} *g8* g8 显示光标下字符 (假定其为 |UTF-8| 编码) 的各字节的十六 进制值。它会同时显示合成用字符。一个带三个合成用字符的 字符示例: e0 b8 81 + e0 b8 b9 + e0 b9 89 {Vi 无此功能} *:p* *:pr* *:print* :[range]p[rint] 显示 [range] 范围里的行 (缺省是当前行)。 注意: 如果你要打印你的文本文件,你需要一个外部程序。 GUI 上可以使用 File.Print 菜单项。(打印到纸张上可参见 |:hardcopy|)。 :[range]p[rint] {count} 显示 {count} 行,从 [range] 指定的范围开始 (缺省是当前 行 |cmdline-ranges|)。 *:P* *:Print* :[range]P[rint] [count] 和 ":print" 相同。Vi 里加入这个功能,很明显地,是给那 些按 Shift 键太久的人用的 ... *:l* *:list* :[range]l[ist] [count] 和 :print 相同,但是不可显示字符用 '^' 代替。 *:nu* *:number* :[range]nu[mber] [count] 和 :print 相同,但每行之前显示行号 (也参见 'highlight' 选项)。 *:#* :[range]# [count] 和 :number 相同。 *:z* *E144* :{range}z[+-^.=]{count} 显示包围 {range} 指定行的若干行文本,如果没有 {range}, 这显示当前行上下的文本。如果有 {count},它指定你能看到 的行数。不然,使用当前的窗口大小。 :z 可以单独使用,也可以后跟数个标点符号中的一个。他们 有如下的效果: 标记 首行 末行 新位置 ---- ---------- --------- ------------ + 当前行 向前 1 屏 向前 1 屏 - 向后 1 屏 当前行 当前行 ^ 向后 2 屏 向后 1 屏 向后 1 屏 . 向后 1/2 屏 向前 1/2 屏 向前 1/2 屏 = 向后 1/2 屏 向前 1/2 屏 当前行 不指定任何标记相当于指定 "+"。如果标记是 "=",当前行会 被连字符组成的两行包围。 :{range}z#[+-^.=]{count} *:z#* 和 ":z" 类似,但显示行号。 {Vi 并非所有版本都有此功能和所有这些参数} *:=* := 显示末行的行号。 :{range}= 显示 {range} 范围内最后一行的行号。例如,打印当前行 号: :.= :norm[al][!] {commands} *:norm* *:normal* 执行若干普通模式命令 {commands}。这使得在命令行上执行 普通模式命令成为可能。{commands} 的执行就像从键盘输入 那样。撤销命令会撤销所有的命令。如果给出 [!],不使用映 射。{commands} 必须是完整的命令。如果 {commands} 没有 完整给出一个命令,未完成的最后那个命令会被终止,如同 键入了<Esc><C-C> 一样。":normal" 还在工作的时候, 显示不会被刷新。这意味着插入命令也必须完整 (要开始插入 模式,见 |:startinsert|)。":" 命令也必须完整。 {commands} 不能以空格开始,如果要,前面加个 1 (一)。一 个空格就是空格。 {commands} 里忽略 'insertmode' 选项。 该命令后面不能跟其他命令。因为任何 '|' 都被认为是命令 的一部分。 该命令可以递归使用,但是深度不能超过 'maxmapdepth'。 如果一个不可重新映射的映射 |:noremap| 调用该命令,它的 参数就因而还是有可能被重新映射。 一个替代的方法是 |:execute|,它可以用表达式作为参数。 这样就可使用可显示字符 (译者注: 似应为不可显示字符)。 例如: :exe "normal \<c-w>\<c-w>" {Vi 当然无此功能} {only 只有当编译时加入 |+ex_extra| 特性才可用} :{range}norm[al][!] {commands} *:normal-range*{range} 指定的范围中的每行执行若干普通模式命令 {commands}。在执行 {commands} 之前,光标先定位在该行的 的第一列。除此以外,和没有给出范围的 ":normal" 命令并 无差别。 {Vi 无此功能} {only 只有当编译时加入 |+ex_extra| 特性才可用} *:sh* *:shell* *E371* :sh[ell] 该命令启动一个外壳。外壳退出后 (执行完 "exit" 命令), 你会回到 Vim。外壳命令的名字来自 'shell' 选项。 *E360* 注意: 当 Vim 在 Amiga 上通过编译器的 QuickFix 模式时启 动时,该命令不能使用。这是因为编译器把标准输入设为非交 互模式。 *:!cmd* *:!* *E34* :!{cmd} 在外壳里执行 {cmd} 命令。也可参见 'shell' 和 'shelltype' 选项。 {cmd} 里的任何 '!' 都被前一个外部命令所取代 (参见 'cpoptions'),除非之前有反斜杠。这时反斜杠被去掉。例 如: "!ls" 之后的 "!echo ! \! \\!" 实际执行 "echo ls ! \!"。 命令执行之后,检查当前文件的修改时间 |timestamp|。 {cmd} 里不能有 '|',见 |:bar|。 {cmd} 以换行符结尾,其后的内容被理解为另外一个 ":" 命 令。不过,如果换行之前有反斜杠,该反斜杠被去掉,{cmd} 继续接受参数。无论之前有多少个反斜杠都是如此。只有一个 会被去掉。 Unix 上命令通常在非交互的外壳里运行。如果你希望用交互 外壳 (比如要用别名机制 aliases),设置 'shellcmdflags' 为 "-ic"。Win32 上可参见 |:!start|。 Vim 在命令结束以后重画屏幕,因为命令可能显示任何文本。 因此,你会有一个按回车的提示,以便你看到执行结果。要避 免这一点: :silent !{cmd} 这样屏幕就不会重画。如果确实有输出,你需要用 CTRL-L 或 ":redraw!" 来刷新。 参见 |shell-window|。 *:!!* :!! 重复上次的 ":!{cmd}"。 *:ve* *: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* *+ARP* 仅对 Amiga 有效: 支持 ARP B *+arabic* 支持阿拉伯语 |Arabic| N *+autocmd* |:autocmd|,自动命令 m *+balloon_eval* 气泡表达式支持 |balloon-eval| N *+browse* |:browse| 命令 N *+builtin_terms* 一些内建终端项 |builtin-terms| B *++builtin_terms* 最大内建终端项支持 |builtin-terms| N *+byte_offset* 支持 'statusline' 选项的 'o' 标志位、"go" 和 ":goto" 命令。 N *+cindent* |'cindent'|, C 缩进 N *+clientserver* Unix 和 Win32: 远程调用 |clientserver| *+clipboard* 剪贴板支持 |clipboard| N *+cmdline_compl* 命令行补全 |cmdline-completion| N *+cmdline_hist* 命令行历史 |cmdline-history| N *+cmdline_info* |'showcmd'| 和 |'ruler'| N *+comments* 支持 |'comments'| N *+cryptv* 加密支持 |encryption| B *+cscope* 支持 |cscope| N *+dialog_gui* 支持 |:confirm| 显示 GUI 对话框。 N *+dialog_con* 支持 |:confirm| 显示控制台对话框。 N *+dialog_con_gui* 支持 |:confirm| 显示 GUI 或控制台对话框。 N *+diff* |vimdiff| 和 'diff' N *+digraphs* |digraphs| *E196* *+dnd* "~ 寄存器的拖放支持 |quote_~|。 B *+emacs_tags* |emacs-tags| 文件 N *+eval* 表达式计算 |eval.txt| N *+ex_extra* Vim 附加的 Ex 命令: |:center|、|:left|、|:normal|、 |:retab| 和 |:right| N *+extra_search* |'hlsearch'| 和 |'incsearch'| 选项。 B *+farsi* |farsi| 波斯语言 N *+file_in_path* |gf|、|CTRL-W_f| 和 |<cfile>| N *+find_in_path* 包含文件搜索: |[I|、|:isearch|、|CTRL-W_CTRL-I|、 |:checkpath|,等等。 N *+folding* 折叠 |folding| *+footer* 信息页脚 |gui-footer| *+fork* 只对 Unix 有效: |fork| 外壳命令 N *+gettext* 消息翻译 |multi-lang| *+GUI_Athena* 只对 Unix 有效: Athena |GUI| *+GUI_neXtaw* 只对 Unix 有效: neXtaw |GUI| *+GUI_BeOS* 只对 BeOS 有效: BeOS |GUI| *+GUI_GTK* 只对 Unix 有效: GTK+ |GUI| *+GUI_Motif* 只对 Unix 有效: Motif |GUI| *+GUI_Photon* 只对 QNX 有效: Photon |GUI| m *+hangul_input* 韩语 (Hangul) 输入支持 |hangul| *+iconv* 编译时有 |iconv()| 函数,或有 |/dyn| N *+insert_expand* |insert_expand| 插入模式补全 N *+jumplist* 跳转表 |jumplist| B *+keymap* 键盘映射表 |'keymap'| B *+langmap* 语言映射表 |'langmap'| N *+libcall* 函数库调用 |libcall()| N *+linebreak* |'linebreak'|、|'breakat'| 和 |'showbreak'| N *+lispindent* |'lisp'| N *+listcmds* Vim 的缓冲区列表相关命令 |buffer-hidden| 和参数列表 |:argdelete| N *+localmap* 支持缓冲区的局部映射 |:map-local| N *+menu* 菜单 |:menu| N *+mksession* 创建会话 |:mksession| N *+modify_fname* 文件名修饰符 |filename-modifiers| N *+mouse* 鼠标处理 |mouse-using| N *+mouseshape* 鼠标形状 |'mouseshape'| B *+mouse_dec* 只对 Unix 有效: Dec 终端鼠标处理 |dec-mouse| N *+mouse_gpm* 只对 Unix 有效: Linux 终端鼠标处理 |gpm-mouse| B *+mouse_netterm* 只对 Unix 有效: netterm 终端鼠标处理 |netterm-mouse| N *+mouse_pterm* 只对 QNX 有效: pterm 终端鼠标处理 |qnx-terminal| N *+mouse_xterm* 只对 Unix 有效: xterm 终端鼠标处理 |xterm-mouse| B *+multi_byte* 韩国语和其他多字节语言 |multibyte| *+multi_byte_ime* Win32 多字节字符的输入法 |multibyte-ime| N *+multi_lang* 非英语语言支持 |multi-lang| m *+netbeans_intg* |netbeans| m *+ole* 只对 Win32 GUI 有效: |ole-interface| *+osfiletype* 支持 'osfiletype' 选项和自动命令的文件类型检查。 |autocmd-osfiletypes| N *+path_extra* 'path' 和 'tags' 的向上和向下搜索 m *+perl* Perl 接口 |perl| m *+perl/dyn* Perl 接口 |perl-dynamic| |/dyn| *+postscript* |:hardcopy| 可以写 PostScript 文件 N *+printer* |:hardcopy| 命令 m *+python* Python 接口 |python| m *+python/dyn* Python 接口 |python-dynamic| |/dyn| N *+quickfix* |:make| 和 |quickfix| 命令 B *+rightleft* 从右到左输入 |'rightleft'| m *+ruby* Ruby 接口 |ruby| m *+ruby/dyn* Ruby 接口 |ruby-dynamic| |/dyn| N *+scrollbind* 滚动绑定|'scrollbind'| B *+signs* 标号 |:sign| N *+smartindent* |'smartindent'| m *+sniff* SNiFF 接口 |sniff| N *+statusline* 'statusline'、'rulerformat' 选项和 'titlestring' 和 'iconstring' 的特殊格式 m *+sun_workshop* |workshop| N *+syntax* 语法高亮 |syntax| *+system()* 只对 Unix 有效: |+fork| 的相反特性 N *+tag_binary* 标签文件的二分查找 |tag-binary-search| N *+tag_old_static* 支持静态标签的旧方法 |tag-old-static| m *+tag_any_white* 标签文件里允许空白 |tag-any-white| m *+tcl* Tcl 接口 |tcl| m *+tcl/dyn* Tcl 接口 |tcl-dynamic| |/dyn| *+terminfo* 用 |terminfo| 代替 termcap N *+termresponse* 支持 |t_RV| 和 |v:termresponse| N *+textobjects* 文本对象 |text-objects| 选择 *+tgetent* 只对非 Unix 有效: 可以使用外部 termcap N *+title* 设置窗口标题 |'title'| N *+toolbar* GUI 工具栏 |gui-toolbar| N *+user_commands* 用户定义命令。|user-commands| N *+viminfo* |'viminfo'| N *+vertsplit* 垂直分割窗口 |:vsplit| N *+virtualedit* |'virtualedit'| S *+visual* 可视模式 |Visual-mode| N *+visualextra* 额外的可视模式命令 |blockwise-operators| N *+vreplace* |gR| 和 |gr| N *+wildignore* 忽略文件通配 |'wildignore'| N *+wildmenu* 匹配菜单 |'wildmenu'| S *+windows* 多于一个窗口 m *+writebackup* |'writebackup'| 缺省打开 m *+xim* X 输入法 |xim| *+xfontset* X 字体集支持 |xfontset| *+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" 命令区别不同版本的不同行 为。{Vi 无此功能} *:redi* *:redir* :redi[r][!] > {file} 重定向消息到文件 {file}。将命令的输出消息写到该文件, 直到重定向结束。消息也同时显示在屏幕上。如果有 [!],覆 盖已存在的文件。如果没有但文件 {file} 存在,该命令会失 败。 一次只能激活一个 ":redir"。也就是,调用 ":redir" 开始 重定向到新的目标之前,任何已激活的重定向都会被关闭。 如果不想在屏幕上显示消息或者命令的回显,在函数里调用命 令,以 ":silent call Function()" 方式调用该函数。 {Vi 无此功能} :redi[r] >> {file} 重定向消息到文件 {file},如果文件 {file} 已存在,附加 在其后。{Vi 无此功能} :redi[r] @{a-zA-Z} 重定向消息到寄存器 {a-z}。如果给出的名字是大写 {A-Z}, 附加到已有内容之后。{Vi 无此功能} :redi[r] @* 重定向消息到剪贴板。{Vi 无此功能} :redi[r] @" 重定向消息到无名寄存器。{Vi 无此功能} :redi[r] END 结束消息的重定向。{Vi 无此功能} *:sil* *: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"。 *:verb* *:verbose* :[count]verb[ose] {command} 执行命令 {command},执行期间 'verbose' 设为 [count]。 如果忽略 [count],缺省为 1。 在此基础之上再应用 ":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 *K* K 运行程序,查找光标下的关键字。该程序的名字由 'keywordprg' (kp) 选项给出 (缺省是 "man")。该关键字由 字母、数值和 'iskeyword' 里的字符组成,它出现在光标所 在或右侧的位置。以下命令可以达到同样的效果 :!{program} {keyword} 在 Vim 的 tools 目录下有一个示例程序。它叫作 'ref',做 简单的拼写检查。 特例: - 如果 'keywordprg' 为空,使用 ":help" 命令。此时,如 果要找到更多帮助,应该在 'iskeyword' 里加入更多的字 符。 - 如果 'keywordprg' 是 "man",K 之前的计数会被插在 "man" 命令之后和关键字之前。例如,如果光标在 "mkdir" 之上用 "2K",结果是: !man 2 mkdir - 如果 'keywordprg' 是 "man -s", K 之前的计数会插在 "-s" 之后。如果没有计数,则去掉 "-s"。 {Vi 无此功能} *v_K* {Visual}K 和 "K" 类似,但用可视的高亮文本代替关键字。只在高亮文 本不超过一行时有效。{Vi 无此功能} [N]gs *gs* *:sl* *:sleep* :[N]sl[eep] [N] [m] 停止 (睡眠) [N] 秒。如果有 [m],停止 [N] 毫秒。"gs" 前 的计数总是表示秒数。缺省值是 1 秒。 :sleep "睡眠一秒 :5sleep "睡眠五秒 :sleep 100m "睡眠一百毫秒 10gs "睡眠十秒 可以被 CTRL-C (MS-DOS 上的 CTRL-Break) 中断。 "gs" 代表 "goto sleep"。睡眠时光标位于文本处 (如果可见 的话)。{Vi 无此功能} *g_CTRL-A* g CTRL-A 只有在 Vim 编译时定义了 MEM_PROFILING 才有效 (这很少 见): 显示内存用量的统计。只对调试 Vim 有用。

2. 线上帮助 *online-help*

*help* *<Help>* *:h* *:help* *<F1>* *i_<F1>* *i_<Help>* <Help> 或 :h[elp] 打开一个窗口并以只读方式显示帮助文件。如果已经打开了一 个帮助窗口,就继续使用那个窗口。不然,如果当前窗口占据 了屏幕的完整宽度或者至少有 80 个字符宽,帮助窗口会出现 在当前窗口的正上方。再不然,新窗口就开在最上方。 如果主帮助文件有多个语言版本,'helplang' 选项选择使用 的语言。 {Vi 无此功能} *{subject}">{subject}* *E149* *E661* :h[elp] {subject} 类似于 ":help",但附加跳转到 {subject} 标签上。 {subject} 可以包含 "*"、"?" 和 "[a-z]" 这样的通配符: :help z? 跳到任何包含 "z" 的命令的帮助 :help z. 跳到关于 "z." 的帮助 如果不能完全匹配该模式,或者有多个匹配,那就使用 "最 好" 的匹配。这里,有一个相当复杂的算法来排定匹配的优先 顺序。它的计算涉及到以下诸方面: - 大小写完全相同的优先于大小写不完全相同的。 - 开始于非字母数字之后的优先于从单词中间开始的。 - 位于或接近标签开始处的优先于离此距离较远的。 - 匹配的字母数字字符越多越优先。 - 匹配越短的越优先。 如果该 {subject} 有多个语言的帮助,'helplang' 选项用来 选择所用的语言。要找到某个标签某个特定的语言版本,附加 上 "@ab",其中 "ab" 是双字母的语言代码。参见 |help-translated|。 注意 给出越长的 {subect},找到的匹配就越少。使用命令行 补全功能 (在 ":help subject" 之后输入 CTRL-D),你会了 解这是如何工作的。 如果有多个匹配,你可以通过敲击 CTRL-D 得到它们的列表。 例如: :help cont<Ctrl-D> 要使用正规式 |pattern|,先 ":help",然后在帮助窗口里使 用 ":tag {pattern}"。这时,":tnext" 命令可以跳转到后一 个匹配,"tselect" 列出所有的匹配并让你选择一个。 :help index| :tse z. 该命令可以后面跟一个 '|' 并紧跟另外一个命令。不过,你 不需要在 help 命令里转义 '|'。所以下面这些都没问题: :help | :help k| only 注意 如果 '|' 之前有空格,它是 ":help" 参数的一部分。 你也可以用 <LF><CR> 来分隔 help 命令和其后的命令。 你需要先输入 CTRL-V,再输入 <LF><CR>。例如: :help so<C-V><CR>only {Vi 无此功能} :h[elp]! [subject] 类似于 ":help",但在非英语帮助文件里,先查找包含和当前 文件相同语言的标签的文件。参见 |help-translated|。 *:helpg* *:helpgrep* :helpg[rep] {pattern} 搜索所有的帮助文本并给出一个匹配 {pattern} 行的列表。 跳转到第一个匹配。你可以用 |quickfix| 命令来浏览其它的 匹配。例如,|:cnext| 会跳到下一个。在 quickfix 窗口 里,也可以用 |:cwindow| 得到所有的匹配的列表。 {pattern} 视为 Vim 的正规表达式 |pattern|。 不使用 'ignorecase',你可以加上 "\c" 来忽略大小写。 大小写敏感的搜索示例: :helpgrep Uganda 大小写不敏感的搜索示例: :helpgrep uganda\c 后面不能跟其他的命令。其余部分都被当作模式的一部分。如 果需要,可以用 |:execute|。 不会在压缩的帮助文件里搜索 (Debian 压缩帮助文件)。 {Vi 无此功能} 如果不给出参数,|:help| 会打开 'helpfile' 选项指定的文件。否则,就会在 'runtimepath' 选项指定的多个路径中所有的 "doc/tags" 文件里查找所要求的标签。 帮助窗口的起始高度可以用 'helpheight' 选项来设置 (缺省是 20)。 标签用来跳转到指定的主题。有两种方法可以选择: - 在命令或选项之上用 "CTRL-]" 命令。这只有在标签是关键字 (见 'iskeyword') 才 行。"<C-Leftmouse>" 和 "g<LeftMouse>" 等价于 "CTRL-]"。 - 用 ":ta {subject}" 命令。这对于包含非关键字字符的标签也适用。 用 CTRL-T 或者 CTRL-O 跳回来。 用 ":q" 关闭帮助窗口。 如果你查找的项目有多个匹配,你可以这样依次跳转到每个匹配: 1. 先打开帮助窗口。 2. 用 ":tag" 命令,标签前加上斜杠。例如: :tag /min 3. 用 ":tnext" 跳转到下一个匹配的标签。 你可以为插件或其他项目增加帮助文件。为此,你并不需要修改现有的帮助文件。见 |add-local-help|。 关于如何写一个本地的帮助文件,见 |write-local-help|。 注意: 本地帮助文件的标题行会自动列在帮助文件 "help.txt" 的 "LOCAL ADDITIONS" 一节 |local-additions|。只有在 Vim 里实际察看该文件才会这么做,该文件本身并没 有被修改。这是通过动态地遍历所有帮助文件并提取每个文件的首行来完成的。其中,跳 过 $VIMRUNTINE/doc 里的文件。 (译者注: 目前,即使使用经过翻译的帮助,本地帮助文件只能在英文的 help.txt 里看 到。用 :help@en 访问。) *help-xterm-window* 如果你想在另外一个 xterm 窗口里察看帮助,可以用如下的命令: :!xterm -e vim +help & *:helpfind* *:helpf* :helpf[ind] 和 |:help| 类似,但用一个对话框来提示输入参数。 这只是为了向后兼容的需要。它现在执行 ToolBar.FindHelp 菜单项而不是内建的对话框。 {only 只有在编译时加入 |+GUI_GTK| 特性才有效} {Vi 无此功能} *:helpt* *:helptags* *E154* *E150* *E151* *E152* *E153* *E670* :helpt[ags] {dir} 为目录 {dir} 生成帮助标签文件 tags。它扫描该目录中所有 的 "*.txt" 和 "*.??x" 文件中帮助标签定义。标签定义出现 在星号之间。"*.??x" 文件是经过翻译的文件。它们相应产生 "tags-??" 文件,参见 |help-translated|。所生成的标签文 件经过排序。 如果其中有重复项,会给出错误信息。 直接覆盖已有的标签文件,不会有提示。 例如,要重建运行时目录的帮助标签 (需要有相应写权限): :helptags $VIMRUNTIME/doc {Vi 无此功能} 翻 译 帮 助 文 件 *help-translated* 除了原始的英语帮助文件外,我们可以添加其他语言的翻译版本。Vim 会在所有 'runtimepath' 的目录的 "doc" 子目录里查找帮助文件。这只有在编译时加入 |+multi_lang| 特性才会有效。 帮助文件的翻译版本包含如下文件: help.abx howto.abx ... tags-ab "ab" 是一个双字母的语言代码。这样,中文的文件名是: help.cnx howto.cnx ... tags-cn 'helplang' 选项设置若干语言偏好。 缺省值根据当前环境设置。Vim 会先在偏好的语言 里查找匹配的标签。如果没有,就使用英语版本。 要查找某一特定的语言的标签,在标签后面加上 "@ab",其中的 "ab" 是两字节的语言代 码。示例: :he user-manual@cn :he user-manual@en 前者查找中文的用户手册,即使 'helplang' 为空。后者查找英语用户手册,即使 'helplang' 设置为 "cn"。 ":help" 的命令行补全只会在有多个语言版本的标签时显示 "@en" 后缀。如果只有英语 版本,"@en" 就省略。 如果在一个非英语帮助文件里使用 |CTRL-]| 或者 ":help!",Vim 会先找相同语言的标 签。如果没有,再根据 'helplang' 选择语言。 Help 文件一定要使用 latin1 或 utf-8 编码。Vim 如果发现首行有非 ASCII 的字符, 就假设是 utf-8 编码。所以,你至少要翻译头部的 "For Vim version"。 同一个目录里相同语言的帮助文件必须使用相同的编码。不同语言或者相同语言但在不同 的目录下可以使用不同的编码。 为译者的提示: - 不要翻译标签本身。这样才能用 'helplang' 来指定语言偏好。你可以在自己的语言里 加入新的标签。 - 如果不想翻译文件的部分内容,用 "tag@en" 的形式标记英语版本的标签。 - 生成一个包,包含所有的帮助和和标签文件,以便下载。用户把它解开到某个 "doc" 目录下就可以开始使用了。请告知 Bram,他可以在 www.vim.org 上给加一个链接。 - 用 |:helptags| 命令生成标签文件 tags。该命令会在指定目录下找到所有语言的版 本。

3. 打印 *printing*

在 MS-Windows 上 Vim 可以在任何打印机上打印你的文本。在别的系统上,它产生一个 PostScript 文件。该文件能直接发送到 PostScript 打印机上,也能通过类似 ghostscript 的程序用在别的打印机上。 3.1 PostScript 打印 |postscript-printing| 3.2 PostScript 打印编码 |postscript-print-encoding| 3.3 PostScript 打印疑难解答 |postscript-print-trouble| 3.4 PostScript 工具 |postscript-print-util| 3.5 换页字符 |printing-formfeed| {Vi 无此功能} {only 只有在编译时加入 |+printer| 特性才有效} *:ha* *:hardcopy* *E237* *E238* *E324* :[range]ha[rdcopy][!] [arguments] 打印 [range] 指定的行 (缺省是整个文件)。 在 MS-Windows 上,会显示打印对话框,用来选择打印机和 纸张尺寸等。[!] 版本跳过对话框。这里,打印机由 'printdevice' 指定。如果 'printdevice' 为空,就使用 系统缺省打印机。 对于非 MS-Windows 的系统,先在一个临时文件写入 Postscript,然后用 'printexpr' 打印它。这时, [arguments] 可以在 'printexpr' 里通过 |v:cmdarg| 得到。 否则的话,[arguments] 被忽略。'printoptions' 可以用来 指定纸张尺寸,是否双面打印,等等。 :[range]ha[rdcopy][!] >{filename} 同上,但把 Postscript 打印到文件 {filename}。 其中,"%" 等结构通过 |cmdline-special| 得到扩展。 需要小心的是,现存的同名文件将被不加提示的覆盖。 {only 必须编译时加入 |+postscript| 特性才能有此功能} 在 MS-Windows 上应使用打印机驱动程序的 "输出到文件" 功能。 打印过程中显示完成的页号和百分比。要中断打印,按中断键 (CTRL-C 或者在 MS-系统 里。CTRL-Break)。 'printfont' 和 'printoptions' 选项控制打印输出。'printheader' 指定页眉的格式。 打印文件根据指定的边界 (margin) 排版,这不受当前窗口的 'wrap' 或 'linebreak' 设置影响。'printoptions' 里的 "wrap" 项可以用来关闭回绕。 打印的文本使用当前的高亮色彩,但有以下考虑: 1) 正常的背景色总是白色 (白纸的颜色)。 2) 白色文本和缺省前景总是黑色,这样你才能看得出来! 3) 如果 'background' 是 "dark",则颜色会加深,否则在白纸上它们因太亮而无法清晰 辨别。 3.1 PostScript 打印 *postscript-printing* *E455* *E456* *E457* *E624* 只要你有足够的磁盘空间,产生一个 PostScript 文件当无问题。你需要正确安装运行时 文件 (如果你能找到帮助文件,它们大概都已经安装好了)。 PostScript 打印有若干限制: - 'printfont' - 字体名被忽略 (总是用 Courier 家族字体 - 它应在所有 PostScript 打印机上可用) 但还能指定字体大小。 - 'printoptions' - 产生 PostScript 输出时使用了双面打印设置,但是否如此打印决 定于打印机本身。如果打印机不支持双面打印,则该设置应简单给予忽略。但是有些打 印机彻底不能打印。 - 8 位支持 - 尽管很多 8 位打印字符编码得到支持,还是有可能部分字符无法打印。这 决定于打印机所带的字体是否能识别该字符。丢失的字符会以一个倒转的问号代替,或 者如果该字体不能识别该字符的话,则留一个空格。安装新版的 Courier 字体家族可 能会使某一个编码里的字符完全得到支持。 - 多字节支持 - 目前,VIM 会试图把多字节字符转换为 'printencoding' (如果为空, latin1) 所指定的 8 位编码。不能成功转换的字符会显示为未知字符。如果 Vim 不 能完成该转换,打印将会失败。 3.2 自定义 8 位打印字符编码 *postscript-print-encoding* *E618* *E619* 打印 8 位字符数据,如果要使用你自己的打印字符编码,你需要定义自己的 PostScript 字体编码。关于如果定义字体编码向量的细节超出了本帮助文件的范围。为此,你可查阅 Addison-Wesley 出版的 PostScript 语言参考手册第三版,或从 http://www.adobe.com 得到 PDF 版本。以下,说明一下如果使 Vim 找到并使用你自己的打印字符编码。 i. 为你的编码向量定义一个唯一的名字,以不与 VIM 使用的已识别的或标准的编码名 字冲突为原则 (这些编码可以参见 |encoding-names|)。最好是一个别人也不太可能 使用的名字。 ii. 把 $VIMRUNTIME/print/latin1.ps 复制到你的 'runtimepath' 里的 print 子目录 并换成你选好的唯一的名字。 iii. 编辑你换名了的 latin1.ps。把所有出现的 latin1 替代成你的编码名 (不要忘了 %%Title: 开头的那行)。同时,把字型名字 (glyph names) 数组改成你新定义的 编码向量。该数组必须恰好有 256 项,不然你无法打印! iv. 在 VIM 里,设置 'printencoding' 为你的唯一的编码名,然后打印你的文件。 VIM 会使用你自定义的打印字符编码。 如果除了 %%Title: 开头一行里的编码名字和 %%Version:: 开头的一行里的版本以外, 你修改了前三行的顺序或者任何别的内容,Vim 会报告此资源文件有错误。 [对通晓 PostScript 者的技术解释 - VIM 打印时,查找并使用和编码同名的文件。该文 件定义一个新的名为 /VIM-name 的 PostScript Encoding 资源,其中 name 即 VIM 会使 用的打印字符编码。] 3.3 PostScript 打印疑难解答 *postscript-print-trouble* *E621* 通常唯一说明打印 PostScript 出现问题的症状是你的打印结果没有出现。如果你运气 好,你也许会得到一页打印说明,告诉你哪个 PostScript 操作符产生了使打印无法继续 下去的错误。 有若干使打印失败的可能的原因: - prolog 资源文件版本错误。prolog 资源文件包含一些 VIM 用来打印的必需的 PostScript。每个 VIM 版本需要它一个不同的版本。确信你安装了正确的运行时的文 件,而且没有在你的 'runtimepath' 里的 print 目录里保留了一个旧版本的 prolog 文件。 - 纸张大小。有些 PostScript 打印机会因为不支持请求的纸张大小而中止打印。缺省, VIM 用 A4 纸。用 'printoptions' 找到和设置你打印机合用的纸张大小。如果你找不 到所用纸张的名字,度量打印纸的尺寸,然后和 'printoptions' 里支持的纸张大小列 表逐一比较,然后用宽_和_高都最接近的纸张。 注意: 实际的纸张尺寸和列出的大小 可能稍有差异。如果没有相近的纸张被列出,那你可以试试以下讨论的 PSUtils 里的 psresize 工具。 - 双面打印 (duplex)。通常,不支持双面打印的 PostScript 打印机只是忽略该请求。 但有的打印机就彻底放弃该打印任务。试试关掉 duplex 再打印。注意: 用 PSUtils 里的工具可以手动设置双面打印 - 见下。 - 逐份打印 (collated)。和双面打印一样,大多数不支持逐份打印的打印机只是忽略该 请求。有的或许不是这样。试试关掉逐份打印的选项。 - 语法高亮。有些打印管理代码不让含有语法高亮的 PostScript 文件在黑白打印机上打 印,即使唯一用到的颜色是黑色。试试关掉语法高亮。 一个安全的 printoptions 设置是: :set printoptions=paper:A4,duplex:off,collate:n,syntax:n 把 "A4" 换成你的打印机纸最适合的纸张大小。 3.4 PostScript 工具 *postscript-print-util* 3.4.1 Ghostscript Ghostscript 是一个 PostScript 和 PDF 的解释器,从而可以显示和在非 PostScript 的打印机上打印 PostScript 和 PDF 文件。它还可以把 PostScript 文件转换成 PDF 文 件。 Ghostscript 可在多种平台上运行。 有三个可用的版本: - AFPL Ghostscript (以前的 Aladdin Ghostscript) 是对非商业用途免费的。它可如下 得到: http://www.cs.wisc.edu/~ghost/ - GNU Ghostscript 可在 GNU General Public License 下,从以下地址得到: ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/ - 用于商业产品的一个商业版本。 更多关于 Ghostscript 的信息可以在这里找到: http://www.ghostscript.com/ 该发布包含对许多非 PostScript 打印机的标准支持。如果你没找到对你的打印机的支 持,查一下 Ghostscript 网站了解如何支持其他缺省没有支持的打印机。 3.4.2 Ghostscript 预览器 Ghostscript 界面十分原始,所以有不少图形化的前端程序。它们提供了方便的 PostScript 文件选择,不同放大倍数的预览,还有打印。具体细节可查看它们提供的文 档。 X11 - Ghostview。可如下取得: http://www.cs.wisc.edu/~ghost/gv/ - gv。基于 Ghostview。可如下取得: http://wwwthep.physik.uni-mainz.de/~plass/gv/ 这里也能找到 (也许不是最新的): http://www.cs.wisc.edu/~ghost/gv/ OpenVMS - 看起来,在主代码已经支持 (未经测试)。见: http://wwwthep.physik.uni-mainz.de/~plass/gv/ Windows 和 OS/2 - GSview。可如下取得: http://www.cs.wisc.edu/~ghost/gsview/ DOS - ps_view。可如下取得: ftp://ftp.pg.gda.pl/pub/TeX/support/ps_view/ ftp://ftp.dante.de/tex-archive/support/ps_view/ Linux - GSview。流行的 Windows 和 OS/2 预览器的 Linux 版本。可如下取得: http://www.cs.wisc.edu/~ghost/gsview/ - BMV。和 Ghostview 与 gv 不同,它不使用 X 而使用 svgalib。可如下取得: ftp://sunsite.unc.edu/pub/Linux/apps/graphics/viewers/svga/bmv-1.2.tgz 3.4.3 PSUtils PSUtils 是一组操作 Postscript 文档的工具程序。可以得到许多平台上的二进制发布和 完全的源代码。PSUtils 可如下得到: http://knackered.org/angus/psutils 我们感兴趣的工具包括: - psnup. 把 PS 文件转化为 N-路打印版本。 - psselect. 选择页范围和打印顺序。 - psresize. 改变页面大小。 - psbook. 重新排列顺序和页面排版,从而打印成册。 一个程序的输出可以作为另一个的输入,从而可以创建复杂的打印文档。 N-路 打 印 psnup 工具把一个 VIM 生成的 PostScript 文件转化为一个 n-路版本 (即在一物理页上 打印 n 个逻辑页)。最简单的生成 2-路输出的方法是先如下一个创建 PostScript 文 件: :hardcopy > test.ps 然后在你的命令行上执行: psnup -n 2 test.ps final.ps 注意: 有些 Ghostscript 预览器可能会对 psnup 产生的文件给出警告 - 可以安全地忽 略。 最后,用你平台上的打印命令把 final.ps 输出到 PostScript 打印机上。(这以后,你 需要自己删除中间文件: 两个 PostScript 文件)。可以修改 'printexpr' 来执行这项打 印前的额外转换。 双 面 打 印 的 替 代 方 法 用 PS 工具 psselect 可以完成一个原始的双面打印任务。该工具有 -e 和 -o 选项, 可以分别打印一个 PS 文件的偶数页和奇数页。 先用 'hardcopy' 命令生成 PS 文件,然后如下生成只包含奇数和偶数页的新文件: psselect -o test.ps odd.ps psselect -e test.ps even.ps 然后用你平台上普通的打印命令打印 odd.ps。然后取出打印输出,翻过来,重新放到取 纸器里。然后用你平台上的打印命令打印 even.ps。现在,所有的偶数页面应该出现在奇 数页的反面。 要记住以下几点: 1. 第一页的位置。如果打印奇数页时第一页出现在最上方,那你需要倒转奇数页打印的 顺序。这可以通过 psselect 的 -r 选项完成。这样可以保证第 2 页打印在第 1 页 的反面。 注意: 倒转奇数页的打印顺序比倒转偶数页更合适。因为原始的 PS 文件里可能有奇 数页。 2. 纸张方位。取出奇数页的打印输出时,你或者需要横向翻转 (沿着长边),或者需要纵 向翻转 (沿着短边),甚至有可能要旋转 180 度。这决定于打印机 - 桌上型的喷墨打 印机可能比看不见纸张打印的路径的办公室激光打印机更明显一点。 3.5 换页字符 *printing-formfeed* 缺省,VIM 不对换页 |formfeed| 控制字符作任何特殊处理。设置 'printoptions' 的 formfeed 项,使得 VIM 可以识别换页字符,从而在新的一页里打出当前行。换页字符 提供了较为原始的打印控制。不过,还是有若干事情需要注意。 VIM 总是从包含换页字符的那行开始打印 (如果有相应设置,还包括行号),即使它是这 一行的第一个字符。这意味着,如果以换页字符开头的一行刚好在一页的第一行,VIM 就 会打印完全空白的一页。 因为行号在包含换页字符的一行的开始打印,在新页打印的该行的其余部分就不会有行号 (和 'printoptions' 里置位了 wrap 项时长行的回绕行的打印结果相同)。 如果换页字符是一行的最后一个字符,那么打印会从新页的第二行而不是第一行开始。这 是因为 VIM 在换页字符后处理行尾,从而在继续打印之前先往下移动了一行。 根据以上几点,我们推荐如果使用换页字符处理,关闭行号的打印,而且不要在行尾用换 页字符。即使如此,你还是需要调整换页符之前的行的数目,以防止偶尔出现的空白页。

4. 用 Vim 代替 less 或 more *less*

如果你用 less 或 more 程序来查阅文件,你不会有语法高亮。所以,你也许会更喜欢 用 Vim。你可以用外壳脚本 "$VIMRUNTIME/macros/less.sh" 来做到这一点。 这个外壳脚本用到 Vim 脚本 "$VIMRUNTIME/macros/less.vim"。它设置了一些映射来模 拟 less 支持的命令。除此以外,你可以正常使用 Vim 命令。 这还没有尽善尽美。例如,即使查阅短的文件,Vim 还是会使用整屏。但对大多数应用而 言,这已经足够好了。何况你还有语法高亮呢。 "h" 键给你一个可用命令的简短小结。 vim:tw=78:ts=8:ft=help:norl:

Generated by vim2html on 2006年 06月 24日 星期六 00:27:59 UTC