GUI_W32

*gui_w32.txt*   For Vim version 6.1.  原文最后更新: 2002年2月3日


                  VIM 参考手册    作者:Bram Moolenaar
                                  翻译:Dasn<[email protected]>
                                  VCD主页:http://vimcdoc.sf.net


Vim 的图形用户界面                                       *gui-w32* *win32-gui*

1.启动图形界面                    |gui-w32-start|
2.设置 Vim 为默认的编辑器      |vim-default-editor|
3.使用剪贴板                       |gui-clipboard|
4.命令行指令                       |gui-shell-win32|
5.特殊颜色                  |win32-colors|
6.Windows 对话框和浏览器 |gui-w32-dialogs|
7.杂项                                |gui-w32-various|

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

{Vi 没有 Windows 图形界面}


1.启动图形界面                                           *gui-w32-start*

Vim 的 Win32 GUI 版本(gvim)呈现给你的是一个真正 Windows 图形界面程序。无论你
用什么方式启动它,也不管你是否修改了它的文件名,gvim 总是启动一个图形界面。

图形界面程序一直在 Windows 子系统里运行。大多数 shell 会在启动 gvim 之后立即返
回提示符(假设你从命令行启动它   ——译者)。如果没有返回,那你应该使用
“start”命令:
        start gvim [option] file ..

Note: 所有的字体(无论粗体还是斜体)必须大小同相!!!如果不是,那你可能什么
字都看不到或者只能看到一些杂乱无章的文字。Vim 不会检查文字的大小。需要强调一
点,这里的字体大小是以“像素”为单位计算的。有些字体的大小以“磅”为单位计算,
这时即便你选的两种字体的“磅”数相同,但它们的像素数却可能不同。另外,与字体
位置相关的属性(比如:ascent 和 descent)也必须相同。(ascent 和 descent 是用
来说明字体高度的两种属性,具体可以参考相关资料   ——译者)

gvim 的 Win32 版本里有一个额外的菜单选项“编辑/选择字体”(注意:不同的版本选
项的位置不太一样,6.0 以前的版本此选项位于“窗口/选择字体” ——译者),它能
调用标准的 Windows 字体选择程序。

设定菜单的高度对 gvim 不起作用。

                                                        *gui-win32-maximized*
如果你想让 Vim 在启动时最大化窗口,可以把下面的命令加到你的 vimrc 或 gvimrc
文件中:
        au GUIEnter * simalt ~x

                                                                *gui-w32s*
gvim.exe 还有一个特别的版本——Win32s,可以在 Windows 3.1 或 3.11 里运行。参
见|win32s| 。


2. 设定 Vim 为默认的文本编辑器                               *vim-default-editor*

设定 Vim 为某一类文件的默认编辑器:
1、打开 Windows 资源管理器
2、选择 查看/选项 -> 文件类型。
3、选定想让 gvim 处理的文件类型,然后选择 gvim 的路径。(在文件类型选项卡中,
   你也可以用3个空格给没有扩展名的文件指定关联程序)。在“操作”列表框的 open
   一栏中输入:
        gvim "%1"
  这里加上引号可以让程序处理带空格的文件名。
  你也可以这样用:
        gvim "%L"
 这样可以在某些场合避免处理短文件名(8.3格式),但我不敢保证在每个地方都好用。

现在你已经做好了gvim 与文件的关联了,当你双击鼠标打开文件时,gvim 会切换到文
件所在目录。(可以用 :lcd 查看 gvim 的当前目录 ——译者)

如果你想让Vim 打开文件时最大化,可以在 open 一栏中输入:
        gvim -c "simalt ~x" "%1"

如果你移动了 Vim 位置,或者你把它放到别的目录里了(比如,你刚刚在别的目录里安
装了一个新版本的 Vim,并且想马上用它),用下面的办法可以完成和上面相似的任务:
1、选定想用 Vim 打开的文件
2、<Shift-F10>
3、选“打开方式……”
4、点击“其它……”
5、找到 Vim 的新位置,点击“打开”
6、在“始终使用该程序打开这些文件”划勾
7、OK

                                                *send-to-menu* *sendto*
你也可以把 Vim 放到“发送到”菜单里去:
1、打开资源管理器
2、找到你的 sendto 目录:
   Windows 95: %windir%\sendto (例如:"c:\windows\sendto")
   Windows NT: %windir%\profiles\%user%\sendto
   (例如:"c:\winnt\profiles\mattha\sendto")。
3、点右键,选“新建->快捷方式”
4、在快捷方式向导程序里点击“浏览”,找到 Vim/gvim,程序会得到其完整路径。当你
使用“发送到 Vim”时,Vim 会切换到那个文件的目录。注意,任何长的目录名都会以短
的(MS-DOS)的形式出现。这是 Windows “发送到”功能的一个限制。

                                                *notepad*
你可以用 gvim.exe 来代替 notepad.exe,但是这样会带来许多副作用。有些程序依赖于
notepad 参数。比如,有的程序调用“notepad –p”来打印文件,但是这些参数放到
gvim 上就不好用了(“gvim -p”,-p 为无效参数 ——译者)所以最好还是别改动
notepad,用别的方法启动 gvim 。

                                                *win32-popup-menu*
有一种更直接的方法,就是把”用 vim 编辑”选项加到右键弹出菜单里,这样你就可以
用 vim 编辑任何文件了。

这种方法可以和上面提到的默认打开方式(文件关联)共存。不同之处在于如果把 Vim
设定为默认打开方式,当你用鼠标双击该类型文件时,系统会自动调用 Vim 打开该文件;
而如果你把”用 vim 编辑” 加到弹出菜单里,就可以保留原来的文件关联,当你想用
Vim 处理该文件时,只要在文件上单击鼠标右键,选择”用 vim 编辑”即可。例如:你
可以把“*.mak”(在老版本的 VC++ 里,Makefile 文件的扩展名是“mak”——译者)
文件与 make 程序关联,这样你就可以通过双击文件来调用 make 程序执行它,通过右
键 —>“用 vim 编辑”对 Makefile 进行编辑。

你可以用 右键 —>“用 vim 编辑”打开你选择的文件。如果你选择了多个文件,你会发
现弹出菜单里多出两个相关选项:
“用 multiple vim 编辑”  ——为所选的每一个文件打开一个 gvim
“用 single vim 编辑”       ——用一个 gvim 打开所选的全部文件。
如果已经有一个 gvim 正在运行,弹出菜单里还会多一个选项:
“用当前的 vim 编辑”     ——用正在运行的 gvim 编辑所选文件。

                                                *install-registry*
你可以通过安装程序“install.exe”十分容易地把“用 vim 编辑”加到右键菜单中,
安装程序会帮你在注册表中添加几个键值。

当然,你也可以自己修改注册表。这比较麻烦!尽量用 install.exe 程序。

1、打开注册表编辑器“regedit.exe”
2、加入这些键值:
   key          value name                  value 
   HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}
                {default}                    Vim Shell Extension

HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\InProcServer32
                {default}                    {path}\gvimext.dll
                ThreadingModel                    Apartment
   HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\gvim
                {default}                    {51EEE242-AD87-11d3-9C1E-0090278BBD99}
   HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Shell
Extensions\Approved
                {51EEE242-AD87-11d3-9C1E-0090278BBD99}
                                            Vim Shell Extension
   HKEY_LOCAL_MACHINE\Software\Vim\Gvim
                path                            {path}\gvim.exe
   HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\vim
5.6
                DisplayName                    Vim 5.6: Edit with Vim popup menu entry
                UninstallString                    {path}\uninstal.exe

用实际地路径替换 {path}
不要输入 {default}(默认),这是每个项里自带的键。

要从弹出菜单里删除“用 vim 编辑”,只要在注册表里删除上面提到的各项即可。缷载
程序“uninstall.exe”可以帮你完成这项工作。你也可在“控制面板”—>“添加/删除程
序”里进行删除。

如果你发现用“添加/删除程序”缷载 gvim 之后,其它类型文件的关联出错了,你可以自
己动手修改过来(用“资源管理器”,前面已经提过)。这种情况好像只出现在 NT 系列
的 Windows 中(Windows 的 Bug ?)。解决办法:
1、找到文件的类型名(也就是文件扩展名 ——译者)。打开注册表编辑器在
\\HKEY_CLASSES_ROOT 下搜索就能找到。
2、在资源管理器里,“查看”—>“选项”—>“文件类型”。找到该类型文件,单击“
编辑”。在“操作”列表中选择应该被设置为默认的选项(正常情况下是 open ),单击
“设置为默认值”。


3. 使用剪贴板                                              *gui-clipboard*

Windows 有一个剪贴板,你可以把文本从别的程序“剪”下来,放到剪贴板里,也可以把
剪贴板里的文本“粘贴”到别的程序里。在 Vim 里有多种办法完成这些操作。对于其他
操作系统请参阅 |gui-selections|

寄存器 "* 反应出剪贴板里的内容。|quotestar|

当你把 clipboard 选项设定为 unnamed 时,在 gvim 中进行的剪贴操作就是针对剪贴板
的,而不用在命令前指定 "* 寄存器了。(比如没设定 clipboard 时,用 "*yy 命令从
gvim 中剪一行到剪贴板,:set clipboard=unnamed 之后,直接用 yy 即可 ——译者)

默认情况下,标志‘a’不包含在 'guioptions' 选项里。这意味着如果你对选定的文本
不进行操作,那么它们不会被复制到剪贴板。当 'guioptions' 包含‘a’时,在你选定
文本地同时,这些被选定地文本已经被复制到剪贴板上。(这样,选定文本之后,不用按
CTRL-C,直接用 CTRL-V 在别的程序里“粘贴”就可以了。——译者)

若想用 CTRL-X, CTRL-CCTRL-V, 这些标准的 MS-Windows 操作方式怎么办?有办法!
用 $VIMRUNTIME\mswin.vim 这个脚本解决。你可以把下面这条命令放到你的 _vimrc 文
件里:
        source $VIMRUNTIME/mswin.vim
这样一来 CTRL-C 就变成“复制”命令了,但是原先的 CTRL-C 是中止操作的命令呀,没
办法,用 CTRL-Break 来结束任务吧。

                                                        *CTRL-V-alternative*
因为 CTRL-V 被用做“粘贴”,所以你不能用它来启动“可视 块”的选择模式,不过可
以用 CTRL-Q 代替。你也可以在“插入”模式和“命令”模式中用 CTRL-Q 代替 CTRL-V。
但是 CTRL-Q 常常被用作控制流,这时候它在某些终端下就不好用了。

Note: gvim 对剪贴板的支持仍有一些 bug。参见|todo|


4. 命令行指令                                              *gui-shell-win32*
Vim 用另一个窗口执行外部命令,这使得 Vim 可以运行任何命令。外部命令在一个属于
它自己的环境中运行,这和你在 DOS 提示符下运行命令是一样的。

                                                        *win32-vimrun*
Vim 通过调用“vimrum”间接执行外部命令。所以 vimrun.exe 必须包含在搜索路径内才
能工作,或者把它和 gvim.exe 放到同一个目录下。如果找不到“vimrun”,命令会直接
执行,命令提示符窗口在程序运行完毕后立即关闭。

警告:如果在运行外部命令时,你点击“X”按钮关闭命令提示符窗口,并且在弹出确认
对话框时选择了“是”,于是你结束了外部命令,但同时也关闭了 Vim 。(用:!start
这种异步方式运行外部命令时,不会出现这种情况。)

在 Win95 里,Vim 使用的命令提示符窗口总是使用 25x80 个字符,这样做是为了和 DOS
兼容(这很有必要!)。字体用的是 system font 。在 WinNT 里,Vim 使用的命令提示
符窗口使用在“控制面板”里给“命令提示符”预先定义的设置。在 Win32s 里命令提示
符窗口决定于 Windows 目录下的 _default.pif 文件。

                                                        *msdos-mode*
如果程序弹出一个对话框说:“This program is set to run in MS-DOS...”你可以通
过修改该程序的 MS-DOS 快捷方式的属性来解决这个问题:
-用 Windows 资源管理器找到该程序用到的 command.com 。它可能在
  c:\command.com, c:\dos\command.com, c:\windows\command.com, 等等
-鼠标右键点击“command.com”,选“属性”。
-在“程序”选项卡里选择“高级”。
-去掉“MS-DOS 模式”前的对勾。
-点击两次“确定”。


                                                        *win32-!start*
通常 Vim 在一个命令结束之前不会继续进行下面的工作(这对 Vim 从 shell 中捕获输
出是很有用的)。如果你想让 Vim 启动一个命令后立即返回,在 Win95 和 WinNT 里可
以这样做:
        :!start {command}
在 Win32s 中,你不得不另外开一个MS-DOS窗口代替。千万别忘了,当你切换回 Vim 的
时候,一定让 Windows 3.1x 在后台运行那个你要执行的程序。



5. 特殊颜色                                         *win32-colors*

在 Win32 里,可以使用在 DOS 里定义过的颜色。参见 |dos-colors|。

另外,系统颜色也一样可以使用。它们以 Sys_XXX 的形式出现,这里 XXX 是相应的颜色
名称(对大小写不敏感),如下表所示:(更翔实的描述可以参看 Win32 手册)。
Note: Win32s 中对下列颜色的支持不完全。

Sys_3DDKShadow          Sys_3DFace                      Sys_BTNFace
Sys_3DHilight           Sys_3DHighlight                 Sys_BTNHilight
Sys_BTNHighlight        Sys_3DLight                     Sys_3DShadow
Sys_BTNShadow           Sys_ActiveBorder                Sys_ActiveCaption
Sys_AppWorkspace        Sys_Background                  Sys_Desktop
Sys_BTNText             Sys_CaptionText                 Sys_GrayText
Sys_Highlight           Sys_HighlightText               Sys_InactiveBorder
Sys_InactiveCaption     Sys_InactiveCaptionText         Sys_InfoBK
Sys_InfoText            Sys_Menu                        Sys_MenuText
Sys_ScrollBar           Sys_Window                      Sys_WindowFrame
Sys_WindowText

可能最有用的值是下面这些:
        Sys_Window          正常窗体的背景颜色
        Sys_WindowText      正常窗体的文字颜色
        Sys_Highlight       加亮的背景颜色
        Sys_HighlightText   加亮的文字颜色

还有一些可供使用的颜色:
Gray, Grey, LightYellow, SeaGreen, Orange, Purple, SlateBlue, Violet 。

                                                                *rgb.txt*
此外,还可以用在文件“rgb.txt”中定义的颜色。这个文件对于 X11 的用户来说是再熟
悉不过了。下面是从中抽取的几行:

  255 218 185              peach puff
  205 133  63              peru
  255 181 197              pink

文件看起来就是这个样子:3个十进制的数分别代表颜色的 R(红)、G(绿)、B(蓝)
,然后是颜色的名字。四个区域用空格分开。

你可以从 X11 中得到“rgb.txt”。它在类似于“/usr/X11R6/lib/X11/”的目录中。对
于 Vim ,“rgb.txt”必须放在 $VIMRUNTIME 目录里。该文件可以在
“$VIMRUNTIME/rgb.txt”找到。


                                                *gui-w32-dialogs* *dialog*
6.Windows 对话框和浏览器

Vim 的控制台版本在各个平台上提供的用户界面是类似的,同样 Vim 的 Win32 GUI 版本
也会用与其他平台相似的视窗组件进行操作。

6.1 对话框

对话框可以用“confirm”命令族调用(例如:'confirm' 选项,|:confirm| 命令和
|confirm()| 函数)这是GUI版本特有的,控制台版本没有这些功能。选项 'guioptions'
中的标志'c'可以改变这种情况。

6.2 文件浏览器

如果你在文件编辑命令前加上“:browse”,Vim 就会弹出一个文件选择窗口,选择现存
文件。参见|:browse|

6.3 可分离的菜单(Tearoff Menus)

Vim 的 Win32 GUI 模拟 Motif 的“可分离的菜单”。在每项菜单顶部有一个“剪刀”的
标志。选择后会出现一个悬浮的窗体,窗体上的按钮与菜单上的选项一一对应。直接点击
这些按钮与点击菜单里的选项是一样的(包括子菜单),只是不用每次到菜单里去找了。

当你要找的命令“藏”在很多层子菜单里,这个功能就很有用了。

这些可分离的菜单分离后,可以放在任何你喜欢的地方,并且一直在 gvim 主窗口上面。
你可以像平常一样关掉它们;当然,如果你退出 gvim,它们也会自动关闭。

                                                        *:tearoff* *:te*
:te[aroff] {name}       剪下菜单 {name} 。菜单中必须至少由一个选项,但是没必
                        要非得出现在菜单栏里。(参见 |win32-hidden-menus|)。

例如:
        :tearoff File
这条命令把“File”菜单(如果有的话)剪下来。

        :amenu ]Toolbar.Make    :make<CR>
        :tearoff ]Toolbar
这两条命令创建了一个浮动菜单,但是这个菜单却不在菜单栏里。
Note: 以‘]’开头的菜单名不会在菜单栏里显示。


7. 杂项                                                       *gui-w32-various*

                                                        *gui-w32-printing*
菜单“文件/打印”,会打印出经过语法加亮的文本,参见 |:hardcopy|。如果你只想打
印原始文本,并且已经安装好了默认的打印机,可以用下面这条命令:
        :w >>prn
Vim 支持许多 MS-Windows 的标准特性。一些相关的介绍可以在别的地方找到:参见
|'mouse'|, |win32-hidden-menus|。

                                                        *drag-n-drop-win32*
你可以把一个或多个文件拖到 Vim 窗口里,Vim 会自动打开它们。如果你在拖动的过程
中按住 Shift 键,Vim 会把当前目录切换到第一个文件所在的目录。如果你在拖动的过
程中按住 Ctrl 键,Vim 会分割一个新窗口来打开文件。然而这些只有在当前缓冲区发生
改变后才有用(不理解,直译 ——译者)。
你也可以把文件目录的图标拖到 Vim 里,但是 Vim 不会打开目录里的所有文件(通常我
们也不希望它这么做),Vim 会且换到那个目录,并且打开一个新文件。
如果 Vim 碰巧处于命令行状态,被拖进来的文件和目录的名字会插入到光标所在的位置,
你可以在命令里用这些名字。在 Ex 状态下这些名字也可以用。
                                                        *:simalt* *:si*
:si[malt] {key}         模拟 Alt-{key} 组合键。
                        {不适用 Vi }{只适用 Win32 版本}

正常情况下,为了增加键映射 (map) 的数量,Vim 控制所有 Alt-{key} 组合键。但是这
样做可能与用 Alt-{key} 访问菜单的标准方法冲突。(通常在 Windows 中,我们用
Alt-F 打开文件菜单,但是在 Vim 里 Alt-F 可能被 map 成别的功能了 ——译者)。

一个快速的解决办法是:设置 'winaltkeys' 选项的值为 "yes" 。但是这样阻止了所有
与 Alt 键有关的映射。另一个办法是:设置 'winaltkeys' 选项为 "menu" 。这样与菜
单有关的快捷键有 Windows 管理,其余的与 Alt 相关的映射仍然好用。但这还是对当前
的情况有所依赖。

要解决这个问题,就要用 :simalt 命令告诉 Vim('winaltkeys' 不要设置为 "yes")虚
拟一个 Windows 的 Alt 按键行为。你可以用它来映射 Alt 组合键(或者别的什么,无
所谓)从而产生标准的 Windows 操作。下面是一些例子:

        :map <M-f> :simalt f<CR>
这个命令通过把 Alt-F 映射为模拟按键的 Alt 和 F,使你按下 Alt-F 时弹出“文件”
菜单(菜单在 Menu.vim 中定义)
        :map <M-Space> :simalt ~<CR>
这个命令通过映射 Alt-Space 弹出 Vim 窗口的系统菜单。 Note: ~ 在 simalt 命令里
是 <Space>(空格)。
        :map <C-n> :simalt ~n<CR>CTRL-N 映射成 Alt-Space + N 。也就是打开窗口的系统菜单,然后按 N ,最小化窗
口。

                                                *intellimouse-wheel-problems*
用智能鼠标(Intellimouse)的滑轮会引起 Vim 不能接收输入。到:

        控制面板 -> 鼠标 -> Wheel -> UniversalScrooling -> Exceptions

把 gvim 加到列表里。当你用智能鼠标 2.2 版本的驱动程序并且打开了“Universal
Scrooling”就会出现这个问题。

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

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