OS_WIN32

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


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

                                                *win32* *Win32* *MS-Windows*
本文描述 Vim Win32 版本的一些特性。

Vim 的 Win32 版本可以在 Windows NT 和 Windows 95 下运行,并且有 console(控制
台,就是命令提示符窗口 译者)和 GUI (图形界面)两个版本。GUI 版本中的
Win32s 适用于 Windows 3.1[1]。你也可以用 Vim 的 32 位 DOS 版本来代替。参见
|os_msdos.txt|。

1. 一些已知的问题               |win32-problems|
2. 启动                         |win32-startup|
3. 恢复屏幕内容                 |win32-restore|
4. 使用鼠标                     |win32-mouse|
5. 在 Windows 3.1 下运行        |win32-win3.1|
6. Win32 常见问题解答(迷你版) |win32-faq|

此外,还有一些 Win32 和 DOS 版本通用的条目:
文件位置                        |dos-locations|
使用反斜杠                      |dos-backslash|
标准映射                        |dos-standard-mappings|
屏幕的输出与颜色                |dos-colors|
文件格式                        |dos-file-formats|
:cd 命令                        |dos-:cd|
中止键                          |dos-CTRL-Break|
临时文件                        |dos-temp-files|
默认的 Shell 选项               |dos-shell|

Win32 用户图形界面              |gui-w32|

作者:
Win32 版本的作者是 George V. Reilly <george@reilly.org> 。
最初 Windows NT 版本的移植工作是由 Roger Knobbe <RogerK@wonderware.com> 完成的。
GUI 版本的作者是 George V. Reilly 和 Robert Webb 。

有关编译的讨论请参考"src/INSTALL.pc"。          *win32-compiling*


1. 一些已知的问题 *windows95* *win32-problems*

Vim 在 Windows 95 的 console 里运行时会出一些问题。具我们所知,这些问题在 Windows 98 和 Windows ME 中也会出现。 微软内部人士的话:"Win95 的 console 一直不稳定,并且将永远这样。" 1、不支持 Dead key(与重音有关的键,下文有解释)。 2、可以用命令 ":set columns=nn lines=nn" 改变窗口大小,但是此后执行外部命令可 能会使系统挂起或当机。 3、屏幕刷新慢,除非你把 'columns' 和 'lines' 设置为 非 DOS 标准值,但是这样会 引起上述第二个问题! 如果这些问题影响你的使用,你可以换用 32 位的 MS-DOS 版本 或 Win32 GUI 版本。 自动补全文件名的时候,虽然 Vim 会匹配短的文件名,但是却会处理相应的长名文件。 例如,如果有一个长名文件 "this_is_a_test",其短文件名是 "this_i~1",命令 ":e *1" 编辑文件 "this_is_a_test"。

2. 启动 *win32-startup*

当前目录 *win32-curdir* 如果启动 Vim 时后面带一个文件名作为参数,并且指定了该文件的完整路径(例如:以 "x:\"开头的路径),Vim 会认为该文件是从文件管理器启动,并把当前目录(可用 :lcd 命令查看译者)切换到文件所在目录。如果不想这样,只要把路径里的"反斜 杠"("\")换成"斜杠"("/")即可。例如: vim c:\text\files\foo.txt 当前目录切换到 "C:\text\files"。 vim c:/text\files\foo.txt 不改变当前目录。 终端选项 *win32-term* Vim 的 Win32 版本仅有的终端选项是"win32",它是内置选项。如果你把 'term' 设置 成其它的值,Vim 的"行为"就可能变的很奇怪。所以 Vim 不会从环境变量"TERM"里 获取 'term' 的值。

3. 恢复屏幕内容 *win32-restore*

如果你设置了 'restorescreen' 选项(默认设置),当你退出 Vim 或者执行外部命令时, Vim 能恢复控制台原来的内容。可以用":ser nors"命令关掉这个选项。 |'restorescreen'|

4. 使用鼠标 *win32-mouse*

Vim 的 Win32 版本支持鼠标。如果你使用两键鼠标,可以用"同时按下左右两键"的办 法来模拟第三键(中间键)-但是,请注意:在 Win32 GUI 里,如果你的右键用来呼叫 "弹出菜单"(参见 'mouse'),那么你最好先按下鼠标左键。(左右两键同时按的时候, 左键略快于右键 译者)。 |mouse-using| 如果鼠标不好用,你可以试着禁用控制台的"快速编辑模式"。

5. 在 Windows 3.1 下运行 *win32-win3.1*

*win32s* *windows-3.1* 有一个特殊的 Win32 版本的 Gvim 可以在 Windows 3.1 和 3.11。你需要用 Visaul C++ 4.1 编译 gvim.exe 。 要想在 Windows 3.1 或 3.11 下运行 Win32 版本的 Vim,你需要安装 Win32s (Win32s 是微软发布的一套子系统,主要作用是让 Windows 3.1x 或 WfW 3.1x 这些 16 位操作 系统借助其类库运行 32 位应用程序。译者)。也许你在安装别的软件时已经安装了 Win32s 。如果 Vim 不能正常运行,请下载最新的 1.30c 版本的 Win32s 。你可以在这 里下载: http://support.microsoft.com/download/support/mslfiles/pw1118.exe (微软又把它换地方了!我们现在也不知道在哪里)。 gvim.exe 之所以有两个版本,是因为 Win32s 版本是用 VC++ 4.1 编译的。这是最后一 个支持 Win32s 的 VC++ 。VC++ 5.0 好一些,所以用它来编译 Win32 版本。除此以外, 这两个版本没有什么不同。如果你在一个混合环境里工作,你可以使用 Win32s 。 Win32s 版本的 gvim 与 Win32 版本的 gvim 在 95/NT 系统里是一样的。在 Win32s 系 统里有以下不同: -你不能使用长文件名,因为 Windows 3.1 不支持。 -执行外部命令时无返回值。在":make"之后,必须要自己":cn"。

6. Win32 常见问题解答(迷你版) *win32-faq*

问:为什么 Win32 版本的 Vim 在 Windows 95 里运行时屏幕的更新速度特别慢? 答:Win95 对 32 位控制台程序的支持很不好,有许多 Bug 。不知道什么原因,Vim 在 标准解析模式(80x25,80x43,80x50)下更新速度特别慢,但是 16 位 DOS 版本 的 Vim 却要快得多。如果改变一下行列的值(例如:":set columns=100" 或 ":set lines=40"),更新速度就会和 DOS 版本一样快。 警告:改变 'columns' 属性可能导致 Windows 95 在刷新时死机(要抱怨就找微软 吧!),不过在大多数情况下没什么问题,所以这一属性还保留着,但是一定要慎 用 'columns' 。 改变屏幕的解析度可以加快屏幕更新,但是它会带来其它的问题。比如,如果你不 使用标准的解析模式,特别是当 'columns' 的值不是 80 的时候,执行外部命令 (例如:":!dir")会导致 Vim 停止响应。一旦这种情况发生,就不可能把解析 模式改回到执行外部命令之前的状态,所以在修改 'lines' 和 'columns' 的时候 要特别、特别小心!事实上,如果 'columns' 的值不是 80 ,Vim 不会让你执行外 部命令。 在 Windows NT 里没有这些问题。无论 'lines' 和 'columns' 是什么值,屏幕更 新速度都很快,也不会使 Vim 停止响应。 问:Windows 95 下,既然 Win32 版本屏幕更新的速度不如 16 位 DOS 版本快,那我为 什么还要用 Win32 版本? 答:首先,Win32 版本不像想象的那么慢,尤其是把 'lines' 和 'columns' 设置成非 标准数值后,速度还是挺快的。其次,16 位的 DOS 版本有许多的限制,例如:不 能做过多的改动;不能处理长文件名。Win32 版本没有这些限制,并且总的来看, 还是 Win32 版本快(对于 32 位的 DJGPP DOS 版本的 Vim 也一样)。Win32 版本 在对屏幕、鼠标和键盘的控制上,要比 DJGPP 版本好。 问:在 Windows NT 下,16 位的 DOS 版本 和 Win32 版本那个好? 答:为什么要在 NT 下运行 16 位 DOS 版本?在 NT 下运行 Win32 版本的 Vim 其屏幕 的更新速度和 16 位的 DOS 版本一样快,并且也没有上面所提到的一些限制。还有, DOS 程序启动和运行的速度都比 Win32 慢。在非 Intel 构架的 NT 平台上,DOS 应用程序在 80x86 虚拟机上运行,所以特别慢。 问:怎样换字体? 答:在 GUI 版本里,可以用 'guifont' 选项。在 console 版本里,你需要修改控制台 窗口的字体,不能在 Vim 里修改字体。 问:为什么我使用":set lines=xx"或其它相似的命令改变 console 窗口大小时,字 体会改变?(Win95) 答:你在 MS-DOS 命令提示字体属性里设置了'自动',这使得 Win95 自动选择合适的 字体(太糟了!)。明确地指定一种字体就可以解决这个问题。 问:为什么不能在 Vim 里"粘贴"(Win95)? 答:在 MS-DOS 窗口的属性对话框中,找到"杂项/快速粘贴",把前面的对勾去掉。 然后在 Vim 里执行":set paste" 以避免副作用。 |'paste'| 问:Console 版本的 Vim 怎样在 Windows 95 里输入 dead keys?(dead key 是语音 键,诸如:尖音符号、重音符号、变音符号之类,它们本身不能产生字符,但是当 它们后面跟另外的键时就会产生语音字符,例如:带尖音符号的a 、带重音符号的 e 、带变音符号的 u 、带代音符号的 n ,等等。【这些语音符号通常出现在字母 的上面,举个例子,比如上面提到的"带重音符号的 e ",是这个样子 è, 因为原文中是用语言描述的,没有直接引用这些字符,所以简单解释一下,译者注 】。这些对大多数欧洲语言很有用。据我所知,英语布局的键盘不用 dead keys)。 答:不能。Windows 95 控制台的输入模块不能正确工作,我没有能力解决这些问题。下 面的话援引自微软一名资深程序员: Win95 Console 一直不稳定,而且将永远这样。 这种不稳定性是不可避免的,因为我们徘徊于 MS-DOS 的键盘 TSR 和 Win32 两个世界之间。 于是,在 MS-DOS 里不存在的按键(比如 dead keys)在 Win32 Console 里却 大量存在,并且这些按键的功能也迥然不同(比如 CapsLock)。这些都使得 Win95 的 Console 变得不稳定。 不要再提及有关多语言键盘的问题…… 也许你可以用字符的转义机制(digraphs)来解决这个问题。参见:|digraphs| 最好的解决方案是用 Win32 GUI 版本的 gvim.exe 。要不然你就换一个 可以使用 dead key 的 Vim (DOS 版本)。 问:在 Windows NT 里怎样输入 dead key? 答:在 NT 3.51 上可以正常输入,和在别的程序里的输入方法一样。在 NT 4.0 里,你 必须保证你的区域设置(控制面板键盘)和你当前使用的区域设置相同。否则 NT 会崩溃。这是 NT 的问题,不是 Vim 的问题。 问:我用 Vim 编辑一个符号连接,这个连接指向 UNIX NFS 文件服务器上的一个文件。 当我保存这个文件时,Vim 不能通过连接保存到服务器上,而是删除了这个连接, 创建了一个新的文件。为什么? 答:在 UNIX 系统中,Vim 可以处理连接(符号连接或硬连接)。Vim 先把文件写入一 个备份文件中,然后用备份文件覆盖原文件。这样做是为了保证所有属性都和原文 件相同。在非 UNIX 系统中,首先原文件被改名,然后写入新文件。只有保护位和 原文件相同。但是,不能处理指向 NFS 文件系统的连接。唯一的解决办法是禁用备 份文件,可以通过命令 ":set nobackup nowritebackup" 实现 |'writebackup'| 问:执行":make"的时候怎样看到输出? 答:通常,你需要一个 tee 程序,它可以把输入(make 的输出)复制到标准输出和错 误信息文件里。你可以在 http://gnuwin32.sourceforge.net 或 http://unxutils.sourceforge.net 找到。或者你也可以在 http://www.cygnus.com/ 下载 Cygnus 版本的 GNU 工具。 其它 Win32 下运行的 Unix 风格的工具可以在 http://directory.google.com/Top/Computers/Software/Operating_Systems/Unix/Win32/ 找到。得到了 tee 程序之后,你需要把下面的命令添加到你的 _vimrc 文件中: :set shellpipe=\|\ tee 问:我把文件保存到一台运行 VisionFS 的远程计算机上,但是文件找不到了。 答:VisionFS 不能处理三个字母的扩展名,SCO 声称这是为了兼容 16 位的 DOS/Windows 环境。下面的两个命令可以说明问题: echo Hello > file.bat dir > file.bat "dir" 命令的输出被定向到 "file.bat~" 文件,而并没有新建一个 "file.bat" 文件。这种行为也被 Vim 继承,当你编辑一个名为"foo.bat"的文件时,Vim 会 自动创建 "foo.bat~" 作为临时文件。当保存文件时,就会被删除。 解决办法: 在你的 _vimrc 文件里加入: :set backupext=.temporary 问:怎样改变光标闪烁的频率? 答:不能改。这是 NT console 的一个限制,据说 NT 5.0 可以。(一次改变所有 console 的闪烁频率) *:!start* 问:如何异步地执行一个外部命令? 答:执行外部命令的时候,你可以用":!start"代替":!" :!start winfile.exe<CR> 用"start"命令不像":!"那样(切换到另一个屏幕、调用一个新的 console,然后等待程序执行结束);这说明你所运行的程序不会影响到当前编辑的 文件。用":!start"命令运行程序不会得到正在编辑的文件的句柄,这意味着 Vim 不必等待外部命令。 要想避免这种情况(即让 Vim 等待外部命令执行完毕 译者),可以用 ":! start"。 问:我用 Win32s 版本,每当我执行外部命令时(比如 "make"),Vim 不等程序执行 完毕就返回了!帮帮忙! 答:问题出在 32 位应用程序(VIm)不能从 16 位应用程序(你的 DOS 程序)中得到 程序执行完成的信号。Vim 可以解决类似的问题,但是必须设置一下你的 DOS 命令 让它在窗口里运行,而不是全屏状态。不巧的是,安装 Windows 后的默认值是 "全屏"。要改变这一设置: 1) 打开 PIF 编辑器(在主程序组里) 2) 打开"_DEFAULT.PIF"文件(在 Windows 目录下) 3) 把显示选项从"全屏" 改为 "窗口" 4) 保存退出 测试,启动 Vim ,输入 :!dir C:\<CR>" 你应该看到一个 DOS 窗口显示文件及目录列表。 问:我在 Win32s 和 NT 下使用 Vim。 在 NT 里,我可以把 console 的默认值设置为 50 行,这样当我用 ":sh" 命令时,就会得到一个 80x50 的 shell。我可以在 Win3.1x 下这样做么?我会不会在 80x25 卡住? 答:编辑 SYSTEM.INI 文件,在 [NonWindowsApp] 加入 "ScreenLines=50" 。这样, DOS 窗口就会变成 50 行的。 vim:tw=78:fo=tcq2:ts=8:ft=help:norl:

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