gui

gui.txt 适用于 Vim 9.0 版本。 最近更新: 2022年7月 VIM 参考手册 by Bram Moolenaar 译者: Willis Vim 的图形用户界面 gui GUI 1. 启动 GUI gui-start 2. 滚动条 gui-scrollbars 3. 鼠标控制 gui-mouse 4. 使用 GUI 进行选择 gui-selections 5. 菜单 menus 6. 字体 gui-font 7. 附加 gui-extras 8. 外壳命令 gui-shell 其它的 GUI 文档: gui_x11.txt 关于 X11 GUI 的特定内容。 gui_w32.txt 关于 Win32 GUI 的特定内容。

1. 启动 GUI gui-start E229 E233

首先,需要确定你确实有包含 GUI 代码的 Vim 版本。你可以用 ":version" 命令检查这 一点。它应该输出 "with xxx GUI",而 "xxx" 是 X11-Motif、Photon、GTK2、GTK3 等,或者 "MS-Windows 32 bit GUI version"。 如何启动 GUI 决定于你的系统。多数情况下,你可以这样启动 Vim 的 GUI 版本: gvim [options] [files...] GUI 和非 GUI 版本在 Vim 的 X11 版本上都可以运行。见 gui-x11-start gui-init gvimrc .gvimrc _gvimrc $MYGVIMRC gvimrc 文件是 GUI 专用的启动命令应该放置的地方。它总在 vimrc 文件之后执行。 如果你有此文件,$MYGVIMRC 环境变量会保存其文件名。 GUI 启动时,开展以下初始化操作 (按照给出的顺序): - 'term' 选项设为 "builtin_gui",复位终端选项到其 GUI 的缺省值 terminal-options 。 - 如果存在系统菜单文件,执行之。该文件名通常是 "$VIMRUNTIME/menu.vim",可用 ":version" 检查。另见 $VIMRUNTIME 。要跳过菜单载入,在 'guioptions' 里加入 'M'。 buffers-menu no_buffers_menu 系统菜单文件包含 "Buffers" 菜单。如果不需要,在 .vimrc (不是 .gvimrc!) 里, 置位 "no_buffers_menu" 变量: :let no_buffers_menu = 1 备注: 打开语法高亮也会载入菜单文件,因此 Buffers 菜单的屏蔽须在 ":syntax on" 之前。菜单上路径名被截短到 35 个字符。你可以这样截短它们到其它长度,如 50: :let bmenu_max_pathlen = 50 - 启动 Vim 时如果用了 "-U {gvimrc}" 命令行选项,初始化过程会读入该 {gvimrc} 文 件并跳过以下步骤。如果 {gvimrc} 为 "NONE",初始化过程不读入任何文件。 - 对 Unix 和 MS-Windows 而言,如果系统 gvimrc 存在,执行之。该文件的名字通常是 "$VIM/gvimrc",可用 ":version" 检查。另见 $VIM 。 - 尝试以下位置,只使用其中第一个可用的: - GVIMINIT 环境变量存在而且非空时,把它作为 Ex 命令执行之。 - 用户 gvimrc 文件存在时,执行之。该文件的名字通常是 "$HOME/.gvimrc",可用 ":version" 检查。 - 对 Win32 而言,必要时 Vim 会设置 $HOME,见 $HOME-windows 。 - 如果没找到 "_gvimrc" 文件,尝试 ".gvimrc"。反之亦然。 保存第一个找到的文件名到 $MYGVIMRC,除非已经被设置。 - 如果置位 'exrc' 选项 (缺省 并非 如此),执行文件 ./.gvimrc。如果该文件不属于 你,会有一些安全的限制。如果没找到 ".gvimrc",尝试 "_gvimrc"。Macintosh 和 DOS/Win32 环境会先尝试 "_gvimrc"。 注意: 如果 Vim 启动时使用 "-u NONE" 或 "-u DEFAULTS" 而且没有给出 "-U" 参数, 或者使用 "-U NONE",则除了第一步以外,都不执行。 以上这些,都在通用 Vim 初始化,比如读取 .vimrc 文件,的步骤之 执行。参见 initialization 。 但 GUI 窗口只有在全部初始化执行完毕后才会打开。如果你希望在打开 GUI 窗口后执行 某些命令,使用 GUIEnter 自动事件。例如: :autocmd GUIEnter * winpos 100 50 可用 gvimrc 文件设置定制菜单 (见 :menu ),并初始化其它和终端版本不同的个人设 置。 建议你把自己的 GUI 初始化部分放在: Unix $HOME/.gvimrc 或 $HOME/.vim/gvimrc Win32 $HOME/_gvimrc、$HOME/vimfiles/gvimrc 或 $VIM/_gvimrc Amiga s:.gvimrc、home:.gvimrc、home:vimfiles:gvimrc 或 $VIM/.gvimrc Haiku $HOME/config/settings/vim/gvimrc 个人化初始文件会按上述的顺序依次找寻,且只读入其中第一个找到的文件。 若干选项只有在 GUI 版本的 Vim 里才有意义。它们是 'guicursor''guifont''guipty''guioptions'。和其它选项一样,文档可见 options.txt 。 如果使用 Motif 版本的 GUI (不适用于 GTK+ 或 Win32 版本),可以使用若干 X 资源。 见 gui-resources 。 另外一个在不同场合下设置颜色的方法是使用高亮组。"Normal" 组用来设置背景和前景 色。示例 (看上去很悦目): :highlight Normal guibg=grey90 "guibg" 和 "guifg" 设置覆盖正常的背景和前景设置。其它 Normal 高亮组的设置都没 有用到。使用 "guifont" 选项设置字体。 要设置在不同模式下的光标颜色,也请查看 'guicursor' 选项。 启动时 Vim 试图使窗口在屏幕上的大小合适,以免部分内容不可见。在 X 窗口系统下, 这需要一些推测。你可以用 'guiheadroom' 选项来改变窗口标题和任务栏的高度。 :winp :winpos E188 :winp[os] 显示 GUI vim 窗口以像素计的当前左上角位置。并非在所有系统上都 可以。 另见 getwinpos()getwinposx()getwinposy() 。 :winp[os] {X} {Y} E466 把 GUI vim 窗口放在给定 {X}{Y} 坐标。坐标应指定以像素计的 窗口左上角的位置。并非在所有系统上都可以。 可以在 (新版的) xterm 里使用 xterm-color 。 如果 GUI 窗口还没有打开,坐标值被记住,直到窗口打开为止。该位 置会被调整,使得窗口在屏幕上大小合适 (如果可能)。 :win :winsize E465 :win[size] {width} {height} 设置窗口高度为 {width}{height} 高,以字符计。 建议使用 ":set lines=11 columns=22" 来代替,因为容易理解这些数 值的意义。 如果你得到比期待中少的行数,检查 'guiheadroom' 选项。 如果你运行 X 窗口系统,你可以这样得到关于 Vim 运行所在的窗口的信息: :!xwininfo -id $WINDOWID :!xprop -id $WINDOWID :execute '!xwininfo -id ' .. v:windowid :execute '!xprop -id ' .. v:windowid gui-IME iBus 在 X 里依赖于 XIM 框架输入国际字符的输入法,尤其是 iBus,已知会给 gvim 带来一 些不良效果。包括不能输入空格,输入字符间有长时间的延迟,或者输入的字符不能为 应用所识别等。 一个可行的解决方法,虽然不知什么原因,是启动时用 -f 参数,不让 gvim 进入后台 执行。

2. 滚动条 gui-scrollbars

系统有若干垂直滚动条和一个水平滚动条。你可以用 'guioptions' 选项设置会出现哪一 个。 界面看起来是这样 (使用 ":set guioptions=mlrb" 的情形下): +------------------------------+ ` | File Edit Help | <- 菜单栏 (m) ` +-+--------------------------+-+ ` ^ ^ ` # 文本区域 # ` | | | | ` v __________________________ v ` Vim 窗口间的 -> |-+ File.c 5,2 +-| ` 普通状态行 ^ """""""""""""""""""""""""" ^ ` | | | | ` | | 另一个文件缓冲区。 | | ` | | | | ` # # ` 左滚动条 (l) -> # # <- 右滚动条 (r) ` # # ` | | | | ` v v ` +-+--------------------------+-+ ` | |< #### >| | <- 底部滚动条 (b) ` +-+--------------------------+-+ ` 任何滚动条或者菜单都可以关闭,只要在 'guioptions' 字符串里没有相应的字母就行 了。底部滚动条只有在置位 'nowrap' 时才有用。 垂 直 滚 动 条 gui-vert-scroll 每个 Vim 窗口都有紧挨着的滚动条,可以上下滚动来实现缓冲区内文本的位置移动。滚 动条拇指 (thumb) 指示缓冲区可见的部分。如果滚动条被一直往下拖动,最后文件的末 行会出现在窗口的顶部。 如果窗口被缩小到零高度 (因为另一个窗口的增大),其滚动条消失。在窗口恢复时才重 新出现。 如果窗口被垂直分割,该窗口会在成为当前窗口时得到滚动条。想象当前窗口的正中间有 一条贯穿窗口的垂直线。如果两边都有滚动条,而当前窗口的中间线属于左半边,那么 右面的滚动条列包含当前窗口右边各窗口的滚动条。另外一侧也是如此。 水 平 滚 动 条 gui-horiz-scroll 水平滚动条 (出现在 Vim GUI 的底部) 可以在 'wrap' 选项关闭时用来水平滚动文本。 滚动条拇指的大小设置会使得最长可见行的文本可以最大限度的左右滚动。光标在有必要 时才会移动,使得它总保持在一个可视的字符上 (除非置位了 'virtualedit')。 计算最长可见行的长度需要若干计算,而且每次有改变的时候对需要进行。如果这需要太 多时间,或者你不希望光标跳到别的行上,在 'guioptions' 里包含 'h' 标志位。这 样,滚动限于当前光标所在文本行上。 motif-intellimouse 如果你有 Intellimouse 鼠标并且 X 服务器支持滚轮,那你就可以用滚轮在 gvim 里上 下滚动文本。XFree86 4.0 和以后的版本都没有问题,一些老的版本里你需要加上补丁。 见 scroll-mouse-wheel 。 对较老的 XFree86 版本你需要给 X 服务器打上补丁。以下页面有关于 Linux 上使用 Intellimouse 的一点信息,还有补丁和 X 服务器可执行文件的链接 (后者也许不一定有 你需要的): http://www.inria.fr/koala/colas/mouse-wheel-scroll/

3. 鼠标控制 gui-mouse

鼠标只有在 'mouse' 选项设置合适的标志位时才会工作。如果打开了 GUI 的时候还没有 设置 'mouse''mouse' 选项会自动设为 "a",使得它除了在 hit-enter 提示以外的 所有的模式下都能使用。如果你不希望这样,修改 'mouse' 选项的一个好地方是在 "gvimrc" 文件里。 其它相关的选项: 'mousefocus' 窗口焦点随鼠标指针改变 gui-mouse-focus 'mousemodel' 哪个鼠标按钮执行什么动作 'mousehide' 输入文本时隐藏鼠标指针 'mousemoveevent' 允许鼠标移动事件,这样就可用 <MouseMove> 映射 'selectmode' 开始选择模式还是可视模式 一个设置这些选项的快速方法是使用 ":behave" 命令。 :behave :be :be[have] {model} 设置鼠标和选择的行为。可接受的参数是: mswin MS-Windows 行为 xterm Xterm 行为 ":behave" 的使用改变了以下选项: 选项 mswin xterm 'selectmode' "mouse,key" "" 'mousemodel' "popup" "extend" 'keymodel' "startsel,stopsel" "" 'selection' "exclusive" "inclusive" 在 $VIMRUNTIME 目录下,有一个脚本叫 mswin.vim 。它会定义一些 MS-Windows 的剪 切/复制/粘贴的键盘映射,但这是 兼容的,因为它使用了 CTRL-VCTRL-XCTRL-C 键。不过如果你不在意,使用这个命令: :so $VIMRUNTIME/mswin.vim 关于使用鼠标滚轮进行滚动的部分,见 scroll-mouse-wheel 。 3.1 使用鼠标移动光标 gui-mouse-move 在文本缓冲区某处点击鼠标左键,就会移动光标到那里! 在此模式下工作 当 'mouse' 包含...时 普通模式 'n' 或 'a' 可视模式 'v' 或 'a' 插入模式 'i' 或 'a' 选择模式和可视模式一样处理。 你可以和操作符一起使用这个功能,比如 'd' 删除从当前光标位置到你用鼠标指向的位 置。即,按 'd',然后在某处点击鼠标。 gui-mouse-focus 可以置位 'mousefocus' 选项使得键盘焦点随着鼠标指针转移。这意味着,鼠标在哪个窗 口,哪个窗口就被激活。警告: 使用菜单的时候,这并不完善,因为菜单命令总是针对最 顶上的窗口。 如果你在 ':' 行上 (或者 '/' 或 '?'),那么点击鼠标左键或右键只会把光标定位在 ':' 行上 (如果 'mouse' 包含 'c' 或 'a' 的话)。 任何情况下,点击鼠标中键可以用来粘贴当前的选择内容。 3.2 使用鼠标进行选择 gui-mouse-select 鼠标可以用来开始选择。怎样开始决定于 'mousemodel' 选项: 'mousemodel' 是 "extend": 使用鼠标右键 'mousemodel' 是 "popup": 使用鼠标左键,按住 Shift 键。 如果还没有开始选择,那么选择范围从以前的光标位置开始,到鼠标所点击的位置。如果 已经有选择,那么离鼠标最近的那端会被扩展。 如果 'selectmode' 包含 "mouse",那么选择区处于选择模式。这意味着输入正常的文本 会替代选择内容。见 Select-mode 。不然,选择区处于可视模式。 双击可以选择单词,三击可以选择行,四击可以选择矩形块。 关于如何使用选择区,见 gui-selections 。 3.3 另一种鼠标的文本选择 gui-mouse-modeless modeless-selection 以下情形使用另一种选择: - 在命令行模式下 - 在命令行窗口中,指针在另外一个窗口 - 在 hit-enter 提示时 - 当前模式不在 'mouse' 选项里 - 在 GUI 模式里,按住 CTRL 和 SHIFT 键 因为 Vim 就像没有选择区那样继续,而且没有和选择区相关联的模式,这种选择称为无 模式的选择。可以选择任何在 Vim 窗口里的文本。在文本开始的地方鼠标左键,拖到尾 部再释放。要扩展选择,在 'mousemodel' 为 "extend" 的时候,使用鼠标右键;在 'mousemodel' 为 "popup" 的时候,使用鼠标左键并按住 Shift 键。 选择区在选择文本滚动或者改变时被撤销。 在命令行上 CTRL-Y 可以用来复制选择区到剪贴板里。在插入模式下,可以使用 CTRL-O : CTRL-Y <CR>。如果 'guioptions' 包含 a 或 A (X11 上的缺省值),选择被自 动复制到 "* 寄存器里。 这时用鼠标中键就可以粘贴文本。非 X11 系统上,可以使用 CTRL-R +。 3.4 在状态行上使用鼠标 gui-mouse-status 在 Vim 窗口下方的状态行上点击鼠标左键或者右键使得该窗口成为当前窗口。实际上, 这发生在鼠标释放的时候 (以区别拖动时的点击操作)。 使用鼠标左键,状态行可以上下拖动,从而调整上下窗口的大小。这样并不改变窗口焦 点。 这同样适用于垂直分割线: 点击把焦点给左侧的窗口,左右拖动使得两侧窗口更宽和更 窄。 3.5 各种鼠标点击 gui-mouse-various <S-LeftMouse> 正向搜索鼠标点击所在的单词。 当 'mousemodel' 为 "popup" 时,该操作开始或者扩展选择 区。 <S-RightMouse> 反向搜索鼠标点击所在的单词。 <C-LeftMouse> 跳转到鼠标点击所在的标签上。 <C-RightMouse> 跳回上次标签跳转之前的位置 (同 "CTRL-T") 3.6 鼠标映射 gui-mouse-mapping 鼠标事件,包括各种修饰符,可以被映射。例如: :map <S-LeftMouse> <RightMouse> :map <S-LeftDrag> <RightDrag> :map <S-LeftRelease> <RightRelease> :map <2-S-LeftMouse> <2-RightMouse> :map <2-S-LeftDrag> <2-RightDrag> :map <2-S-LeftRelease> <2-RightRelease> :map <3-S-LeftMouse> <3-RightMouse> :map <3-S-LeftDrag> <3-RightDrag> :map <3-S-LeftRelease> <3-RightRelease> :map <4-S-LeftMouse> <4-RightMouse> :map <4-S-LeftDrag> <4-RightDrag> :map <4-S-LeftRelease> <4-RightRelease> 这些映射使得选择的使用方式符合和 Motif 应用方式,Shift + 鼠标左键允许扩展可视 区域,而不是鼠标右键。 <MouseMove> 可被映射,但要先打开 'mousemoveevent',此映射才可用。 带修饰符的鼠标映射不适用于无模式的选择。 3.7 拖放 drag-n-drop 你可以拖放一个或多个文件到 Vim 窗口里,这样就如同执行了 :drop 命令那样打开那 些文件。可用 drop_file 特性来检查是否支持拖放: has('drop_file') 。 如果这么做的时候你按住 Shift,Vim 改变到第一个放下的文件所在的目录。如果你按住 Ctrl,Vim 总会为文件分割出一个新的窗口。不然,只有当前缓冲区被改变的时候才会这 么做。 你可以在 Vim 里放下目录。这会为该目录启动探索器插件 (假设该插件被打开,不然你 会得到错误信息)。按住 Shift 这改变到该目录。 如果 Vim 碰巧在编辑命令行,放下文件的名字和目录会插入在光标位置上。这使得你在 任何 Ex 命令上都可以使用这些名字。特殊字符 (空格、制表、双引号、'|'、非 MS-Windows 系统上的反斜杠) 会被转义。

4. 使用 GUI 进行选择 gui-selections

quotestar 你可以用鼠标进行选择 (见 gui-mouse-select ),或者使用 Vim 的可视模式 (见 v )。如果 'guioptions' 里包含 'a',那么无论什么时候开始选择 (可视或选择模 式),或者选择内容发生改变的时候,Vim 成为窗口系统的主选择区的拥有者 (MS-Windows 上使用 gui-clipboard ;X11 上使用 x11-selection - 具体不管指哪 个,你应该据此理解这里所谓的主选择区)。 clipboard 有一个特殊的寄存器可以存放选择内容,这就是 "* 寄存器。除非选择文本的相关信息发 生改变 (比如你在某处按了鼠标左键),或者另一个应用想要粘贴选择文本。这时,文本 被放进 "* 寄存器。例如,剪切一行并使之成为当前的选择区/放到剪贴板上: "*dd 类似的,你想粘贴别的应用,比如通过点击鼠标中键,来选择内容的时候,该选择内容被 先放到 "* 寄存器上,然后再像其它寄存器那样被 'put' (放置)。例如,要放置选择内 容 (剪贴板的内容),可以这样: "*p 如果在 X11 中使用该寄存器,另见 x11-selection 。那里也解释了相关的 "+ 寄存 器。 注意 在从一个 Vim 粘贴文本到另一个不同的 Vim 实例的时候,选择类型 (字符、行、 或块) 也会被复制。对于其它应用,类型总是面向字符的。不过,如果通过 x11-cut-buffer 传输文本,选择类型 会丢失。 当 'clipboard' 选项包含了 "unnamed" 字符串的时候,无名寄存器和 "* 相同。这样, 你可以抽出和粘贴选择内容,而无须在这些命令前面附加 "*。

5. 菜单 menus

用户手册 usr_42.txt 有本节内容的简单介绍。 5.1 使用菜单 using-menus 基本上,菜单和映射类似。你可以定义自己的菜单,多少都可以。 Vim 的长期用户不太用菜单。但是它的优势在你可以增加自己的菜单和菜单项。它们在 你记不住键序列的功能的时候很有用。 关于如何创建不同语言的菜单,见 :menutrans 。 如果完全不想使用菜单,见 'go-M' menu.vim 缺省菜单从 "$VIMRUNTIME/menu.vim" 文件里读取。关于该路径从何而来,见 $VIMRUNTIME 。 你可以设置你自己的菜单。从缺省菜单开始是一个好主意。你可以增加 更多项目,或者如果完全不喜欢缺省菜单,从删除所有菜单开始 :unmenu-all 。你可以 把下行加到 .vimrc (不是 .gvimrc) 文件以禁止缺省的菜单的调入: :let did_install_default_menus = 1 如果你也不想载入 Syntax 菜单: :let did_install_syntax_menu = 1 Syntax 菜单第一项可以用来显示包含所有可用的文件类型的菜单 (载入需要不少时间)。 如果你确实想要启动时就同时得到所有文件类型,加入: :let do_syntax_sel_menu = 1 以下菜单项显示所有的可用配色方案,键盘映射和编译器设定: Edit > Color Scheme Edit > Keymap Tools > Set Compiler 不过,载入这些项目很花时间,因为它们要从 'runtimepath' 的众目录中搜索所有的相 关文件。因此,它们被延后载入 (通过 CursorHold 事件),你也可以手动载入之。 如果你希望系统启动时载入所有这些项目,加入: :let do_no_lazyload_menus = 1 注意 `:syntax on` 或 `:filetype on` 执行时或 .vimrc 文件载入时,会载入 menu.vim。这意味着 'encoding' 选项和消息语言 (`:language messages`) 须在那之前 设置好 (如果你想有所改变的话)。 console-menus 尽管本文档讨论 GUI,你其实也可以在控制台模式使用菜单。你需要自行载入 menu.vim ,因为在那里,这一步不是自动进行的。你可以使用 :emenu 命令和带 'wildmenu' 的命令行补全,从而能像真实的菜单系统那样对菜单项进行访问。要做到这 一点,在你的 .vimrc 文件里放入如下命令: :source $VIMRUNTIME/menu.vim :set wildmenu :set cpo-=< :set wcm=<C-Z> :map <F4> :emenu <C-Z><F4> 会启动菜单。你可以用光标移动键来选择菜单项。按 <Enter> 执行。如果你想 取消,按 <Esc>。 本功能需要在编译时加入 +menu 特性。 tear-off-menus GTK+ 2 和 Motif 支持可撕下的菜单。它们是一种有粘性的菜单,亦即一直在屏幕上存在 的弹出式菜单。如果它们不能调整大小,可能你在 defaults 文件里使用了类似于 "Vim*geometry" 的设置。你应该使用 "Vim.geometry"。 至于 GTK+ 3,从 GTK+ 3.4 开始,可撕下的菜单被废弃了。因而如果 gvim 链接了 GTK+ 3.4 或更新的版本,关闭其支持。 Win32 GUI 版本模拟 Motif 的可撕下菜单。实际上,Motif 用户很容易说出两者的区 别,但我们只希望能一样有用就够了。你也可以同时使用 :tearoff 命令和 hidden-menus ,来创建不在主菜单栏出现的浮动菜单。 5.2 创建新的菜单 creating-menus :me :menu :noreme :noremenu E330 E327 E331 E336 E333 E328 E329 E337 E792 要创建新的菜单项,使用 ":menu" 命令群。它们和 ":map" 命令群非常类似 (见 map-modes ),但是第一个参数是菜单项名。形式为 '.' 分隔的菜单或子菜单的路径, 例如: :menu File.Save :w<CR> :inoremenu File.Save <C-O>:w<CR> :menu Edit.Big\ Changes.Delete\ All\ Spaces :%s/[ ^I]//g<CR> 最后一项会在菜单栏里创建一个新的项目 "Edit",在它上面按下鼠标键,会弹出菜单, 里面包含 "Big Changes" 一项,这又是包含 "Delete All Spaces" 项的一个子菜单。如 果选择了该项,执行操作。 要创建终端模式的菜单,用 :tlmenu 而不是 :tmenu ,这和键盘映射不一致 ( :tmap )。这是因为 :tmenu 已经用于定义菜单的工具提示了。见 terminal-typing 。 菜单名里可用的特殊字符: menu-shortcut & 下一个字符是快捷键。确信该快捷键在 (子) 菜单里只使用一次。如果 你想插入按本义出现的 "&",使用 "&&"。 menu-text <Tab> 分隔菜单名和右对齐的文本。这被用来显示等价的命令输入。为了方便 起见,这里可以使用文本 "<Tab>"。如果你使用真正的制表键,别忘了 在前面加上反斜杠! 示例: :amenu &File.&Open<Tab>:e :browse e<CR> [按文本直接输入] 通过快捷键 "F" (按着 <Alt> 键),然后 "O",就可以使用这个菜单。第二部分显示为 "Open :e"。这里 ":e" 右对齐,而 "O" 有下划线,指示这是那个快捷键。 :am :amenu :an :anoremenu ":amenu" 命令可以用来一次定义除终端模式以外所有模式下的菜单项。要使得该命令正 确工作,在有些模式下需要自动插入一个字符: 模式 前面插入 后面附加 普通 不需要 不需要 可视 <C-C> <C-\><C-G> 插入 <C-\><C-O> 命令行 <C-C> <C-\><C-G> 等待操作符 <C-C> <C-\><C-G> 附加 CTRL-\ CTRL-G 是为了能在置位 'insertmode' 的时候回到插入模式。 CTRL-\_CTRL-G 示例: :amenu File.Next :next^M 等价于: :nmenu File.Next :next^M :vmenu File.Next ^C:next^M^\^G :imenu File.Next ^\^O:next^M :cmenu File.Next ^C:next^M^\^G :omenu File.Next ^C:next^M^\^G 小心: 插入模式下,因为使用 CTRL-O,只对单个普通模式的命令有效。如果你有两个或 多个命令,必须使用 ":imenu" 命令。要在任何模式下插入文本,可以使用表达式寄存器 : :amenu Insert.foobar "='foobar'<CR>P 特殊文本 <Cmd> 启动 "命令菜单",可以直接执行命令而不用切换模式。原来要用 ":...<CR>" 的地方,现在可用 "<Cmd>...<CR>" 代替。详见 <Cmd> 。例如: anoremenu File.Next <Cmd>next<CR> 注意 这里使用 'cpoptions' 里的 '<' 和 'k' 标志位 (如果包含了它们,<> 形式和原 始的键码都不会被识别)。 注意 命令行模式下的 <Esc> 执行该命令,和映射的情况相同。这是 Vi 兼容的行为。使 用 CTRL-C 退出命令行模式。 :nme :nmenu :nnoreme :nnoremenu :nunme :nunmenu "n" 开始的菜单命令用于普通模式。 mapmode-n :ome :omenu :onoreme :onoremenu :ounme :ounmenu "o" 开始的菜单命令用于操作符等待模式。 mapmode-o :vme :vmenu :vnoreme :vnoremenu :vunme :vunmenu "v" 开始的菜单命令用于可视模式。 mapmode-v :xme :xmenu :xnoreme :xnoremenu :xunme :xunmenu "x" 开始的菜单命令用于可视和选择模式。 mapmode-x :sme :smenu :snoreme :snoremenu :sunme :sunmenu "s" 开始的菜单命令用于选择模式。 mapmode-s :ime :imenu :inoreme :inoremenu :iunme :iunmenu "i" 开始的菜单命令用于插入模式。 mapmode-i :cme :cmenu :cnoreme :cnoremenu :cunme :cunmenu "c" 开始的菜单命令用于命令行模式。 mapmode-c :tlm :tlmenu :tln :tlnoremenu :tlu :tlunmenu "tl" 开始的菜单命令用于终端模式。 mapmode-t :menu-<silent> :menu-silent 要定义在命令行上不会回显的菜单,增加 "<silent>" 作为第一个参数。例如: :menu <silent> Settings.Ignore\ case :set ic<CR> ":set ic" 在使用该菜单时不会回显。但是执行命令时给出的消息仍然会。要把那些也去 掉,在执行命令时增加 ":silent": :menu <silent> Search.Header :exe ":silent normal /Header\r"<CR> "<silent>" 也可以出现 (但只能) 在 "<special>" 或 "<script>" 之后。 :menu-<special> :menu-special 定义菜单时,特殊键可用 <> 记法,即使 'cpoptions' 包含了 "<" 标志位也没问题。可 用于不希望看到设置 'cpoptions' 时出现副作用的场合。例如: :menu <special> Search.Header /Header<CR> "<special>" 必须是第一个参数或出现 (但只能) 在 "<silent>" 或 "<script>" 之后。 :menu-<script> :menu-script 菜单的 "to" 部分会检查映射。如果你不想这样。使用 ":noremenu" 命令 (或者特定模 式下的类似命令)。 如果你需要局部于脚本的映射,增加 "<script>" 作为 ":menu" 的第一个或紧跟在 "<silent>" 或 "<special>" 之后的参数。 menu-priority 你可以给菜单指定优先级。高优先级的菜单出现在右边。优先级在 ":menu" 命令之前以 数字形式给出。例如: :80menu Buffer.next :bn<CR> 缺省菜单有如下的优先级: File 10 Edit 20 Tools 40 Syntax 50 Buffers 60 Window 70 Help 9999 如果没有或者给出优先级为零,则使用 500。 弹出菜单不使用优先级。 如果系统支持 (Motif 和 GTK+),Help 菜单会出现在菜单栏的最右侧。GTK+ 2 和 3 版 本已经不再继续这么做,因为该环境现在不再鼓励右对齐帮助菜单的界面设计风格。 你可以使用超过 9999 的优先级,使得菜单能出现在 Help 菜单之后。但这是不合标准的 做法,并不鼓励。最高的可能优先级大约是 32000。最低为 1。 sub-menu-priority 相同的机制可以用来定位子菜单。这里,优先级用出现在菜单名前且用句号分隔的优先级 列表给出: :menu 80.500 Buffer.next :bn<CR> 子菜单优先级只有在不想该项目在正常的位置出现的时候才需要。例如,把某个子菜单放 在其它项目之前: :menu 80.100 Buffer.first :brew<CR> 也可以把子菜单放在其它项目之后,并期望使用缺省优先级的未来项目会加在它之前: :menu 80.900 Buffer.last :blast<CR> 如果不给出某个数字,使用缺省值 500: :menu .900 myMenu.test :echo "text"<CR> 菜单优先级只有在建立新菜单时才会用到。一旦已经存在 (比如,在别的模式下),优先 级不会改变。因此,优先级只有在菜单第一次用到的时候才需要给出。弹出菜单是一个例 外。每个模式都有单独的菜单 (普通、操作符等待、可视、插入、命令行)。每个菜单里 的顺序可以不同。这和菜单栏的菜单不同,那里所有模式下都使用相同的顺序。 注意: 现在,子菜单优先级不是在所有版本的 GUI 上都能工作。 menu-separator E332 菜单项可以用一个特殊项目分隔,它在项目间插入一些空白。根据不同系统情况,有的显 示为一条线,有的显示为虚线。这些项目必须以 '-' 开始和结尾。两者之间的部分用来 给出一个独一无二的名字。和正常的项目一样,也可以使用优先级。例如: :menu Example.item1 :做些事 :menu Example.-Sep- : :menu Example.item2 :做些别的事 注意分隔符也需要一个右手边的表达式。是什么没有关系,因为该项目永远不会选到。简 单点,用单个冒号就可以了。 gui-toolbar 目前,只有 Win32、Motif、GTK+ (X11) 和 Photon GUI 才有工具栏。适当的时候,在其 它 GUI 上也会开放这一功能。缺省的工具栏在 menu.vim 里定义。 工具栏显示与否有 'guioptions' 里的 'T' 字母控制。你可以同时有菜单和工具栏,或 者只用其中一项,甚至全不要。其外观通过 'toolbar' 选项控制。你可以在图像、文本 或者两者兼有之间选择。 toolbar-icon 工具栏定义为一个特殊的菜单,名为 ToolBar。它只有一层。Vim 如此解释该菜单里面的 项目: 1) 如果给出 "icon=" 参数,则使用该名字指定的文件。这个文件可以给出完整路径, 或者只是基础名。如果是后者,在 'runtimepath' 的 "bitmaps" 目录里搜索该文 件,就像第三点那样。例如: :amenu icon=/usr/local/pixmaps/foo_icon.xpm ToolBar.Foo :echo "Foo"<CR> :amenu icon=FooIcon ToolBar.Foo :echo "Foo"<CR> 注意在第一个例子里,需要包含扩展名,而第二个例子就不需要。 如果该文件不能打开,则尝试下面的步骤。 文件名里的空格必须用反斜杠转义。 菜单优先级必须在 icon 参数 之后 给出: :amenu icon=foo 1.42 ToolBar.Foo :echo "42!"<CR> 2) 名为 'BuiltIn##' 的项目,其中 ## 是一个数字,用来指定 Vim 第 ## 个内建的位 图。目前,有 31 个编号的位图,从 0 到 30。它们包含了多数常见的编辑操作 builtin-tools :amenu ToolBar.BuiltIn22 :call SearchNext("back")<CR> 3) 首先在 'runtimepath' 里的 "bitmaps" 里搜索某个其它名字的项目。如果找到,该 位图文件被用作工具按钮的图像。注意 准确的文件名和具体的操作系统有关: 例 如,Win32 上命令 :amenu ToolBar.Hello :echo "hello"<CR> 会找到文件 'hello.bmp'。在 GTK+/X11 上则是 'Hello.xpm'。在 GTK+ 2 上则按序 查找文件 'Hello.png'、'Hello.xpm' 和 'Hello.bmp',最先找到的被使用。 MS-Windows 和 GTK+ 2 上位图被缩放到合适的按钮大小。在 MS-Windows 上,18 乘 18 像素最好。 在 MS-Windows 上,位图使用标准的调色板,使用 16 色。浅灰色的像素会被替换成 窗口框架的颜色,而深灰色像素被换成窗口阴影的颜色。根据你的系统,也许可以使 用比这个更多的颜色。 4) 如果该位图找不到,Vim 在内建名字的列表里查找该名字。因为每个内建按钮图像都 有名字。 因此,如果没有 open.bmp 的话,命令 :amenu ToolBar.Open :e 会显示内建的 "open a file" 按钮图标。 在 menu.vim 里可以看到所有内建的名字。 5) 如果以上都不行,就显示一个可用的空白按钮。 builtin-tools 号 名字 正常定义的操作 00 New 打开新窗口 01 Open 浏览要在当前窗口打开的文件 02 Save 把缓冲区写回文件 03 Undo 撤销上次改变 04 Redo 重做上次撤销的改变 05 Cut 删除选择的文本到剪贴板 06 Copy 复制选择的文本到剪贴板 07 Paste 从剪贴板粘贴文本 08 Print 打印当前缓冲区 09 Help 打开缓冲区,显示 Vim 的内建帮助 10 Find 开始搜索命令 11 SaveAll 把所有修改过的缓冲区写回文件 12 SaveSesn 把当前的情况写到会话文件 13 NewSesn 创建一个新的会话文件 14 LoadSesn 载入会话文件 15 RunScript 浏览文件,并作为 Vim 脚本执行 16 Replace 执行 substitute 命令,给出提示 17 WinClose 关闭当前窗口 18 WinMax 使得当前窗口使用尽量多行 19 WinMin 使得当前窗口使用尽量少行 20 WinSplit 分割当前窗口 21 Shell 启动外壳 22 FindPrev 反向再次搜索 23 FindNext 正向再次搜索 24 FindHelp 提示关键字,搜索相关帮助 25 Make 运行 make,跳到第一个错误 26 TagJump 跳转至光标所在的标签 27 RunCtags 运行 Ctags,为当前目录的文件构造标签 28 WinVSplit 垂直分割当前窗口 29 WinMaxWidth 使得当前窗口使用尽量多列 30 WinMinWidth 使得当前窗口使用尽量少列 hidden-menus win32-hidden-menus 在 Win32 和 GTK+ GUI 上,以 ']' 开始的菜单名使得该菜单不会在主菜单栏里出现。你 可以用 :popup 或者 :tearoff 命令来显示之。 window-toolbar WinBar 每个窗口都可有本地工具条。使用窗口的首行,这会减少一行文本可用的空间。工具条项 目须以 "WinBar" 开始。 只能用文本。使用 Unicode 可以用特殊字符来使项目看上去像个图标。 如果不能将全部项目安放于一行,则后面几个不能使用。工具条不会回绕。 备注 Vim 执行这些命令时可能处于任何模式。菜单应为普通模式定义,执行时也不 应改变当前模式。这样,如果当然窗口处于可视模式而菜单命令没有主动改变模式的话, Vim 会继续留在可视模式。最好用 :nnoremenu 来避免副作用。 调试工具示例: nnoremenu 1.10 WinBar.Step :Step<CR> nnoremenu 1.20 WinBar.Next :Next<CR> nnoremenu 1.30 WinBar.Finish :Finish<CR> nnoremenu 1.40 WinBar.Cont :Continue<CR> 窗口工具条使用 ToolbarLine 和 ToolbarButton 高亮组。 分割窗口时,并不在新窗口中复制窗口工具条。 popup-menu 在 Win32、GTK+、Motif 和 Photon GUI 上,可以定义特殊的 "PopUp" 菜单。如果 'mousemodel' 设为 popup 或者 popup_setpos,这将是按下鼠标右键时显示的菜单。 示例: nnoremenu 1.40 PopUp.&Paste "+gP menu PopUp 5.3 显示菜单如何被映射 showing-menus 要看看现有的菜单是如何被映射的,在 menu 命令之后只使用一个参数 (就像你使用 ":map" 命令那样)。如果指定的菜单是一个子菜单,那么所有该子树下面的层次结构都会 显示。如果 :menu 后面不给出任何参数,显示所在模式下的 所有 菜单项 (例如,命令 行模式下显示 :cmenu)。 该列表里,在右手边表达式之前显示的特殊字符的含义是: * 菜单是通过 "nore" 形式定义的,以禁止重映射。 & 菜单定义时包含了 "<script>",使得重映射只限于局部于脚本的映射。 s 菜单定义时包含了 "<silent>",使它触发时不会显示映射的内容。 - 菜单被屏蔽。 注意 在 menu 命令里输入菜单名时,按 <Tab> 可以用来补全菜单项目名。 5.4 执行菜单 execute-menus :em :emenu E334 E335 :[range]em[enu] {menu} 从命令行上执行 {menu} 菜单。缺省执行普通模式的 命令。如果给出行范围 range,执行可视模式的菜 单。 如果从 <c-o> 那里调用,执行插入模式命令。例如: :emenu File.Exit :[range]em[enu] {mode} {menu} 同上,但执行 {mode} 下的菜单: 'n': :nmenu 普通模式 'v': :vmenu 可视模式 's': :smenu 选择模式 'o': :omenu 操作符等待模式 't': :tlmenu 终端模式 'i': :imenu 插入模式 'c': :cmenu 命令行模式 如果控制台模式的 vim 编译时加入 WANT_MENU,你可以用 :emenu 来访问你已经习惯的 GUI 模式下有用的菜单项目。关于一个能用于此目的的选项,见 'wildmenu'。例子又可 以见 console-menus 。 如果使用行范围 range,并且选择的行和 '<、'> 指定的范围相同,则使用最近一次可视 选择的范围执行菜单命令。 5.5 删除菜单 delete-menus :unme :unmenu :aun :aunmenu 要删除一个菜单项或者整个子菜单,使用 umenu 命令,类似于 unmap 命令。例如: :unmenu! Edit.Paste 会删除插入和命令行模式下的 Edit 菜单的 Paste 项。 注意 在 umenu 命令里输入菜单名时,按 <Tab> 可以用来补全菜单项目名。 要删除所有的菜单,可用: :unmenu-all :unmenu * " 删除普通和可视模式下的所有菜单 :unmenu! * " 删除插入和命令行模式下的所有菜单 :aunmenu * " 删除终端模式除外的所有模式下的所有菜单 :tlunmenu * " 删除终端模式下的所有菜单 如果你想去掉菜单栏: :set guioptions-=m 5.6 屏蔽菜单 disable-menus :menu-disable :menu-enable 如果你不想删除某个菜单,但想暂时屏蔽之,可以在 ":menu" 命令里使用 "enable" 或 "disable" 关键字。例如: :menu disable &File.&Open\.\.\. :amenu enable * :amenu disable &Tools.* 和其它 menu 命令一样,该命令作用于指定的模式上。注意 需要包含进来 "&" 这样的字 符,以便找到经过翻译的名字。如果参数是 "*",所有的菜单都受到影响。否则,给定的 菜单名和下面所有的子菜单 (如果存在的话) 都会受影响。 5.7 菜单示例 menu-examples 这里是一个如何用 menu 增加菜单项的例子。你可以为光标下的关键字增加菜单项。使用 寄存器 "z"。 :nmenu Words.Add\ Var wb"zye:menu! Words.<C-R>z <C-R>z<CR> :nmenu Words.Remove\ Var wb"zye:unmenu! Words.<C-R>z<CR> :vmenu Words.Add\ Var "zy:menu! Words.<C-R>z <C-R>z <CR> :vmenu Words.Remove\ Var "zy:unmenu! Words.<C-R>z<CR> :imenu Words.Add\ Var <Esc>wb"zye:menu! Words.<C-R>z <C-R>z<CR>a :imenu Words.Remove\ Var <Esc>wb"zye:unmenu! Words.<C-R>z<CR>a (这里的右手边表达式使用 <> 记法,你可以复制/粘贴这里的文本来测试这些映射,或者 把这些行加到你的 gvimrc 文件里;"<C-R>" 是 CTRL-R,"<CR>" 是 <CR> 键。 <> ) tooltips menu-tips 5.8 工具提示 (Tooltips) 和菜单提示 见用户手册的 42.4 一节。 :tmenu :tm :tm[enu] {menupath} {rhs} 为菜单或者工具定义提示。 {仅存在于 X11 和 Win32 GUI} :tm[enu] [menupath] 列出菜单提示。{仅存在于 X11 和 Win32 GUI} :tunmenu :tu :tu[nmenu] {menupath} 删除菜单或者工具的提示。 {仅存在于 X11 和 Win32 GUI} 备注: 要创建终端模式的菜单,使用 :tlmenu 代替。 如果为某菜单项定义了提示,当鼠标移过该项目时,命令行区域会出现该提示,就像标准 Windows 菜单提示出现在状态栏那样。(除非 Vim 在命令行模式的时候,这时当然什么都 不会显示。) 如果为某工具栏项目定义了提示,当鼠标移过该按钮时,提示以通常的方式出现。要改变 它们的颜色,使用 hl-Tooltip 高亮组。 "提示" 可以为每个菜单项目定义。例如,在这样定义菜单项时: :amenu MyMenu.Hello :echo "Hello"<CR> 提示可以这样定义: :tmenu MyMenu.Hello Displays a greeting. 然后这样删除: :tunmenu MyMenu.Hello 现在,工具提示只有在 X11 和 Win32 GUI 上才支持。不过,在不远的将来,应该在其它 gui 平台上也会出现。 ":tmenu" 菜单和其它菜单命令使用相同的参数。":tunmenu" 删除已存在的菜单提示,使 用方式和其它的 umenu 命令一样。 如果菜单项目不再合法,(即,在所有模式下,它的动作都被删除) Vim 为你删除菜单的 提示 (和菜单项)。这意味着 :aunmenu 彻底删除了菜单项目 - 你不需要再运行 :tunmenu 了。 5.9 弹出式菜单 在 Win32 和 GTK+ GUI 上,你可以在光标位置下生成一个菜单。这和 PopUp 菜单类似, 除了你可以弹出任何菜单树以外。 该命令只是为了后向兼容才存在,不鼓励使用。因为它的行为很奇特。 :popup :popu :popu[p] {name} 弹出菜单 {name}。菜单名必须有至少一项子项,但 不一定需要出现在菜单栏上 (见 hidden-menus )。 {仅在 Win32 和 GTK GUI 或终端上有效} :popu[p]! {name} 和上面类似,但使用鼠标指针所在的位置,而不是光 标位置。 在终端中,这是最后已知的位置,通常这是最后点击 或释放所在的位置 (和鼠标的移动不相干)。 示例: :popup File 会使得 "File" 菜单 (如果有的话) 出现在文本光标 (如果有 ! 则是鼠标指针) 的位置 上。 :amenu ]Toolbar.Make :make<CR> :popup ]Toolbar 会创建一个弹出式菜单,该菜单并不存在于主菜单栏中。 注意 在 GUI 上 :popup 命令立即返回,不等用户作出选择。终端中此命令则等待用户的 选择完成。 注意 ']' 开始的菜单不会显示。

6. 字体

本小节描述字体相关的选项。 GUIFONT gui-font 'guifont' 是告诉 Vim 要使用什么字体的选项。它最简单的形式就是单个字体名。也可 以是逗号分隔的字体名列表。使用第一个合法的字体。如果没有合法的字体则报错。 支持 'guifontset' 的系统上 (X11),如果 'guifontset' 不为空,不使用 'guifont'。见 xfontset注意: 对 GTK GUI 而言,非法的名字不会报错,总是选择并使用列表的首个单元。这是 因为 GTK GUI 并不去识别给出名字的字体,而是把它作为一个模式去在可选的字体中寻 找最佳的匹配字体,从这个意义上,匹配永远不会失败。非法的名字不要紧,因为除了 名字以外,还有一些其它的字体属性会帮助匹配的完成。 忽略逗号之后的空格。要在字体名里包含逗号,在它之前加上反斜杠。选项的设置需要 在空格和反斜杠之前加上额外的反斜杠。另见 option-backslash 。比如: :set guifont=Screen15,\ 7x13,font\\,with\\,commas 会使 Vim 先寻找字体 "Screen15",如果失败,再找 "7x13",最后是 "font,with,commas"。 如果没有载入任何字体,Vim 保持原先的设置。如果给出空的字体列表,Vim 会试图使 用别的资源设置 (对 X 而言,会寻找 Vim.font 资源),最后,选择总是可用的内建缺 省值 (X 使用的是 "7x13")。给出的字体必须是 "正常" 字体。 Vim 会试图找到相关的 粗体和斜体字体。 对于 Win32、GTK、Motif、Mac OS 和 Photon: :set guifont=* 给出字体请求对话框,从中可以选择你需要的字体。 字体名取决于不同的 GUI。 setting-guifont 提供一个为不同系统设置 'guifont' 的 方法。 GTK+ 2 和 3 GUI 的字体名看起来如此: :set guifont=Andale\ Mono\ 11 就这样多。不使用 XLFD (X 逻辑字体描述)。有报告说对中文而言,可以这样设: if has("gui_gtk2") set guifont=Bitstream\ Vera\ Sans\ Mono\ 12,Fixed\ 12 set guifontwide=Microsoft\ Yahei\ 12,WenQuanYi\ Zen\ Hei\ 12 endif (GTK+ 3 GUI 上把 gui_gtk2 换成 gui_gtk3) Mac OSX 上,你可以这么用: :set guifont=Monaco:h10 等宽字体 E236 注意 字体必须等宽 (所有字符相同宽度)。GTK 是例外: 可以接受所有字体,不 过等宽字体的视觉效果最好。 要在 X11 上预览字体,可以使用 "xfontsel" 程序。"xlsfonts" 程序给出所有 可用的字体的列表。 对 Win32 GUI 而言 E244 E245 - 字体名里接受如下选项 (选项间用 ':' 分隔): hXX - 高度为 XX (点 (point),可以是浮点数) wXX - 宽度为 XX (点 (point),可以是浮点数) WXX - 权重为 XX (见下面关于权重的备注) b - 粗体。等价于权重设为 700。 i - 斜体 u - 下划线 s - 突出 cXX - 字符集 XX。合法的字符集是: ANSI、ARABIC、BALTIC、 CHINESEBIG5、DEFAULT、EASTEUROPE、GB2312、GREEK、HANGEUL、 HEBREW、JOHAB、MAC、OEM、RUSSIAN、SHIFTJIS、SYMBOL、THAI、 TURKISH 和 VIETNAMESE。通常你会用 "cDEFAULT"。 qXX - 质量值 XX。合法的质量名为: PROOF、DRAFT、ANTIALIASED、 NONANTIALIASED、CLEARTYPE 和 DEFAULT。通常你会用 "qDEFAULT"。 若干质量值在旧式的操作系统上不支持。 - '_' 可以代替空格,这样就无须用反斜杠转义空格。 例如: :set guifont=courier_new:h12:w5:b:cRUSSIAN :set guifont=Andale_Mono:h7.5:w4.5 另见 font-sizes 。 关于权重的 备注: 字体通常提供不同的权重。Windows 上的 "正常" 权重值为 400,如 果未指定,这是寻找字体所使用的值。和名字比较,Windows 对字体的匹配更看重权重, 这意味着可能会用某个 Book 或 Medium 的字体变体而不是 Light 或 ExtraLight 的变 体。如果你觉得替代的字体权重太重了,可以显式设置低一点的权重值来抵消不合适替代 的影响。 GUIFONTWIDE gui-fontwide 如果非空,'guifontwide' 指定逗号分隔的用于双宽字符的字体列表。使用第一个能载入 的字体。 注意: 这些字体必须使用 'guifont' 指定的两倍宽度和相同的高度。如果不符合要求, 文本的绘制会不正确。 除了 GTK+ 之外的所有 GUI 版本: 'guifontwide' 只有在 'encoding' 设为 "utf-8" 并且 'guifontset' 为空或非法时才 使用。 如果设置 'guifont' 并且从中找到合法的字体,但 'guifontwide' 为空的时候,Vim 会 试图找到匹配的双宽的字体并设置 'guifontwide' 为此值。 仅限于 GTK+ GUI: guifontwide_gtk 如果设置且合法,即使 'encoding' 没有设为 "utf-8",总为双宽字符使用 'guifontwide' 。 Vim 不会试图自动寻找 'guifontwide' 的合适的值。如果 'guifontwide' 为空, Pango/Xft 会选择 'guifont' 里没有的字符的字体。所以,你完全可以不必设置 'guifontwide',除非你想改变 Pango/Xft 的选择。 仅限于 Windows +multibyte: guifontwide_win_mbyte 如果设置且合法,IME 使用 'guifontwide' 代替 'guifont'

7. 附加 gui-extras

这一节说明其它和 GUI 相关的特性。 - 在 GUI 上,按 escape 之后不需要等一秒,因为没有键码会以 <Esc> 开始。 - 在 GUI 上,输入 ^V 紧跟一个特殊键会插入 "<Key>",因为所用到的内部字符串没有 意义。也可以按下修饰符,得到 "<Modifiers-Key>"。 - 在 GUI 上,修饰符 SHIFT、CTRL 和 ALT (或 META) 可以在映射里和特殊键或鼠标一 起使用。 例如 :map <M-LeftDrag> <LeftDrag> - 在 GUI 上,若干普通键在映射等命令里可以带修饰符,它们是 <Space><Tab><NL><CR><Esc>。 - 要在 Vim 脚本里检查是不是使用 GUI,你可以这么使用: if has("gui_running") echo "是的,我们有 GUI" else echo "无聊的老终端" endif setting-guifont - 如果你在多个系统上使用同一个 vimrc 文件,你可以这样设置不同类型的 GUI 专用的 选项: if has("gui_running") if has("gui_gtk2") :set guifont=Luxi\ Mono\ 12 elseif has("x11") " Also for GTK 1 :set guifont=*-lucidatypewriter-medium-r-normal-*-*-180-*-*-m-*-* elseif has("gui_win32") :set guifont=Luxi_Mono:h12:cANSI endif endif MS Mincho 是一个推荐的日文字体。相关信息见: http://www.lexikan.com/mincho.htm

8. 外壳命令 gui-shell

X11 GUI 上,外部命令在 gvim 窗口里执行。见 gui-pty 。 警 告: 在 X11 GUI 上执行外部命令不总是可以的。"普通" 的命令,像 "ls"、"grep"、 "make" 大多数没问题。需要一个智能终端的命令,比如 "less" 和 "ispell" 就不行。 有的可能挂起,需要从另外一个终端杀死进程才能终止。所以,要小心一点。 Win32 GUI 上,外部命令在一个单独的窗口上执行。见 gui-shell-win32 。 vim:tw=78:sw=4:ts=8:noet:ft=help:norl: