<< Back to man.ChinaUnix.net

OS_WIN32

*os_win32.txt*  For Vim version 6.3.  最后更新: 2004年6月


                  VIM 参考手册    作者:George Reilly
                                  译者: Dasn<dasn@users.sf.net>
                                  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' 设置为 non-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 Wed Mar 2 23:05:19 GMT 2005