GUI_X11

*gui_x11.txt*   For Vim version 6.1.  最后修改: 2001年9月7日


                  VIM 参考手册    作者:Bram Moolenaar
                                  翻译:Zimin<[email protected]>
                                  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 没有 Windows 图形界面}


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

你可以通过以下任意一种方式来启动 GUI 界面:
    gvim [options] [files...]
    vim -g [options] [files...]

所以,如果你运行 "gvim",或者做一个 "gvim" 连接到可执行文件上,你就可以自动运
行 GUI 界面了。在 "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"。

如果你想一直在前台运行 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| 功能一起编译时, 这是一个字体名称

    geometry            启动时的窗口形状(默认和终端窗口一样)
    scrollbarWidth      滚动条宽度
    borderWidth         边界宽度
    menuHeight          菜单栏高度(仅对 Athena )

如果用户通过上述资源指定了一种字体,它将被使用。而不考虑它之前应该被使用的基
本字体。

注意:颜色也被 ":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 参数来设定:

    argument            meaning 
                                                        *-gui*
   -display {display}   运行 Vim 在 {display}                *-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}         同上                          *-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


3. Shell 命令行                                      *gui-pty*

警告:从 GUI 中执行外部命令并不总是有效。"normal" 命令如,"ls"、"grep"、
"make"一般是有效的。那些需要智能终端的命令如,"less"、"ispell"就未必了。有些
甚至可能使 GUI 挂起,以至于要从另外个终端里杀死它。所以要小心。

有两种方式同 shell 做 I/O:管道和伪终端。默认是伪终端,它可以很好的工作在许多
系统上。

不幸的是,伪终端的实现在每个 Unix系统上是不同的。并且,一些系统上需要管理员权
限。为了避免这类问题,先尝试一下。准备好“杀死”启动的命令或 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使用黑白按钮。一个彩色的 Vim 图标
包含在 $VIMRUNTIME/vim32x32.xpm 。在 GTK+ ,这是内建的图标。不幸的是,你该怎
样安装它依赖于你的窗口管理器。你可以从 'guioptions' 除去 'i'标志,来除去黑白
按钮:
  :set guioptions-=i

如果你使用 fvwm* 系列窗口管理器,只要在 .fvwm2rc 配置文件中加入:

  Style "vim"           Icon vim32x32.xpm

确定图标文件的位置在窗口管理器图标路径的声明中。或在 .fvwm2rc 修改图标路径,或
将图标放入以下已定义的任一目录中:

  IconPath /usr/X11R6/include/X11/pixmaps:/usr/X11R6/include/X11/bitmaps

在 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 进入各种模式时鼠标指针都会自动改变(例如,
在插入,或命令模式中)。当前,可用的指针是:

        箭头                  一个箭头指向西北
        片状                  象I的竖直条
        型号                  一个箭头指着上下
        忙时                  一个时间漏斗
        空白                  一个不可见的指针
        十字                  一个瘦 "+" 符号
        手1                    一个暗手指向西北
        手2                    一个亮手指向西北
        笔形                  一支笔指向东南
        疑问                  带问号的箭头
        右箭头                       一个箭头指向东南
        上箭头                       一个箭头指向上面

另外,任何一个 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                                    使用显示

要设置字体看|'guifont'|。对 GTK,也有相应的菜单选项设置。

另外,在 GTK 内部也有命令行参数。要知道如何使用以下的参数,请查看 GTK 文档:
        --sync
        --gdk-debug
        --gdk-no-debug
        --no-xshm
        --xim-preedit
        --xim-status
        --gtk-debug
        --gtk-no-debug
        --g-fatal-warnings
        --gtk-module
        --display       (GTK+ 对应的是 -display;作用相同)

vim 的颜色设置(语法加亮)仍然一致。参考 |:highlight|

如果你想设置其他的 gui 组件(如,菜单栏,滚动条,其他等等),那些是 GTK 的特
别设置,你需要改动 gtkrc 文件。至于如何改动,虽然文档很少,但可参考 GTK 文档
。

                                                *gtk-tooltip-colors*
如, 设定工具提示条为黑字亮黄色背景:

        style "tooltips"
        {
                bg[NORMAL] = "#ffffcc"
                fg[NORMAL] = "#000000"
        }

        widget "gtk-tooltips*"          style "tooltips"

将这些写如文件 ~/.gtkrc 并是自生效于 GTK。不要忘了去掉第一栏中的 ">" 字符。

使用 Vim 作为 GTK+ 的插件                                *gui-gtk-socketid*

当 GTK+ 版本的 Vim 启动时,它创建了它自己的顶层窗口(就是'GtkWindow')。GTK+
提供了用 GtkSocket 和 GtkPlug 容器嵌入的便利手段。如果一 GTK+ 应用程序在它的
一个窗口里创建了 GtkSocket 容器,通过使用 GtkSocket ID 来创建一个 GtkPlug 容
器,一个完全不同的 GTK+ 应用程序就可以把自己嵌入上一个应用程序中。

如果你通过命令行参数 '--socketid' 传给 Vim 一个十进制或十六进制的值,Vim将使
用那个值,而不是普通的 GtkWindow 的值来创建一个 GtkPlug 容器。这使 Vim 作为
GTK 的插件来运行。

这是一个真正的编程接口,专为了支持在应用程序中正确启动 Vim 而设。有关更多的
GTK+ socket 信息,参考http://www.gtk.org/api/

注意:这个功能需要最新的 GTK 版本。GTK 1.2.10 仍然有小问题。


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

Gnome GUI 就想 GTK 一样工作,只是看上去有一点不同。有关细节参考 |GTK|

以下是不同之处:
- 使用 Gnome 对话框。
- 使用 Gnome 浮动框,这使得工具栏、菜单栏可以移至不同的地方(如,工具栏可以放
  在上下左右任何一处)。但目前他们的位置不能被保存,我认为这是 GNOME 回话管理
  器(还)不支持的原因。
- 那意味着菜单栏和工具栏的句柄回来了!Yeah!并且重设网格尺寸仍然可以工作。

在配置时发现 GNOME时,它将被自动编译进来。


7. 编译                                               *gui-x11-compiling*

如果使用 X11,Vim 的Makefile将首先试着在你的系统里找到需要的 GTK+ 的文件。如
果找不到,就试着找 Motif 文件。最后,还是找不到,就找 Athena 文件。如果全失败
,GUI 将无法使用。

对于 GTK+,Vim的配置过程需要 GTK+ 被正确安装。就是说,shell 脚本 'gtk-config'
必须在你的 PATH 中, 并且你已可以成功的编译,安装,执行 GTK+ 程序了。这样做的
原因是,编译、连接选项是通过 'gtk-config' shell 脚本中包含的。

如果你使用 Motif 或 Athena,且配置程序无法找到它们所在的目录时,更改 Makefile
,使之含有它们所在的目录名称。如,查找 "GUI_INC_LOC" 来设置 Motif 的目录,或
"GUI_OPT_X"来设置 Athena 的目录。

                                                        *gui-x11-gtk*
在写这篇文档时,你或许在 GTK+ 1.0.6 或 1.2 版本。建议使用v1.2,因为在另外的版
本中,不是所有的 GUI 功能都支持的。如,它没有 tearoff 菜单。使用 CVS 树中的
GTK+ 可能不能工作,这是不推荐的。

最后,尽管 GTK+ 已被移植到 Win32 平台上,这还没有连同 Vim 测试过,所以也不支
持。

                                                        *gui-x11-motif*
对于 Motif,你需要至少 1.2 或 X11R5 版本。Motif 2.0 和 X11R6 也可以。Motif
1.1 和 X11R4 可能可以工作,但没有保证(可能有些问题,但稍作改动你可以使之编译
、运行成功。如果你这样做了,请将补丁发给我 )。最新版的 LessTif 支持的。

                                                        *gui-x11-athena*
Athena 版本默认使用 Xaw 容器。如果你有 3D 版本的,有可能要用 Xaw3d 来连接。这
使菜单看上去好看些。更改 Makefile 文件,查找 "XAW_LIB"。滚动条仍然一样,因为
Vim 使用它自己的。它已经有 3D 效果了。(事实上,它更象 Motif 里的滚动条)。

                                                        *gui-x11-misc*
总的来说,不要混合 不同版本的 GTK+,Motif,Athena,和X11的文件。这将引起问题
。如,使用 X11R5 的头文件给 X11R6 的库,大半不能工作(尽管连接不报错,Vim之后
的运行将崩溃)。


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

如果使用 X11,无论是 GUI 的还是 xterm 中用类 X11 的 Vim,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 方式。

如:(设定了默认值)
- 选中了一个 URL 在 Vim 的 Visual 模式里。转到 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 中。如果是 "+ CLIPBOARD 选中,
就按预先设定写入,否则如果是 "* PRIMARY 选中,就写入其中。

类似的,当 Vim 试图从 "* 或 "+ 来粘贴时(或明确的,或通过点击鼠标中键对 "* 寄
存器操作),如果被请求的 X 选中是空的或不可用,Vim 反过来读取 CUT_BUFFER0 的
值。

注意:当用这种方式拷贝文字到 CUT_BUFFER0 时,选中的类型(字符,行或块)总是被
丢失,甚至是 Vim 以后要粘贴它。

默认的 Xterm 总是将 可视的选中内容同时写入 PRIMARY 和 CUT_BUFFER0 中。当粘贴
时,如果 PRIMARY 可用就使用它,如果失败就回过来要求 CUT_BUFFER0 的。因此,在
 Vim 和 Xterm 中剪切、粘贴时,你应该使用 "* 寄存器。Xterm 不用 CLIPBOARD,所
以 "+ 在 xterm 中无用。

多数较新的应用程序提供它们当前的选中内容通过 PRIMARY ("*) 并使用 CLIPBOARD
("+) 为了剪切、拷贝、粘贴操作。你可以通过选择 "* 或 "+ 缓冲器来访问。


 vim:tw=78:sw=4:ts=8:ft=help:norl:

Generated by vim2html on Tue Jul 27 00:35:24 CST 2004