*os_win32.txt*  For Vim version 7.3.  最后更新: 2010年7月


		  VIM 参 考 手 册    作者：George Reilly
		                     译者: Dasn, tocer
		                     http://vimcdoc.sf.net

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

Vim 的 Win32 版本可以在 Windows NT、95、98、ME、XP、Vista 和 Windows 7
上运行，并且有 console (控制 台，就是命令提示符窗口 译者) 和 GUI (图形界面)
两个版本。

32 位版本也可运行在 64 位 MS-Windows 系统上。

有用于 Windows 3.1[1] Win32s 子系统的 GUI 版本。你也可以用 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/INSTALLpc.txt"。		*win32-compiling*

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

Vim 在 Windows 95 的控制台里运行时会出一些问题。据我们所知，这些问题在 Windows
98 和 Windows ME 上也会出现。

微软内部人士的话："Win95 的控制台一直不稳定，并且将永远这样。"

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 会认为该文件是从文件管理器启动，并把当前目录 (:cd 命令
查看 译者) 切换到文件所在目录。如果不想这样，只要把路径里的反斜杠 ("\") 换成斜
杠 ("/") 即可。例如： >

	vim c:\text\files\foo.txt

当前目录切换到 "C:\text\files"。 >

	vim c:/text\files\foo.txt

不改变当前目录。


term 选项						*win32-term*

Vim 的 Win32 版本仅有的终端类型是 "win32"，它是内置的。如果你把 'term' 设置成
其它的值，Vim 的行为就可能变的很奇怪。所以 Vim 不会从环境变量 "TERM" 里获取
'term' 的值。

$PATH 环境变量						*win32-PATH*

Vim 可执行程序的路径被加入到变量 $PATH 中。这主要使 "!xxd" 能够运行，因为它在
工具菜单中。这也意味着当 executable() 返回 1 时，该可执行程序确实能够执行。

==============================================================================
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 运行。你需要用
Visual 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 的
gvim.exe，两者都支持。

Win32s 版本的 gvim 与 95/NT 系统上运行的 Win32 版本的 gvim 是一样的。在 Win32s
系统里有以下不同：
－你不能使用长文件名，因为 Windows 3.1 不支持！
－执行外部命令时无退出码。在 ":make" 之后，必须要自己 ":cn"。

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

问：为什么 Win32 版本的 Vim 在 Windows 95 里运行时屏幕的更新速度特别慢？
答：Win95 对 32 位控制台程序的支持很不好，有许多 Bug。不知道什么原因，Vim 在标
    准解析模式 (80x25，80x43，80x50) 下屏幕更新速度特别慢，而 16 位 DOS 版本比
    Win32 版本要快得多。如果改变一下行列的值 (例如：":set columns=100" 或
    ":set lines=40")，更新速度就会和 16 位 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' 选项。例如: >
	:set guifont=Lucida_Console:h15:cDEFAULT
<   在控制台版本里，你需要修改控制台窗口的字体，不能在 Vim 里修改字体。

问：为什么我使用 ":set lines=xx" 或其它相似的命令改变控制台窗口大小时，字体会
    改变？(Win95)
答：你在 MS-DOS 命令提示的字体属性里设置了 '自动'，这使得 Win95 自动选择合适的
    字体 (太糟了！)。明确地指定一种字体就可以解决这个问题。

问：为什么不能在 Vim 里 "粘贴" (Win95)？
答：在 MS－DOS 窗口的属性对话框中，找到 "杂项/快速粘贴"，把前面的对勾去掉。
    你也需要在 Vim 里执行 ":set paste" 以避免副作用。	|'paste'|

问：控制台版本的 Vim 怎样在 Windows 95 里输入死键？
    (死键是重音键，诸如：尖音符号 (acute)，钝音符号 (grave)，umlaut (元音变音)
    等，它们本身不能产生字符，但是当它们后面跟另外的键时就会产生语音字符，例
    如：a-acute、e-grave、u-umlaut、n-tilde 等等。【这些语音符号通常出现在字母
    的上面，举个例子，比如上面提到的 e-grave 是这个样子 è，因为原文中是用语言
    描述的，没有直接引用这些字符，所以简单解释一下，译者注】。这些对大多数欧洲
    语言很有用。据我所知，英语布局的键盘不用死键)。
答：不能。Windows 95 控制台的输入模块不能正确工作，我没有能力解决这些问题。下
    面的话援引自微软一名资深程序员：
        Win95 控制台一直不稳定，而且将永远这样。

        这种不稳定性是不可避免的，因为我们徘徊于 MS-DOS 的键盘 TSR (比如
        KEYB，我们需要它来加工数据，对国际版本很重要) 和 Win32 两个世界之间。

        于是，在 MS-DOS 上不存在的按键 (比如死键) 在 Win32 控制台上却大量存
        在，有些按键的功能也迥然不同 (比如 CapsLock)。这些都使得 Win95 的控制
        台变得不稳定。

        更不用说多语言键盘布局的问题……

    也许你可以用二合字母机制 (digraphs) 来解决这个问题。|digraphs|

    最好的解决方案是用 Win32 GUI 版本的 gvim.exe。要不然你就换一个支持死键的
    DOS 版本的 Vim，有报告说那里没有问题。

问：在 Windows NT 上怎样输入死键？
答：NT 3.51 上可以正常输入死键，和在别的程序里的输入方法一样。
    NT 4.0 上，你必须保证你的区域设置 (控制面板键盘) 和你当前使用的区域设置相
    同。否则 NT 会崩溃。这是 NT 的问题，不是 Vim 的问题。

问：我用 Vim 编辑一个符号链接，这个链接指向 UNIX NFS 文件服务器上的一个文件。
    当我保存这个文件时，Vim 不能通过链接保存到服务器上，而是删除了这个链接，
    创建了一个新的文件。为什么？
答：在 UNIX 系统上，Vim 可以处理链接 (符号链接或硬链接)。Vim 先把文件写入一个
    备份文件中，然后用备份文件覆盖原文件。这样做是为了保证所有属性都和原文件相
    同。在非 UNIX 系统上，首先原文件被改名，然后写入新文件。只有保护位和原文件
    相同。但是，这个方法不能处理 NFS 文件系统，那里除了链接还有一些其它问题。
    唯一的解决办法是禁用备份文件，可以通过命令 ":set nobackup nowritebackup" 
    实现 						|'writebackup'|

问：我正通过 Samba 使用 Vim 编辑 Unix 系统上的一个文件。当我保存文件时，文件所
    有者被改变了。为什么？
答：当保存文件时，Vim 会给原来文件换名，使之成为一个备份 (以防写入文件过程中失
    败)。然后该文件作为一个新文件被保存。Samba 这时把它赋予文件系统上默认的所
    有者，可能会和原所有者不一样。
    为避免此问题，可以设置 'backupcopy' 选项为 "yes"。Vim 会用复制的方式建立备
    份，然后再覆盖原文件。这样文件所有者就不会改变了。

问：执行 ":make" 的时候怎样看到输出？
答：通常，你需要一个 tee 程序，它可以把输入 (make 的输出) 复制到标准输出和错误
    信息文件里。你可以在以下地址找到 tee (还有其它 GNU 工具)。
    http://gnuwin32.sourceforge.net 或 http://unxutils.sourceforge.net
    或者你也可以在 http://www.cygwin.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~"。写入
    "foo.bat" 文件时，最后它倒被删除了 (译者注: Vim 想删除的本来是临时文件)。

    解决办法: 在你的 _vimrc 文件里加入： >
	:set backupext=.temporary

问：怎样改变光标闪烁的频率？
答：不能改。这是 NT 控制台的一个限制，据报告，NT 5.0 可以一次改变所有控制台的
    闪烁频率。

							*:!start*
问：如何异步地执行一个外部命令？
答：执行外部命令的时候，你可以用 ":!start" 代替 ":!" >
	:!start winfile.exe<CR>
<   用 "start" 命令不像 ":!" 那样 (切换到另一个屏幕、调用一个新的控制台，然后
    等待程序执行结束)；该命令的使用，意味着你所运行的程序不会影响到当前编辑的
    文件。用 ":!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 上，我可以把控制台的默认值设置为 50
    行，这样当我用 ":sh" 命令时，就会得到一个 80x50 的 shell。我可以在 Win3.1x
    下这样做么？我会不会只能使用 80x25？
答：编辑 SYSTEM.INI 文件，在 [NonWindowsApp] 一节加入 "ScreenLines=50"。这样，
    DOS 窗口和外部 DOS 命令就会在 50 行的窗口里运行。

 vim:tw=78:fo=tcq2:ts=8:ft=help:norl:
