os_win32

os_win32.txt 适用于 Vim 9.0 版本。 最近更新: 2023年2月 VIM 参考手册 by George Reilly 译者: Dasn、tocer win32 Win32 MS-Windows 本文描述 Vim Win32 版本的一些特性。 Vim 的 Win32 版本可以在 Windows 7、8、10 和 11 版本上运行,并且有 console (控 制台,就是命令提示符窗口 译者) 和 GUI (图形界面) 两个版本。 如果使用 Windows XP 或 Vista,可使用 Vim 9.0 补丁版本 495 或以前的版本。 32 位版本也可运行在 64 位 MS-Windows 系统上。 1. 一些已知的问题 win32-problems 2. 启动 win32-startup 3. 恢复屏幕内容 win32-restore 4. 使用鼠标 win32-mouse 5. 在 Windows 95 下运行 win32-win95 6. 在 Windows 3.1 下运行 win32-win3.1 7. 安装包 win32-installer 8. 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 默认的外壳选项 dos-shell PowerShell 缺省 dos-powershell 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 WSL 在 WSL (Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统) 上运行 Vim 时此处说明不适用,此时 has('win32') 会返回假值。如果需要知道 Vim 是否在 WSL 上运行,可用 exists('$WSLENV')

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

自动补全文件名的时候,虽然 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 时,该可执行程序确实能够执行。 命令行参数 win32-cmdargs 对 MS-Windows 把命令行分解为参数的分析没有一个标准。Vim 和 gvim 过去使用不同 的逻辑来处理命令行 (7.4.432 之前),而且这些逻辑也取决于如何地编译。现在 Vim 和 gvim 两者都使用 CommandLineToArgvW() Win32 API,从而行为一致。 基本规则是: win32-backslashes a) 参数是图形字符的序列。 b) 参数似空白分隔。 c) 参数可以双引号包围,其中可包含空白。 d) 零和多个反斜杠 (\) 和一个双引号 (") 是特别的。有效的反斜杠减半往下取 整。偶数反斜杠反转空格和制表的可接受性,奇数反斜杠生成按本义出现的双 引号。 因而: " 是特殊双引号 \" 是按本义出现的双引号 \\" 是一个按本义出现的反引号和一个特殊双引号 \\\" 是一个按本义出现的反引号和一个按本义出现的双引号 \\\\" 是两个按本义出现的反引号和一个特殊双引号 \\\\\" 是两个按本义出现的反引号和一个按本义出现的双引号 等等 示例: vim "C:\My Music\freude" +"set ignorecase" +/"\"foo\\" +\"bar\\\" 打开 "C:\My Music\freude" 并执行行模式命令: set ignorecase; /"foo\ and /bar\" CommandLineToArgvW API 的参考中也有这些规则的描述: https://msdn.microsoft.com/en-us/library/windows/desktop/bb776391.aspx win32-quotes 引号还有额外的规则 (这里文档不甚完整)。如上所述,文件名 (或任何其它命令行参数) 内的引号可以用反斜杠转义。例如 vim -c "echo 'foo\"bar'" 也可要用三个引号来表示一个实际一个引号: vim -c "echo 'foo"""bar'" 引号规则是: 1. " 开始引用。 2. 另一个 """ 结束引用。如果引用以 "" 结束,在引用的字符串之后生成 " 。 示例,[] 围绕参数: "foo" -> [foo] "foo"" -> [foo"] "foo"bar -> [foobar] "foo" bar -> [foo], [bar] "foo""bar -> [foo"bar] "foo"" bar -> [foo"], [bar] "foo"""bar" -> [foo"bar]

3. 恢复屏幕内容 win32-restore

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

4. 使用鼠标 win32-mouse

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

5. 在 Windows 95 下运行 win32-win95

windows95 windows98 windowsme 8.0.0029 补丁删除了 Windows 95/98/ME 的支持。如果你还想用,请用之前的版本。

6. 在 Windows 3.1 下运行 win32-win3.1

win32s windows-3.1 gui-w32s win16 有一个特殊的 Win32 版本的 Gvim 可以在 Windows 3.1 和 3.11 运行。 7.4.1364 补丁删除了此支持。

7. 安装包 win32-installer

http://www.vim.org/download.php 提供了 windows 的简单安装程序,而 https://github.com/vim/vim-win32-installer/releases/ 也提供每日构建版。 每日构建版包含 32 位和 64 位版本,打开多数特性,通常也包含额外的已加密签名的安 装程序,以免 Windows 抱怨。 要使用安装程序可简单执行 exe 文件。也支持以下开关: gvim_<version>.exe /S -> 安静安装,无对话框 gvim_<version>.exe /D=C:\vim -> 安装到目录 c:\vim -> /D 必须是最末的参数 gvim_<version>.exe /S /D=c:\vim -> 安静安装到 c:\vim 通过设置 $VIM 环境变量,也可以指定不同于缺省的安装目录。

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

问: 怎样改变字体? 答: 在 GUI 版本里,可以用 'guifont' 选项。例如: :set guifont=Lucida_Console:h15:cDEFAULT 在控制台版本里,你需要修改控制台窗口的字体,不能在 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.nethttp://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 问: 如何异步地执行一个外部命令或程序,或用缺省程序打开文档或 URL? 答: 执行外部命令的时候,你可以用 ":!start" 代替 ":!"。例如,要运行 notepad: :!start notepad 要用缺省图像查看器打开 "image.jpg": :!start image.jpg 要用 Windows Explorer 打开当前文件所在的目录: :!start %:h 要用缺省的浏览器打开 Vim 主页: :!start http://www.vim.org/ 用 "start" 命令不像 ":!" 那样 (切换到另一个屏幕、调用一个新的控制台,然后 等待程序执行结束);该命令的使用,意味着你所运行的程序不会影响到当前编辑的 文件。用 ":!start" 命令运行程序不会得到 Vim 的打开文件句柄,这意味着他们不 需要在 Vim 之前退出。 要避免这种特殊照顾,可以用 ":! start"。 有两个可选的参数 (见下个问答): /min 最小化方式打开窗口 /b 不打开控制台窗口 一次只能使用一个参数。第二个参数会被当作命令的一部分。 windows-asynchronously 问: 如何避免异步远行的程序打开窗口? 答: 取决于你实际需要,有两个方案: 1) 用 /min 标志位,以最小化方式运行,其他不作改变。对控制台和 GUI 应用一样有效。 2) 用 /b 标志位以运行控制台程序,而不建立控制台窗口 (GUI 应用不受影响)。 只能用于不需要输入的应用。否则会得到 EOF 错误,因为输入流 (stdin) 会重定向到 \\.\NUL (stdout 和 stderr 也是如此)。 运行 Exuberant ctags 的控制台示例: :!start /min ctags -R . 程序结束时你会看到名为 "tags" 文件在当前目录出现。你会注意到底下任务栏上 窗口标题在闪烁。尤其对需时较长的命令更容易看到。 现在删除 "tags" 文件,然后执行: :!start /b ctags -R . 还是会产生 "tags" 文件,但这次任务栏不会闪烁了。 GUI 应用的示例: :!start /min notepad :!start /b notepad 前一个命令以最小化方式运行 notepad,后一个命令以正常方式运行。 windows-icon 问: 我不喜欢 Vim 图标,如何改变? 答: 是的,把你喜欢的图标放在 'runtimepath' 某个目录下的 bitmaps/vim.ico。例如 ~/vimfiles/bitmaps/vim.ico。 vim:tw=78:ts=8:noet:ft=help:norl: