os_dos

os_dos.txt 适用于 Vim 9.2 版本。 最近更新: 2025年9月 VIM 参考手册 by Bram Moolenaar 译者: Dasn dos DOS 本文描述了 MS-DOS 和 Win32 版本共有的特性。另见 os_win32.txtos_msdos.txt 。 1. 文件位置 dos-locations 2. 使用反斜杠 dos-backslash 3. 标准映射 dos-standard-mappings 4. 屏幕的输出与颜色 dos-colors 5. 文件格式 dos-file-formats 6. :cd 命令 dos-:cd 7. 中止键 dos-CTRL-Break 8. 临时文件 dos-temp-files 9. 缺省的外壳选项 dos-shell 10. PowerShell dos-powershell

1. 文件位置 dos-locations

如果把 Vim 可执行文件 (vim.exe) 放到包含帮助文件子目录 (doc) 以及语法文件子目 录 (syntax) 的目录下,Vim 无需额外的配置就可正常工作,要访问 Vim,无需修改注册 表或添加环境变量,只要保证 Vim 目录包含在搜索路径中,或者在桌面上做一个快捷方 式就可以了。 Vim 资源文件 ("_vimrc" 和 "_gvimrc") 通常应放在 Vim 运行目录的上一级目录。如果 想把这些文件放在别的位置,可以设置环境变量 $VIM 指向其所在目录,例如: set VIM=C:\user\piet Vim 会在 "c:\user\piet\" 下寻找资源文件。 备注: 只有多用户计算机需要此功能,否则还是把 _vimrc 放在缺省位置更简单些。 如果移动了 vim.exe 的位置,也需要设置 $VIM 变量,此时会在 "$VIM/vim{version}" 目录里寻找运行时文件。例如: set VIM=E:\vim Vim 会在 "e:\vim\vim82" 寻找 8.2 版本的运行时文件。 备注: 强烈建议不要这样做。最好把可执行文件留在运行时目录里。 如果同时移动了可执行文件 资源文件,那么必须用 $VIM 和 $VIMRUNTIME 两个环境 变量来分别指定资源文件 ("_vimrc" 和 "_gvimrc") 和运行时目录的位置。例如: set VIM=C:\usr\piet set VIMRUNTIME=E:\vim\vim82 这样,Vim 可以在 "c:\user\piet\" 目录下找到资源文件,在 "e:\vim\vim82" 目录下 找到运行时文件。 详见 $VIM$VIMRUNTIME 。 通过系统属性对话框,可以为每个用户分别设置环境变量。步骤如下: 1. 键入 Windows 键 + R 来打开 "运行" 对话框。 2. 输入 "sysdm.cpl" 并按 "确定" 按钮。此时会显示 "系统属性" 对话框。 3. 选择 "高级" 标签页,按 "环境变量..." 按钮。此时会打开 "环境变量" 对话框。 4. 在 "用户变量" 列表中选择一个已有的变量并按 "编辑..." 按钮来编辑。或按 "新建..." 按钮来加入新变量。 5. 编辑完变量后,按 "确定" 按钮来保存改动。

2. 使用反斜杠 dos-backslash

在文件名 (这里是指带路径的文件名 译者) 里使用反斜杠 (\) 可能会出问题。在某些命 令里,VI 要用两个反斜杠表示一个反斜杠。Vim 在这一问题上宽容一些,它不会无条件 地从文件名中删除反斜杠,所以直接用 ":e c:\foo\bar" 就可以工作。但是当反斜杠出 现在一些特殊字符 (空格、逗号、反斜杠等) 前面时,Vim 还是会删除一个反斜杠。要避 免这些问题,可用正斜杠: 如 ":e c:/foo/bar" 会正常工作。Vim 会自动将正斜杠替换 成反斜杠,以避免一些 MS-DOS 或 Win32 程序会出现的问题。 如果倾向使用正斜杠,可以设置 'shellslash' 选项。Vim 会在自动补全文件名时,用正 斜杠代替反斜杠。尤其在使用 UNIX 风格的 'shell' 时,此选项特别有用。

3. 标准映射 dos-standard-mappings

CTRL-PageUpCTRL-PageDown 的原有映射已被取消,现在它们的功能是跳转到下一个 或者前一个标签页 <C-PageUp> <C-PageDown> 如果想要让它们移动到首个或末个屏幕行,可用映射: 键 键码 正常/可视模式 插入模式 CTRL-PageUp <M-N><M-C-D> H <C-O>H CTRL-PageDown <M-N>v L$ <C-O>L<C-O>$ 此外,还可以使用以下这些键进行复制/剪切/粘贴。Win32 版本和 DJGPP 版本里,这些 操作还会使用剪贴板。 Shift-Insert 粘贴文本 (从剪贴板) <S-Insert> CTRL-Insert 复制选择的文本 (到剪贴板) <C-Insert> CTRL-Del 剪切选择的文本 (到剪贴板) <C-Del> Shift-Del 剪切选择的文本 (到剪贴板) <S-Del> CTRL-X 剪切可视文本 (到剪贴板) 这些键是通过以下映射实现的 (Win32 和 DJGPP 版本): 键 键码 正常 可视 插入 Shift-Insert <M-N><M-T> "*P "-d"*P <C-R><C-O>* CTRL-Insert <M-N><M-U> "*y Shift-Del <M-N><M-W> "*d CTRL-Del <M-N><M-X> "*d 或者 (非 Win32 版本): 键 键码 正常 可视 插入 Shift-Insert <M-N><M-T> P "-dP <C-R><C-O>" CTRL-Insert <M-N><M-U> y Shift-Del <M-N><M-W> d CTRL-Del <M-N><M-X> d CTRL-X <C-X> "*d 系统支持剪贴板时,Vim 会使用 "* 寄存器。

4. 屏幕的输出与颜色 dos-colors

写屏操作缺省是直接调用 bios 完成的,这在大多数系统上都可以适用。无需 ansi.sys。可用 ":mode" 命令设置当前屏幕模式。见 :mode 。 要想改变 Vim 使用的颜色,可以使用 :highlight 命令。Normal 高亮组指定 Vim 显 示普通文本使用的颜色。例如,要设置灰色文本和蓝色背景: :hi Normal ctermbg=Blue ctermfg=grey 要了解其它可用的高亮组,参见 highlight-groups 。 DOS 控制台不支持粗体、下划线之类的属性。但可用九个终端选项来为五种不同的属性 (译者注: 指反转、粗体、突出、下划线和斜体) 设置颜色。备注: 因为可以用 ":highlight" 命令直接设置颜色,这些选项并无必要。它们只是为了兼容老版本的 Vim 而保留。'highlight' 选项会指定每种场合使用五种模式中的哪一种。九个终端选项如 下: :set t_mr=^V^[\|xxm 反转模式开始 :set t_md=^V^[\|xxm 粗体模式开始 :set t_me=^V^[\|xxm 结束反转或粗体模式、返回正常文本 :set t_so=^V^[\|xxm 突出模式开始 :set t_se=^V^[\|xxm 结束突出模式、返回正常文本 :set t_us=^V^[\|xxm 下划线模式开始 :set t_ue=^V^[\|xxm 结束下划线模式、返回正常文本 :set t_ZH=^V^[\|xxm 斜体模式开始 :set t_ZR=^V^[\|xxm 结束斜体模式、返回正常文本 ^V 代表 CTRL-V ^[ 代表 <Esc> (在输入上面的命令时,按下 CTRL-V Vim 只会显示 ^,这时不要输入 V,直接输入 <Esc> 即可。译者) 必须把上面命令里的 xx 换成相应的十进制数,这个数是前景色与背景色相加的和: 颜色 前景色 背景色 黑色 0 0 暗蓝色 1 16 暗绿色 2 32 灰绿色 3 48 暗红色 4 64 暗紫红色 5 80 棕色,暗黄色 6 96 亮灰色 7 112 暗灰色 8 128 * 蓝色,天蓝色 9 144 * 绿色,浅绿色 10 160 * 青绿色,兰绿色 11 176 * 红色,亮红色 12 192 * 紫红色,亮紫红色 13 208 * 黄色,浅黄色 14 224 * 白色 15 240 * * 在某些显示模式下,大于 128 的颜色代码可能不起作用,而代码 128 可能会使文本闪 烁。 代码 0 表示颜色恢复到 Vim 启动时的起始状态 (起始状态的值通常是 7,代表黑色背景 上的亮灰色文字,但可以修改。如果在命令行提示上修改了缺省颜色,可能需要在 vimrc 文件里调整一些高亮的颜色--见下面)。 这也是 't_me' 使用的缺省代码。 以下是 Vim 缺省高亮模式: t_mr 112 反转模式: 黑色文字 (0),亮灰色背景 (112) t_md 15 粗体模式: 白色文字 (15),黑色背景 (0) t_me 0 正常模式: 正常模式 (返回缺省状态) t_so 31 突出模式: 白色文字 (15),暗蓝色背景 (16) t_se 0 突出模式结束 (返回缺省状态) t_ZH 225 斜体模式: 暗蓝色文字 (1),黄色背景 (224) t_ZR 0 斜体模式结束 (返回缺省状态) t_us 67 下划线模式: 灰绿色文字 (3),暗红色背景 (64) t_ue 0 下划线模式结束 (返回缺省状态) 之所以缺省选择这些颜色,是因为它们在使用反转显示时看起来比较舒服,但用户可以自 行修改。 例如: :set t_mr=^V^[\|97m " 启动反转模式: 暗蓝色文字 (1) 棕色背景 (96) :set t_md=^V^[\|67m " 启动粗体模式: 灰绿色文字 (3) 暗红色背景 (64) :set t_me=^V^[\|112m " 返回正常模式: 黑色文字 (0) 亮灰色背景 (112) :set t_so=^V^[\|37m " 启动突出模式: 暗紫红色文字 (5) 暗绿色背景 (32) :set t_se=^V^[\|112m " 返回正常模式: 黑色文字 (0) 亮灰色背景 (112)

5. 文件格式 dos-file-formats

'fileformat' 设置为 "dos" (这是缺省值) 时,Vim 会把单个 <NL><CR><NL> 字符 对都当作行尾符 (<EOL>)。写入文件时,Vim 会使用 <CR><NL>。也就是说,编辑文件并 且保存时,Vim 会把所有的单个 <NL> 替换成 <CR><NL>'fileformat' 设置为 "unix" 时,Vim 会使用单个 <NL> 作为 <EOL>,并且把 <CR> 显 示为 ^M。 要通过 Vim 把 <NL> 替换成 <CR><NL>,可在任何文件格式下读取文件并以 Dos 格式保 存 (`:set ff=dos`)。 要通过 Vim 把 <CR><NL> 替换成 <NL>,可在 Dos 格式下读取文件并以成 Unix 格式保 存 (`:set ff=unix`)。 'fileformats' 非空 (这是缺省值) 时,Vim 会自动设置 'fileformat' 的值,无需担心 手动设置会出错。 如果要编辑脚本文件或者二进制文件,那么应该在载入该文件之前,先置位 'binary' 选 项。否则,因为脚本和二进制文件可能包含 <NL>,Vim 会将其替换成 <CR><NL>,从而造 成不必要的破坏。要自动置位 'binary' 选项,可在启动 Vim 时加上 "-b" (binary) 参 数。

6. :cd 命令 dos-:cd

":cd" 命令能识别驱动器符,并相应地切换当前驱动器。命令 ":cd c:" 会使驱动器 C 成为当前驱动器。而命令 ":cd d:\foo",会切换当前目录到 D 盘的 foo 目录。如果系 统支持,Vim 也能识别 UNC 路径。例如: ":cd \\server\share\dir"。 :cd

7. 中止键 dos-CTRL-Break

要中止查找操作,可用 CTRL-Break 来代替 CTRL-C 。Vim 只有在接受输入时,才会检测 CTRL-C

8. 临时文件 dos-temp-files

仅用于 16 位和 32 位的 DOS 版本: Vim 会把临时文件 (用于过滤) 存放于下列目录中,首个存在且可成功创建文件的目录: $TMP $TEMP C:\TMP C:\TEMP 当前目录 对于 Win32 版本 (控制台和 GUI): Vim 用标准的 Windows API 函数来获取临时文件名 (用于过滤)。使用下列目录中,首个 存在且可成功创建文件的目录: $TMP $TEMP 当前目录

9. 缺省的外壳选项 dos-shell

在 Windows 95 上,缺省的 'sh' ( 'shell' ) 选项是 "command.com",而在 Windows NT 上,缺省值是 "cmd.exe"。如果设置了环境变量 SHELL,Vim 会使用 SHELL 指定的程 序,如果没有设置 SHELL,而设置了环境变量 COMSPEC,Vim 就使用 COMSPEC。Vim 用 "<shell> /c <command_name>" 执行外部命令。输入 CTRL-Z 会启动一个新的命令子外 壳。要返回 Vim,输入 "exit"。 'shell' CTRL-Z 如果运行第三方外壳,可能需要自行设置 'shellcmdflag' ('shcf') 和 'shellquote' ('shq') 或者 'shellxquote' ('sxq') 选项。不幸的是,这些选项如何设置和 Vim 所在 的环境有关。例如,要用 MKS Korn shell 或 bash,设置方法如下: DOS 16 位 DOS 32 位 Win32 'shellcmdflag' -c -c -c 'shellquote' " 'shellxquote' " 在 16 位的 Dos 版本里,对应的启动外壳的命令是: <shell> -c "命令" >file 而在 Win32 版本里: <shell> -c "命令 >file" 在 32 位 DOS 版本里,DJGPP 会在内部以某种方式自动完成这一处理。 启动时,如果 Vim 无法识别出标准 Windows 外壳,会检查 'shell' 选项值是否包含 "sh" 子串 (在任何位置都可以)。如果匹配,Vim 就按照上面的描述,自动设置 'shellcmdflag''shellquote''shellxquote' 选项。

10. PowerShell dos-powershell dos-pwsh

Vim 支持 PowerShell Desktop 和 PowerShell Core。PowerShell Desktop 是随 Windows 安装的 PowerShell 版本,而 PowerShell Core 是跨平台的可单独下载的版 本。要判断使用的是哪个版本,可在 PowerShell 提示行上输入 - $PSVersionTable.PSEdition 当 'shell' 文件名包含 "powershell" 时,VIM 在启动时会自动设置 'shellcmdflag''shellxquote''shellpipe''shellredir' 选项为以下值: 'shellcmdflag' -Command 'shellxquote' " 'shellpipe' 2>&1 | Out-File -Encoding default 'shellredir' 2>&1 | Out-File -Encoding default 而当 'shell' 文件名包含 "pwsh" 时,VIM 在启动时会自动设置 'shellcmdflag''shellxquote''shellpipe''shellredir' 选项为以下值: 'shellcmdflag' -c 'shellxquote' " 'shellpipe' >%s 2>&1 'shellredir' >%s 2>&1 注意: 这些选项的自动设置会在读取 .vimrc 文件后发生,尤其是,如果通过 -c 设 置 'shell' 选项,就已经错过自动设置的时机。要想在命令行上有效覆盖 'shell' 选 项,可以考虑使用 --cmd 。 如果觉得 PowerShell 命令占用了太长时间,可以尝试在 'shellcmdflag' 开始处加上 "-NoProfile"。注意 这会跳过 profile 里的 PowerShell 环境设置。 如果通过 'shell' 执行 PowerShell 脚本出现问题,可以尝试在 'shellcmdflag' 开始 处加上 "-ExecutionPolicy RemoteSigned -Command"。PowerShell 的执行政策设置详见 在线 Windows 文档。 要在 'shellcmdflag' 里包含空格以传入多个标志位,参见 option-backslash 。 对 PowerShell Desktop,'shellpipe''shellredir' 选项值会将 UTF-16LE 输出用 当前配置的控制台代码页重新编码。将这些选项值里的 "default" 改为以下值之一,可 强制使用不同编码进行输出: unicode - UTF-16LE (PowerShell 5.1 的缺省输出) bigendianunicode - UTF-16 utf8 - UTF-8 utf7 - UTF-7 (无 BOM) utf32 - UTF-32 ascii - 7-位 ASCII 字符集 default - 系统活跃代码页 (通常为 ANSI) oem - 系统当前 OEM 代码页 备注 除非特别注明,上述的多字符 Unicode 编码会包含前导的 BOM。 对 PowerShell Core,缺省输出使用不带 BOM 的 UTF-8 编码。如果要强制输出使用其它 编码,可设置 'shellredir''shellpipe' 为 "2>&1 | Out-File -Encoding encoding",其中 encoding 为以下之一: ascii - 7-位 ASCII 字符集 bigendianunicode - UTF-16BE bigendianutf32 - UTF-32BE oem - 系统当前 OEM 代码页 unicode - UTF-16LE utf7 - UTF-7 utf8 - UTF-8 utf8BOM - UTF-8 带 BOM utf8NoBOM - UTF-8 不带 BOM (PowerShell Core 的缺省输出) utf32 - UTF-32 从 PowerShell Core 6.2 开始,Encoding 参数也支持指定已注册代码页的数值 ID (-Encoding 1251) 或字符串名 (-Encoding "windows-1251")。详见 .NET 文档的 Encoding.CodePage 部分。 vim:tw=78:ts=8:noet:ft=help:norl: