GUI_X11

*gui_x11.txt*   For Vim version 6.4.  最后修改: 2005年1月


                  VIM REFERENCE MANUAL    by Bram Moolenaar
                      译者: Zimin<cranecai@users.sf.net>
                        VCD主页:http://vimcdoc.sf.net


Vim 的图形用户界面                                      *gui-x11* *GUI-X11*
                                                        *Athena* *Motif*
1. 启动 X11 GUI                 |gui-x11-start|
2. GUI 资源                     |gui-resources|
3. Shell 命令行                 |gui-pty|
4. 杂项                         |gui-x11-various|
5. GTK 版本                     |gui-gtk|
6. GNOME 版本                   |gui-gnome|
7. 编译                         |gui-x11-compiling|
8. X11 选择机制                 |x11-selection|

其他相关文章:
|gui.txt|       所有的 GUI 版本的通用功能

{Vi 没有这里提到的任何命令}


1. 启动 X11 GUI *gui-x11-start* *E665*

你可以通过以下两种方式之一来启动 GUI 版本的 Vim: gvim [options] [files...] vim -g [options] [files...] 所以,如果你将可执行文件取名为 "gvim",或者做一个叫 "gvim" 的连接,GUI 版本的 Vim 就会被自动运行。在 "gvim" 后也可以添加字符,如 "gvim-5"。 通过以下任意命令,你可以从终端版本进入 GUI: :gui [++opt] [+cmd] [-f|-b] [files...] *:gu* *:gui* :gvim [++opt] [+cmd] [-f|-b] [files...] *:gv* *:gvim* "-f" 参数在前台运行 Vim。 "-b" 参数在后台运行 Vim (默认)。 参考 |++opt| 和 |+cmd|。 *gui-fork* 当 GUI 启动时,它调用 fork() 并退出当前进程。当 gvim 从 shell 启动时,这将允 许 shell 接受其后更多的命令。如果你不想这样 (例如,当一邮件程序要等待运行的 gvim 退出时),可以用 "gvim -f" ,"vim -gf" 或 ":gui -f" 来启动。不要用 "vim -fg",因为 "-fg" 表示前台颜色。 当用 "gvim -f" 启动,然后使用 ":gui" ,Vim 将在前台运行。参数 "-f" 将被记住。 要强迫 Vim 在后台运行,使用 ":gui -b"。 "gvim --nofork" 和 "gvim -f" 的效果一样。 如果你想一直在前台运行 GUI,在 'guioptions' 加入 'f' 标志。 |-f|。

2. GUI 资源 *gui-resources* *.Xdefaults*

如果使用 Motif 或者 Athena 版本的 GUI (不是 GTK+ 或 Win32 版本),有很多 X 资源可以用。你应该使用类名 Vim 来设置。它们被列如下: 资源名称 意义 reverseVideo 布尔型: 是不是翻转视频? background 背景色 foreground 普通文字颜色 scrollBackground 滚动条颜色 scrollForeground 滚动条滑块和箭头颜色 menuBackground 菜单背景色 menuForeground 菜单前景色 tooltipForeground 提示前景色 tooltipBackground 提示背景色 font 普通文字的字体名称 boldFont 加粗文字的字体名称 italicFont 斜体文字的字体名称 boldItalicFont 加粗、斜体文字的字体名称 menuFont 菜单字体名称,编译时除去 |+xfontset| 功能 menuFontSet 菜单字体集名称,编译时加入 |+xfontset| 功能 tooltipFont 提示的字体名称 当用 |+xfontset| 功能一起编译时,这是一个 fontset 名称 geometry 启动时的窗口大小(默认和终端窗口一样) scrollbarWidth 滚动条宽度 borderWidth 边界宽度 menuHeight 菜单栏高度(仅对 Athena 有效) 只有用户通过上述资源指定了一种粗体或斜体字体时,Vim 才会使用它。初次之外 Vim 不 会根据正常字体来推测应该使用的字体。 备注:颜色也可以被 ":highlight" 命令设置。可以使用这几个组群,"Normal","Menu", "Tooltip","Scrollbar"。例如: :highlight Menu guibg=lightblue :highlight Tooltip guibg=yellow :highlight Scrollbar guibg=lightblue guifg=blue :highlight Normal guibg=grey90 *font-sizes* 备注:所有的字体(除了菜单和工具按钮提示)必须是同样大小!!!如果你不这样做, 文字将无法显示或混成一团。Vim 不检查字体大小。在屏幕象素中的尺寸必须一样。 注意 有些字体有同样的点阵尺寸但是象素尺寸却不同!另外,摆放方式也要一致(或升 或降)。你可以用 "xlsfonts -l {fontname}" 核实。 如果上述任何一个资源之后被用 Vim 命令设置,例如用 ":set guifont=Screen15",X 资源将被忽略。(目前仅支持 'guifont') 这里有个例子,你可以考虑加入到 ~/.Xdefaults 文件中: Vim*useSchemes: all Vim*sgiMode: true Vim*useEnhancedFSB: true Vim.foreground: Black Vim.background: Wheat Vim*fontList: 7x13 前三个是 Silicon Graphics 机器的标准资源,这将使 Motif 应用效果更好,强烈推荐! "Vim*fontList" Motif 菜单字体设置。例如: Vim*menuBar*fontList: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-* 在 Athena 下: Vim*menuBar*SmeBSB*font: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-* Vim*menuBar*MenuButton*font: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-* 备注: 一个更通用,更完善,可同时在 Motif 和 Athena 使用的设置字体的方法: Vim.menuFont: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-* 或者在编译进了 |+xfontset| 功能的时候: Vim.menuFontSet: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-* 用 "Vim.geometry" 替代 "Vim*geometry"。不然,将破坏菜单。 如果出现 "Cannot allocate colormap entry for "gray60" 的错误信息,试试在你的 Vim 资源中加入这些(改变成你喜欢的颜色): Vim*scrollBackground: Black Vim*scrollForeground: Blue 资源也可用 Vim 参数来设定: 参数 含义 *-gui* -display {display}{display} 上运行 Vim *-display* -iconic 图标化运行 Vim *-iconic* -background {color} 背景使用 {color} *-background* -bg {color} 同上 *-bg* -foreground {color} 普通文字使用 {color} *-foreground* -fg {color} 同上 *-fg* -ul {color} 同上 *-ul* -font {font} 普通文字使用 {font} *-font* -fn {font} 普通文字使用 *-fn* -boldfont {font} 粗体字使用 {font} *-boldfont* -italicfont {font} 斜体字使用 {font} *-italicfont* -menufont {font} 菜单使用 {font} *-menufont* -menufontset {fontset} 菜单项使用 {fontset} *-menufontset* -mf {font} 同上 *-mf* -geometry {geom} 初始时大小设为 {geom} *-geometry* -geom {geom} 同上,参见 |-geometry-example| *-geom* -borderwidth {width} 使用宽度 {width} *-borderwidth* -bw {width} 同上 *-bw* *-scrollbarwidth* -scrollbarwidth {width} 滚动条宽度使用 {width} -sw {width} 同上 *-sw* -menuheight {height} 菜单栏高度使用 {height} *-menuheight* -mh {height} 同上 *-mh* 备注:Motif 忽略此值,自动计算菜单得到 -reverse 使用逆视频 *-reverse* -rv 同上 *-rv* +reverse 不使用逆视频 *-+reverse* +rv 同上 *-+rv* -xrm {resource} 设定特指资源 *-xrm* 注意 有关逆视频的注意事项:Vim 检查最终效果是在暗的背景配亮文字。原因是有些版 本的 X11 交换颜色,有些不可以。以下两个例子都是设定了黄色字体、蓝色背景: gvim -fg Yellow -bg Blue -reverse gvim -bg Yellow -fg Blue -reverse *-geometry-example* 一个尺寸的例子: gvim -geometry 80x63+8+100 这个命令创建一个自左 8 像素,自顶 100 像素的一个 80 列宽,63 行高的窗口。

3. Shell 命令行 *gui-pty*

警告:从 GUI 中执行外部命令并不总是可行的。象 "ls"、"grep"、 "make" 这样的普通 命令一般都是有效的。那些需要智能终端的命令如,"less"、"ispell" 就未必了。有些 甚至可能使 GUI 挂起,你从而必须从另外个终端里 kill 它。所以要小心。 有两种方式可以同 shell 命令做 I/O 操作:管道和伪终端。默认是伪终端,它可以很好 的工作在许多系统上。 不幸的是,伪终端的实现在每个 Unix 系统上是不同的。并且,一些系统上需要 root 权 限。为了避免这类问题,可以在编辑文件之前先试一下。做好 kill 那个命令或 Vim 的 准备。如":r !cat" 这样的命令会导致挂起的。 如果你的无法使用伪终端,可以重置 'guipty' 选项: :set noguipty 管道可用在任一 Unix 系统上,但也有缺点: - 一些 shell 命令会注意到管道的存在,而作出不同的操作。如 ":!ls",将在一栏里列 文件。 - ":sh" 命令将不会显示提示符,但可以部分工作。 - 当使用 ":make"时,很可能无法用 CTRL-C中断。 当外部命令运行时,事先键入的内容经常丢失。这在管道和伪终端中,都有发生。这是 个已知的问题,但看上去无法解决(至少很困难)。 *gui-pty-erase* 当你的删除键工作不正常时,你应该修改 "~/.cshrc"文件,或这你所用的 shell 的等同 文件。。例如,当你使用退格键来删除字符时,反而产生了 "^H",你可以添加以下内容 到 "~/.cshrc" 中: stty erase ^H ^H 是 CTRL-H,要键入它,用 CTRL-V CTRL-H.

4. 杂项 *gui-x11-various*

*gui-x11-printing* "File/Print" 仅仅发送当前的缓冲内容到 "lpr"。没有参数或其他东西。如果你需要 其它效果,可以定义你自己的打印命令。如: :10amenu File.Print :w !lpr -Php3 :10vmenu File.Print :w !lpr -Php3 *X11-icon* 默认的 Motif 或 Athena 版本的 Vim 使用黑白按钮。在 $VIMRUNTIME/vim32x32.xpm 包含一个彩色的 Vim 图标。在 GTK+ ,这是内建的图标。不幸的是,你该怎样安装它 取决于你的窗口管理器。你可以从 'guioptions' 除去 'i' 标志,来除去黑白按钮: :set guioptions-=i 如果你使用 fvwm* 系列窗口管理器,你只需要在 .fvwm2rc 配置文件中加入: Style "vim" Icon vim32x32.xpm 要保证图标文件的位置和窗口管理器 ImagePath 语句声明中所指定的一致。要么在 .fvwm2rc 修改图标路径,要么将图标放入以下已定义的任一目录中: ImagePath /usr/X11R6/include/X11/pixmaps:/usr/X11R6/include/X11/bitmaps 备注 : 旧版本的 fvwm 使用 "IconPath" 而不是 "ImagePath"。 在 CDE "dtwm" (Motif 的一个变体)的 .Xdefaults 中加入这一行: Dtwm*Vim*iconImage: /usr/local/share/vim/vim32x32.xpm 在 "mwm" (Motif 窗口管理器)用: Mwm*Vim*iconImage: /usr/local/share/vim/vim32x32.xpm X11 中可用的鼠标指针 *X11_mouse_shapes* 当使用 |'mouseshape'| 选项时,vim 进入各种模式时鼠标指针都会自动改变(例如, 在插入,或命令模式中)。目前可用的指针如下: arrow 一个箭头指向西北 beam 象I的竖直条 size 一个箭头指着上下 busy 一个时间漏斗 blank 一个不可见的指针 crosshair 一个瘦 "+" 符号 hand1 一个暗手指向西北 hand2 一个亮手指向西北 pencil 一支笔指向东南 question 带问号的箭头 right_arrow 一个箭头指向东南 up_arrow 一个箭头指向上面 另外,任何一个 X11 内建的鼠标指针都可以通过指定一个在 X11/cursorfont.h 中 定义的整数来使用。 如果使用一个在其它系统有效,而在 X11 中无效的名字,默认的 "arrow" 就会被使用。

5. GTK 版本 *gui-gtk* *GTK+* *GTK*

GUI 的 GTK 版本的使用略有不同。 GTK _不_使用传统的 X 资源设置。所以,你的 ~/.Xdefaults 或 应用程序设置文件就 会被忽略。 许多传统的 X 命令行参数不被支持。(例如,-bg,-fg,等等)。支持的有: 命令行参数 资源名称 含义 -fn 或 -font .font 文字字体名称 -geom 或 -geometry .geometry gvim 窗口尺寸 -rv 或 -reverse *reverseVideo 白字黑底 -display 使用显示 -fg -foreground {color} 前景色 -bg -background {color} 背景色 要设置字体参阅 |'guifont'|。对 GTK,也可以使用相应的菜单选项设置。 另外,在 GTK 内部也有命令行参数。要知道如何使用以下的参数,请查看 GTK 文档: --sync --gdk-debug --gdk-no-debug --no-xshm (对 GTK+ 2 版本不使用) --xim-preedit (对 GTK+ 2 版本不使用) --xim-status (对 GTK+ 2 版本不使用) --gtk-debug --gtk-no-debug --g-fatal-warnings --gtk-module --display (GTK+ 对应的是 -display;作用相同) --screen (屏幕号;用于对 GTK+ 2.2 多头支持。) 以下的参数在用到 |+netbeans_intg| 特性时被忽略: -xrm -mf vim 的颜色设置(语法加亮)仍然一致。参考 |:highlight| 如果你想设置其它的 gui 组件(如,菜单栏,滚动条,其他等等),那些是 GTK 的特 别设置,你需要改动 gtkrc 之类的文件。至于如何改动,可参考 GTK 文档。更多的信 息请参考 http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html。 *gtk-tooltip-colors* 如,设定工具提示条为黑字亮黄色背景: style "tooltips" { bg[NORMAL] = "#ffffcc" fg[NORMAL] = "#000000" } widget "gtk-tooltips*" style "tooltips" 将这些写入文件 ~/.gtkrc 就会被 GTK+ 使用。对于 GTK+ 2 而言,你可能要修改 ~/.gtkrc-2.0。但各个发行版本不一样。 使用 Vim 作为 GTK+ 的插件 *gui-gtk-socketid* 当 GTK+ 版本的 Vim 启动时,它会创建自己的顶层窗口(就是 'GtkWindow')。GTK+ 提供了用 GtkSocket 和 GtkPlug 容器嵌入的便利手段。如果一 GTK+ 应用程序在它的 一个窗口里创建了一个 GtkSocket 容器,另外一个程序就可以使用该 socket 的 ID 来建立一个 GtkPlug widget,从而将自己完全嵌入上一个应用程序中。 如果你通过命令行参数 '--socketid' 传给 Vim 一个十进制或十六进制的值,Vim 将使 用该值来创建一个 GtkPlug widget。这将使 Vim 作为 GTK 的插件来运行。 这其实是一个编程的接口,必须有专门的应用程序支持(该程序必须正确地启动 Vim )。 有关更多的 GTK+ socket 信息,参考http://www.gtk.org/api/ 备注:这个功能需要最新的 GTK 版本。GTK 1.2.10 仍然有小问题。socket 特性还没有 在 GTK+ 2 下测试过,欢迎毛遂自荐。

6. GNOME 版本 *gui-gnome* *Gnome* *GNOME*

Gnome GUI 就象 GTK 一样工作。有关细节参考 |GTK|。但是程序的外观有些不同,而且 Gnome GUI 有一个很重要的特性是 GTK+ 没有的:和会话管理器的交互。 |gui-gnome-session| 以下是不同之处: - 使用 GNOME 对话框(仅对 GNOME 1 而言)。GNOME 2 GUI 使用和 GTK+ 2 一样的对话 框。 - 使用 GNOME 浮动框,这使得工具栏、菜单栏可以移至不同的地方(如,工具栏可以放 在上下左右任何一处)。它们的位置只在 GNOME 2 中被保存。 - 那意味着菜单栏和工具栏的句柄回来了!Yeah!并且重设网格尺寸仍然可以工作。 在配置时发现 GNOME时,它将被自动编译进来。 (FIXME: Is this still true? Use --enable-gnome-check to force it to.) GNOME 会话支持 *gui-gnome-session* *gnome-session* 如果在退出登陆时有任何改动过的缓冲,Vim 会显示一个确认窗口。单击 [Cancel] 会终止退出的过程。否则当前的会话会被用 |:mksession| 命令存入硬盘,并在下次 登陆时自动恢复。 GNOME 会话支持应该也对 KDE 会话管理器有效。如果你有在使用时遇到什么问题的话, 请报告 bug。 备注: 会话的自动存储完全是透明的。这样避免了与你自己的会话文件,脚本等等的 冲突。具体的细节如下: - 会话文件被存储于一个独立的路径 (通常是 $HOME/.gnome2). - 'sessionoptions' 被忽略,Vim 会使用一些合适的,硬性规定的选项: blank,curdir,folds,globals,help,options,winsize - 在存储时,内部变量 |v:this_session| 的值不会被改变。同时,当再次登陆时, 该值会被恢复。 Vim 不会存储 GUI 窗口的大小和位置,因为这是窗口管理器的职责。但是如果编译了 GTK+ 2 支持,Vim 会通过恢复窗口的角色 (用命令行参数 |--role|),帮助窗口管理器 识别窗口。

7. 编译 *gui-x11-compiling*

如果使用 X11,Vim 的 Makefile 将首先试着在你的系统里找到需要的 GTK+ 的文件。如 果失败,就试着找 Motif 文件。最后如果还是找不到,就找 Athena 文件。如果全失败, GUI 会被禁用。 对于 GTK+,Vim 的配置过程需要 GTK+ 被正确安装。就是说,shell 脚本 'gtk-config' 必须在你的 PATH 中,并且你已可以成功的编译,安装,执行 GTK+ 程序了。这样做的 原因是,编译、连接选项 (CFLAGS 和 LDFLAGS)是通过 'gtk-config' shell 脚本 来确定的。 如果你想编译 GTK+ 2 版本,可以在运行 ./configure 时加入 --enable-gtk2-check 参数。另外,对 GNOME 2 的支持在加入 --enable-gnome-check 时也会被编译进来。 注意 对 GTK+ 2 的支持还在尝试当中。不过,很多人都报告他们可以正常的使用。 如果你使用 Motif 或 Athena,且配置程序无法找到它们所在的目录时,更改 Makefile 使之含有它们所在的目录名称。如,查找 "GUI_INC_LOC" 来设置 Motif 的目录,或 "GUI_OPT_X" 来设置 Athena 的目录。 *gui-x11-gtk* 在写这篇文档时,你可以使用 GTK+ 1.0.6 或 1.2 版本。但是建议使用 v1.2,因为 1.0.6 版本不支持所有的特性。如,它没有撕下菜单。使用 CVS 树中的 GTK+ 可能 不能工作,因此不推荐也不被支持。 对于处于试验阶段的 GTK+ 2 GUI 版本,推荐使用最新的 GTK+ 2.0 或者 GTK+ 2.2。 CVS HEAD 大多数时间都能正常工作。 最后,尽管 GTK+ 已被移植到 Win32 平台上,这还没有连同 Vim 测试过,所以也不支 持。同时,由于 GTK+ GUI 使用了部分通用的 X11 代码,很可能无法编译通过。在较 遥远的将来,这中情况也许会改变:因为对 GTK+ 帧缓冲的支持也需要去掉那些使用 X11 的代码部分。 *gui-x11-motif* 对于 Motif,你需要至少 1.2 或 X11R5 版本。Motif 2.0 和 X11R6 也可以。Motif 1.1 和 X11R4 可能可以工作,但不保证(可能有些问题,但也许稍作改动就可以编译 、运行成功。如果你这样做了,请将补丁发给我 )。最新版的 LessTif 据报告是 可以的。 *gui-x11-athena* Athena 版本默认使用 Xaw widget。如果你有 3D 版本的,有可能要用 Xaw3d 来连接。这 样菜单看上去好看些。编辑 Makefile 文件并查找 "XAW_LIB"。滚动条仍然一样,因为 Vim 使用它自己的。它已经有 3D 效果了。(事实上,它更象 Motif 里的滚动条)。 *gui-x11-neXtaw* neXtaw 版本和 Athena 版本非常象,但使用不同的 widget. *gui-x11-misc* 总的来说,不要混合 不同版本的 GTK+,Motif,Athena,和 X11 的文件。这和引起问 题。如,使用 X11R5 的头文件给 X11R6 的库,大半不能工作(尽管连接不报错,Vim 之后的运行将崩溃)。

8. X11 选择机制 *x11-selection*

如果使用 X11,无论是 GUI 的还是 xterm 中 运行的,Vim 都提供了多种方式使用 X11 的选则机制和剪贴板。它们是通过两个选择寄存器 "* 和 "+ 来实现的。 X11 提供了两种基本类型的全局存储方式,选中和剪切缓冲。在一个重要的方面它们是 有区别的:选中是程序拥有的,并在程序退出时(如,Vim)消失,这样数据就消失了。 而剪切缓冲是存储在 X 自己的服务器里的,会保持到被重写或 X 服务器退出(例如登 出时)。 发起程序拥有选中的内容(如,拷贝),仅当遇到其它程序请求时才执行传送操作(如, 粘贴)。 剪切缓冲立即被写入,之后便可直接通过 X 服务器进行存取,无需与发起程序交互。 *quoteplus* *quote+* 有3种可记录的 X 选中:PRIMARY(要用来重现所选择的内容的,就象 Vim 的 Visual 模式),SECONDARY(缺少定义)和 CLIPBOARD(要用于剪切、复制和粘贴的操作)。 对于以上3种,Vim 使用 PRIMARY 用于读写 "* 寄存器(这就是之所以当 X11 选中后, Vim 为 |'clipboard'| 的 "autoselect" 设了个缺省值。)。CLIPBOARD 用于读写 "+ 寄存器。Vim 不使用 SECONDARY 方式。 如:(假定设定了默认选项) - 在 Vim 的 Visual 模式下选中一个 URL。转到 Netscape 的文本框里并单击鼠标中键。 所选择的文字将被插入(希望如此!)。 - 通过在 Netscape 中拖动鼠标选中文字。再到 Vim 中并按鼠标中键:选中的文字被插 入。 - 在 Vim 里选中文字并执行 "+y。转到 Netscape,拖动鼠标选中文字。现在使用鼠标右 键并在弹出菜单里选择 "Paste"。所选中的文字被 Vim 中选中的文字替换。 备注:在使用 Visual 选择时,"+ 寄存器中的文字仍然存在。Visual 选择的文字存在 于 "* 寄存器中。这样就可以覆盖所选的文字了。 *x11-cut-buffer* 默认的有8个剪切缓冲:CUT_BUFFER0 到 CUT_BUFFER7。Vim 仅使用 CUT_BUFFER0,就是 xterm 默认使用的那一个。 只要当 Vim 不可用(或退出或挂起),并且因此不能响应另一个程序的选中请求时, Vim 将它自己的选中内容写入 CUT_BUFFER0 中。如果是 Vim 拥有 "+ CLIPBOARD 选中, 那么其值就会被优先写入;如果 Vim 拥有 "* PRIMARY 选中,就会写入该值。 类似的,当 Vim 试图从 "* 或 "+ 来粘贴时(或明确的,或通过点击鼠标中键对 "* 寄存器操作),如果被请求的 X 选中是空的或不可用,Vim 反过来读取 CUT_BUFFER 的值。 备注:当用这种方式拷贝文字到 CUT_BUFFER0 时,选中的类型(字符,行或块)总是被 丢失,即使之后是 Vim 要粘贴它。 默认情况下 Xterm 总是将选中内容同时写入 PRIMARY 和 CUT_BUFFER0 中。当它粘贴 时,xterm 会优先选用 PRIMARY。如果失败才会选用 CUT_BUFFER0。因此,在 Vim 和 Xterm 中剪切、粘贴时,你应该使用 "* 寄存器。Xterm 不用 CLIPBOARD,所以 "+ 在 xterm 中无效。 多数较新的应用程序会通过 PRIMARY ("*) 来提供它们当前的选中内容,并使用 CLIPBOARD ("+) 用作剪切、拷贝、粘贴操作。你可以通过选择 "* 或 "+ 缓冲器来访问。 vim:tw=78:sw=4:ts=8:ft=help:norl:

Generated by vim2html on 2006年 07月 02日 星期日 22:43:25 UTC