OS_WIN32

*os_win32.txt*  For Vim version 7.1.  最后更新: 2006年7月19日


		  VIM 参 考 手 册    作者:George Reilly
		                     译者: Dasn, tocer
		                     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 的控制台里运行时会出一些问题。据我们所知,这些问题在 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:

Generated by vim2html on 2008年 03月 27日 星期四 17:04:45 CST