GUI_W32

*gui_w32.txt*   For Vim version 6.4.  最后更新: 2005年3月23日


                  VIM 参 考 手 册    作者:Bram Moolenaar
                                     译者: Dasn
                                     VCD主页:http://vimcdoc.sf.net


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

1. 启动图形界面                 |gui-w32-start|
2. 设置 Vim 为默认的编辑器      |vim-default-editor|
3. 使用剪贴板                   |gui-clipboard|
4. shell 命令                   |gui-shell-win32|
5. 特殊颜色                     |win32-colors|
6. Windows 对话框和浏览器       |gui-w32-dialogs|
7. 命令行参数                   |gui-w32-cmdargs|
8. 杂项                         |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 .. 注意: 所有的字体(无论粗体还是斜体)必须大小相同!!!如果不是,那你可能什么 字都看不到或者只能看到一些杂乱无章的文字。Vim 不会检查文字的大小。需要强调一 点,这里的字体大小是以"像素"为单位计算的。有些字体的大小以"磅"为单位计算, 这时即便你选的两种字体的"磅"数相同,但它们的像素数却可能不同。另外,与字体 位置相关的属性(比如:ascent 和 descent)也必须相同。(ascent 和 descent 是用 来说明字体高度的两种属性,具体可以参考相关资料 译者) gvim 的 Win32 版本里有一个额外的菜单选项"编辑/选择字体",它能调用标准的 Windows 字体选择对话框。 设定菜单的高度对 gvim 不起作用。 *gui-win32-maximized* 如果你想让 Vim 在启动时最大化窗口,可以把下面的命令加到你的 vimrc 或 gvimrc 文件中: au GUIEnter * simalt ~x *gui-w32s* gvim.exe 还有一个特别的版本,可以在 Windows 3.1 或 3.11 的 Win32s 子系统里运行。 参见 |win32s|。

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

设定 Vim 为某一类文件的默认编辑器: 1、打开 Windows 资源管理器 2、选择 查看/选项 -> 文件类型。 3、选定想让 gvim 处理的文件类型,然后选择 gvim 的路径。(在文件类型选项卡中, 你也可以用3个空格给没有扩展名的文件指定关联程序)。在"操作"列表框的 open 一栏中输入: gvim "%1" 这里加上引号可以让程序处理带空格的文件名。 你也可以这样用: gvim "%L" 这样可以在某些场合避免处理短文件名(8.3格式),但我不敢保证在每个地方都好用。 现在你已经做好了 gvim 与文件的关联了,当你双击鼠标打开文件时,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 上就不好用了。所以最好还是别改动 notepad,用别的方法启动 gvim。 *win32-popup-menu* 有一种更直接的方法,就是把"用 vim 编辑"选项加到右键弹出菜单里,这样你就可以 用 vim 编辑任何文件了。 这种方法可以和上面提到的默认打开方式(文件关联)共存。不同之处在于:如果把 Vim 设定为默认打开方式,当你用鼠标双击该类型文件时,系统会自动调用 Vim 打开 该文件;而如果你把"用 vim 编辑" 加到弹出菜单里,就可以保留原来的文件关联, 当你想用 Vim 处理该文件时,只要在文件上单击鼠标右键,选择"用 vim 编辑"即可。 例如:你可以把 "*.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 ),单击 "设置为默认值"。 把"用 Vim 编辑"加入到关联菜单中 *win32-open-with-menu* 如果你在 vim 安装程序里选择了 Add Vim to the "Open With..." menu ,这意味着 你可以通过右键菜单调用 Vim 来编辑大多数文件,虽然不是所有的文件(不清楚具体 原因),但是这个"用 Vim 编辑"的选项还是很有用的。 还有一个原因,就是加入这个选项之后可以在 Internet Explorer 里直接调用 Vim 编 辑当前的 HTML 文档。要使用这种功能,在"工具""Internet 选项"里,"程 序"选项卡,"HTML 编辑器"里选择 Vim 。如果没有 Vim 选项,说明 Vim 安装的不 正确。 手工安装可以使用下面的脚本:

REGEDIT4

[HKEY_CLASSES_ROOT\Applications\gvim.exe]

[HKEY_CLASSES_ROOT\Applications\gvim.exe\shell]

[HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\edit]

[HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\edit\command]
@="c:\\vim\\vim63\\gvim.exe \"%1\""

[HKEY_CLASSES_ROOT\.htm\OpenWithList\gvim.exe]

[HKEY_CLASSES_ROOT\*\OpenWithList\gvim.exe]


"c:\\vim\\vim63\\gvim.exe" 是 Vim 程序的实际位置,请根据具体情况修改。

删除 Vim 可以用 Vim 的反安装程序,或者用 "regedit" 手动删除注册表中的这些键
值。



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

Windows 有一个剪贴板,你可以把文本从别的程序"剪"下来,放到剪贴板里,也可以把 剪贴板里的文本"粘贴"到别的程序里。在 Vim 里有多种办法完成这些操作。对于其它 操作系统请参阅 |gui-selections| 寄存器 "* 反应出剪贴板里的内容。|quotestar| 当 clipboard 选项的值包括 unnamed 时,在 gvim 中进行的剪贴操作就是针对剪贴板 的,而不用在命令前指定 "* 寄存器了。因此你就可以不用在命令前加 "* 就可以从 剪贴板做剪切/粘贴操作。 默认情况下, 'guioptions' 选项里不包含标志''a'。这意味着如果你对选定的文本 不进行操作,那么它们不会被复制到剪贴板。当 'guioptions' 包含'a'时,在你选定 文本地同时,这些被选定地文本已经被复制到剪贴板上。 *mswin.vim* 如果想用 CTRL-X, CTRL-CCTRL-V 这些标准的 MS-Windows 操作方式怎么办?有办 法!用 $VIMRUNTIME\mswin.vim 这个脚本解决。你可以把下面这条命令放到你的 _vimrc 文件里: source $VIMRUNTIME/mswin.vim 这样一来 CTRL-C 就变成"复制"命令了,就无法用作中止操作命令。改用 CTRL-Break*CTRL-V-alternative* 因为 CTRL-V 被用做"粘贴",所以你不能用它来启动"可视块" 的选择模式,不过可 以用 CTRL-Q 代替。你也可以在"插入"模式和"命令"模式中用 CTRL-Q 代替 CTRL-V。 但是 CTRL-Q 常常被用作控制流,这时候它在某些终端下就不好用了。 注意: gvim 对剪贴板的支持仍有一些 bug。见 |todo|。

4. shell 命令 *gui-shell-win32*

Vim 用另一个窗口执行外部命令,这使得 Vim 可以运行任何命令。外部命令在一个属于 它自己的环境中运行,这和你在 DOS 提示符下运行命令是一样的。 *win32-vimrun* Vim 通过调用 "vimrun" 间接执行外部命令。所以 vimrun.exe 必须包含在搜索路径内才 能工作,或者把它和 gvim.exe 放到同一个目录下。如果找不到 "vimrun",命令会直接 执行,但 DOS 窗口会在程序运行完毕后立即关闭。 警 告:如果在运行外部命令时,你点击 "X" 按钮关闭命令提示符窗口,并且在弹出确认 终止程序对话框时选择了"是",Vim 也会同时被关闭。(用 ":!start" 这种异步方式 运行外部命令时,不会出现这种情况。) 在 Win95 里,Vim 使用的命令提示符窗口总是使用 25x80 个字符,这样做是为了和 DOS 兼容(这很有必要!)。字体用的是 system font 。在 WinNT 里,Vim 使用的命令提 示符窗口使用在"控制面板"里给 "Console" 预先定义的设置。在 Win32s 里 DOS 窗口 的属性决定于 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 手册)。 注意: 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 这两条命令创建了一个浮动菜单,但是这个菜单却不在菜单栏里。 注意: 以']'开头的菜单名不会在菜单栏里显示。

7. 命令行参数 *gui-w32-cmdargs*

在微软的 Windows 系统里对命令行参数的分析没有一个标准的做法。GVim 不得不提供一种方法来对命令行进行分析。这种方法在不同平台中的 Vim 可能会有不 同。主要的不同是有关 "(双引号)的用法。 参数 "C:\My Music\freude.txt" 和 "+/Sch\"iller" 的处理方法是相同的。但是对于 参数 "+/Sch""iller" 的处理 gvim 和 vim 是不同的,这要看编译时用了哪些功能。 规则是: a) 参数是一个可视字符串。 b) 参数之间被空白字符分割。 c) 如果参数里包含空白字符,可以用 " (双引号)参数括起来。 d) 反斜杠(\)和双引号(")是比较特殊的。反斜杠的有效个数可以分成两种。 偶数个反斜杠的参数里不能包含空格符和制表符。奇数个反斜杠可以生成一个 双引号。 所以: " 是一个有特殊意义的双引号 \" 是一个双引号 \\" 是一个反斜杠和一个有特殊意义的双引号 \\\" 是一个反斜杠和一个双引号 \\\\" 是两个反斜杠和一个有特殊意义的双引号 \\\\\" 是两个反斜杠和一个双引号 等等。 例如: gvim "C:\My Music\freude" +"set ignorecase" +/"\"foo\\" +\"bar\\\" 打开文件 "C:\My Music\freude" 并执行行模式命令: set ignorecase; /"foo\ and /bar\"

8. 杂项 *gui-w32-various*

*gui-w32-printing* 菜单"文件/打印",会打印出经过语法加亮的文本,参见 |:hardcopy|。如果你只想打 印原始文本,并且已经安装好了默认的打印机,可以用下面这条命令: :w >>prn Vim 支持许多 MS-Windows 的标准特性。一些相关的介绍可以在别的地方找到:参见 |'mouse'|, |win32-hidden-menus|。 *drag-n-drop-win32* 你可以把一个或多个文件拖到 Vim 窗口里,Vim 会自动打开它们。 参见 |drag-n-drop|。 *:simalt* *:si* :si[malt] {key} 模拟 Alt-{key} 组合键。 {不适用 Vi }{只适用 Win32 版本} 正常情况下,为了增加键映射 (map) 的数量,Vim 控制所有 Alt-{key} 组合键。但是这 样做可能与用 Alt-{key} 访问菜单的标准方法冲突。 一个快速的解决办法是:设置 '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 窗口的系统菜单。 注意: ~ 在 simalt 命令里 是 <Space>(空格)。 :map <C-n> :simalt ~n<CR>CTRL-N 映射成 Alt-Space + N 。也就是打开窗口的系统菜单,然后按 N ,最小化窗 口。 *intellimouse-wheel-problems* 用智能鼠(Intellimouse)的滑轮会引起 Vim 不能接收输入。到: ControlPanel - Mouse - Wheel - UniversalScrolling - Exceptions 把 gvim 加到列表里就可以了。这个问题仅仅在使用智能鼠驱动程序 2.2 版本,并且打开 了 "Universal Scrolling" 时才会出现。 vim:tw=78:sw=4:ts=8:ft=help:norl:

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