6. 命令行参数 *cmdline-arguments*
不同版本的 Vi 有不同的命令行参数。这会引起混乱。为了帮助你,本节给出这些差别的
概述。
这里考虑五个 Vi 的不同版本:
Elvis Elvis 2.1b 版本
Nvi Nvi 1.79 版本
Posix Posix 1003.2
Vi Vi 3.7 版本 (Sun 4.1.x 版本)
Vile Vile 7.4 版本 (不完整)
Vim Vim 5.2 版本
只有 Vim 支持在文件名之间和之后接受选项。
+{command} Elvis、Nvi、Posix、Vi、Vim: 和 "-c {command}" 相同。
- Nvi、Posix、Vi: 在批处理模式下运行 Ex。
Vim: 从标准输入读取文件 (批处理模式用 -s)。
-- Vim: 选项结束,其后的全被解释为文件名。
--cmd {command} Vim: 在执行 vimrc 文件前执行 {command} 命令。
--echo-wid Vim: GTK+ 在标准输出回显窗口 ID。
--help Vim: 显示帮助信息并退出。
--literal Vim: 按本义接受文件名,不扩展通配符。
--nofork Vim: 和 |-f| 相同。
--noplugin[s] Vim: 跳过插件的载入。
--remote Vim: 在另外一个 Vim 服务器编辑文件
--remote-expr {expr} Vim: 在另外一个 Vim 服务器执行 {expr}
--remote-send {keys} Vim: 发送键序列 {keys} 到 Vim 服务器并退出
--remote-silent {file} Vim: 如有可能,在另外一个 Vim 服务器编辑文件
--remote-wait Vim: 在另外一个 Vim 服务器编辑文件,并等待之
--remote-wait-silent Vim: 和 --remote-wait 类似,但如果不可能不会抱怨
--role {role} Vim: GTK+ 2: 设置主窗口的角色
--serverlist Vim: 输出 Vim 服务器的列表并退出
--servername {name} Vim: 指定 Vim 服务器名
--socketid {id} Vim: 运行 Vim 的 GTK 窗口套接字
--version Vim: 显示版本信息并退出。
-? Vile: 显示使用小结并退出。
-a Elvis: 同一个窗口载入所有指定的文件 (Vim 使用 -o)。
-A Vim: 以阿拉伯模式启动 (如果编译时加入阿拉伯语功能)。
-b {blksize} Elvis: 会话文件使用 {blksize} 块大小。
-b Vim: 置位 'binary' 模式。
-C Vim: 兼容模式。
-c {command} Elvis、Nvi、Posix、Vim: 在载入编辑缓冲区后,运行 Ex 命令
{command}。
Vim: 允许至多 10 个 "-c" 参数
-d {device} Vim: 使用 {device} 作为 I/O (仅限于 Amiga)。{仅当编译时加入
|+diff| 特性才有效}
-d Vim: 开始时置位 'diff'。|vimdiff|
-dev {device} Vim: 使用 {device} 作为 I/O (仅限于 Amiga)。
-D Vim: 调试模式。
-e Elvis、Nvi、Vim: 以 Ex 模式启动,就像可执行程序叫 "ex" 那样。
-E Vim: 以改进的 Ex 模式启动 |gQ|,就像 "exim" 那样。
-f Vim: 在前台运行 GUI (Amiga: 不打开新窗口)。
-f {session} Elvis: 使用 {session} 作为会话文件。
-F Vim: 以波斯语模式启动 (如果编译时加入波斯语功能)。
Nvi: 快速启动,编辑开始时不读入整个文件。
-G {gui} Elvis: 使用 {gui} 作为用户界面。
-g Vim: 启动 GUI。
-g N Vile: 开始编辑第 N 行
-h Vim: 给出帮助消息。
Vile: 编辑帮助文件
-H Vim: 以希伯来语模式启动 (如果编译时加入该功能的话)。
-i Elvis: 以插入模式开始编辑每个窗口。
-i {viminfo} Vim: 使用 {viminfo} 作为 viminfo 文件。
-L Vim: 和 "-r" 相同 (也在某些 Vi 版本里存在)。
-l Nvi、Vi、Vim: 置位 'lisp' 和 'showmatch' 选项。
-m Vim: 修改不允许被写入,复位 'write' 选项。
-M Vim: 不允许修改,复位 'modifiable' 和 'write' 选项。
-N Vim: 非兼容模式。
-n Vim: 不用交换文件。
-nb[args] Vim: 打开一个 NetBeans 接口连接
-O[N] Vim: 和 -o 类似,但使用垂直分割的窗口。
-o[N] Vim: 打开 [N] 个窗口,或者每个文件一个。
-p[N] Vim: 打开 [N] 个标签页,或者每个文件一个。
-P {parent-title} Win32 Vim: 在父应用窗口内部打开 Vim
-q {name} Vim: 使用 quickfix 错误文件 {name}。
-q{name} Vim: 同上。
-R Elvis、Nvi、Posix、Vile、Vim: 置位 'readonly' 选项。
-r Elvis、Nvi、Posix、Vi、Vim: 恢复模式。
-S Nvi: 置位 'secure' 选项。
-S {script} Vim: 在启动后执行 script 脚本。
-s Nvi、Posix、Vim: 在 Ex 模式时,和 "-" 相同 (安静模式)。
Elvis: 置位 'safer' 选项。
-s {scriptin} Vim: 读入 {scriptin} 脚本文件;只有在非 Ex 模式下才有效。
-s {pattern} Vile: 搜索 {pattern}
-t {tag} Elvis、Nvi、Posix、Vi、Vim: 编辑包含 {tag} 的文件。
-t{tag} Vim: 同上。
-T {term} Vim: 设置终端名为 {term}。
-u {vimrc} Vim: 从 {vimrc} 文件读入初始化设置。
-U {gvimrc} Vim: 从 {gvimrc} 文件读入 GUI 初始化设置。
-v Nvi、Posix、Vi、Vim: 以普通模式启动 (Vi 的术语是可视模式
(Visual))。
Vile: 阅读模式,不允许修改。
-V Elvis、Vim: 详细模式。
-V{nr} Vim: 指定特定级别的详细模式。
-w {size} Elvis、Posix、Nvi、Vi、Vim: 设置 'window' 的值为 {size}。
-w{size} Nvi、Vi: 和 "-w {size}" 相同。
-w {name} Vim: 写入脚本文件 {name} (必须以非数值字符启动)。
-W {name} Vim: 附加到脚本文件 {name} 里。
-x Vi、Vim: 要求输入加密密钥。见 |encryption|。
-X Vim: 不连接到 X 服务器。
-y Vim: 以简易模式启动,类似于 |evim|。
-Z Vim: 受限模式
@{cmdfile} Vile: 使用 {cmdfile} 作为启动文件。
7. POSIX 相容性 *posix* *posix-compliance*
2005 年,运行了 POSIX 测试包以对 Vim 的相容性进行了检查。大多数测试都能正确执
行。有一些行为 Vim 和 POSIX 不相容,即使运行于 Vi 兼容模式也是如此。
Vim 启动时设置 $VIM_POSIX 环境变量会使得 'cpoptions' 包含 POSIX 的标志位。这使
Vim 尽可能地照 POSIX 方式运行。这和 Vi 兼容模式稍有不同。
这里是 Vim 和 POSIX 指定行为不同之处以及原因:
*posix-screen-size*
如果终端获得的屏幕大小信息更加可靠,Vim 忽略 $COLUMNS 和 $LINES 环境变
量。在 'cpoptions' 里加入 '|' 标志位使 $COLUMNS 和 $LINES 可以否决另一
种方式获得的大小。
在原来的 Vi 上,"{" 和 "}" 命令不停在 "{" 上,但 POSIX 指定应该如此。
如果你希望 POSIX 方式,在 'cpoptions' 里加入 '{' 标志位。
"D"、"o" 和 "O" 命令接受计数,它们被重复时也是如此。
如果你希望忽略计数,在 'cpoptions' 里加入 '#' 标志位。
如果 'cpoptions' 里加入 '.' 标志位,那么当前缓冲区被修改时 ":cd" 命令
失败。
如果 'shortmess' 里加入 "A" 标志位,没有 ATTENTION 消息。
以下是运行 POSIX 测试包相关的评注:
- vi 测试 33 有时因为不明原因失败
- vi 测试 250 失败;新版本的行为会有改变
http://www.opengroup.org/austin/mail.../msg01710.html
- vi 测试 310 失败;任何错误出现时返回代码必须非零?
- ex 测试 24 失败,因为测试有问题。SUSv2 和 SUSv3 之间已修改。
- ex 测试 47、48、49、72、73 失败,因为安静模式下不读入 .exrc 文件也不使用
$EXINIT。
- ex 测试 76、78 失败,因为使用 echo 代替了 printf。(已修正)
另: \s 没有被换成空格的问题。
- ex 测试 355 失败,因为 'window' 不在 "30z" 里应用。
- ex 测试 368 失败,因为外壳命令在安静模式下不回显。
- ex 测试 394 失败,因为 "=" 命令输出在安静模式下不可见。
- ex 测试 411 失败,因为测试文件不正确,包含了多余的 ':'。
- ex 测试 475 和 476 失败,因为 reprint 输出在安静模式下不可见。
- ex 测试 480 和 481 失败,因为标签文件使用空格而不是制表。
- ex 测试 502 失败,因为安静模式下不读入 .exrc。
- ex 测试 509 失败,因为安静模式下不读入 .exrc。而且退出代码是 1 而不是 2。
- ex 测试 534 失败,因为安静模式下不读入 .exrc。
vim:tw=78:ts=8:ft=help:norl: