version4

version4.txt 适用于 Vim 8.2 版本。 最近更新: 2006年2月 VIM 参考手册 by Bram Moolenaar 译者: Willis 本文档列出 Vim 3.0 和 Vim 4.0 不兼容的不同之处。尽管这里提到 4.0,但也适用于 4.1,4.2 版本等。 本文件对所有从 Vim 3.0 升级的用户很重要。仔细阅读以避免意想不到的问题。 'backup' 选项改变缺省值 backup-changed 备份文件扩展名改变 backup-extension 交换文件结构改变 swapfile-changed "-w scriptout" 参数改变 scriptout-changed 退格和删除键 backspace-delete | 转义键改变 escape-bar 键码改变 key-codes-changed 终端选项改变 termcap-changed 'errorformat' 选项改变 errorformat-changed 不再有 'graphic' 选项 graphic-option-gone 不再有 'yankendofline' 选项 ye-option-gone 'icon''title' 缺省值改变 icon-changed 'highlight' 选项改变 highlight-changed 'tildeop''weirdinvert' 缩写改变 short-name-changed "v"、"V" 和 "CTRL-V" 在可视模式的改变 use-visual-cmds 删除插入模式的 CTRL-B 功能 toggle-revins 'backup' 选项改变缺省值 backup-changed

过去 'backup' 缺省值是打开的。结果是在原来文件被覆盖的时候备份文件建立起来。 现在 'backup' 的缺省值是关闭。一旦文件成功的写入,备份文件就删除了。如果你想保 留备份文件,在你的 vimrc 文件里置位 'backup'。这个改变的原因是许多人抱怨留下备 份文件和 Vi 不兼容。 'backup' 备份文件扩展名改变 backup-extension

过去备份文件的扩展名是 '.bak'。因为别的程序也用这个扩展名,而且有的用户也自己 建立用这个扩展名的备份,现在换成了不太明显的 "~"。另外一个好处是这样使用较少的 空间,尤其是对短文件名的系统很有效。比如,在 MS-DOS 上 "longfile.c" 和 "longfile.h" 用的备份文件名本来都是 "longfile.bak";现在他们分别成为 "longfile.c~" 和 "longfile.h~"。 如果你宁可还是使用 ".bak",你可以设置 'backupext' 选项: :set bex=.bak 交换文件结构改变 swapfile-changed

交换文件的内容增加了若干参数。Vim 保存用户名字和被编辑文件的其它信息,使得恢复 更加容易,而且能知道交换文件是从哪里来的。交换文件的第一部分可以识别字节顺序或 者 sizeof(int) 不同的机器,当你在这样的机器上试图恢复时,你会得到错误信息,提 示这不可能。 因为这个改变,3.0 和 4.0 的交换文件不能互换。如果你有一个 3.0 的崩溃对话的交换 文件,用 Vim 3.0 恢复之---不要用 4.0。 swap-file "-w scriptout" 参数改变 scriptout-changed

"vim -w scriptout" 过去用来附加到 scriptout 文件。因为这不合逻辑,现在它用来建 立新文件。已有的文件不会被覆盖 (为了避免破坏期待这个附加功能的人不小心删除已有 的文件)。 [后来这个也删除了] -w 退格和删除键 backspace-delete

3.0 里,删除和退格键在插入模式里都起到退格的功能;它们删除光标左面的字符。在 4.0 里,删除键有了新功能: 他删除光标所在的字符,就像在命令行上那样。如果光标在 行尾之后并且置位了 'bs',两行会连接起来。 <Del> i_<Del> 3.0 里退格键总是定义为 CTRL-H,而删除键定义为 CTRL-?。4.0 里退格和删除键的代码 通过 termcap 和 termlib 定义,而且可以通过 Unix 的 "stty erase" 调整。这使得用 户可以根据他们的键盘重新定义这些键。 <BS> i_<BS> 如果你喜欢插入模式下的退格和删除键的旧行为,在你的 vimrc 里加入一行: inoremap ^? ^H 你也许想加上这些行来调整 <BS><Del> 的代码: set t_kb=^H set t_kD=^? (用 CTRL-V CTRL-H 输入 ^H,用 CTRL-V CTRL-? 或者 <Del> 输入 ^?。) 如果 t_kb 的值正确,但是 t_kD 的值不对,使用 ":fixdel" 命令。它会根据 t_kb 的 值设置 t_kD 的值。这可用于使用不同终端的场合。 :fixdel 如果 ^H 不是识别成 <BS> 或者 <Del>,它的用法类似于退格键。 | 转义键改变 escape-bar

如果 'cpoptions' 里有 'b' 标志位,反斜杠不能用于在映射和缩写命令里转义 '|'。只 有 CTRL-V 可以。这是 Vi 兼容的。如果工作在 Vi 兼容模式下,而在映射里为了加入竖 杠而包含 "\|",必须把它改成 "^V|"。参见 :bar 。 键码改变 key-codes-changed

键码的内部表示发生了很大的改变。3.0 里每个键用单字节代码表示。这导致了不同字符 集使用相同的代码时的很多问题。4.0 里,用三字节的代码来表示。这样不会和一个字符 发生混淆。 key-notation 如果你在 vimrc 里用单字节键码定义映射,你需要把他们换成 4.0 的代码。你不需要把 它们直接写成三字节的代码,而应该用 <> 括起来的符号表示形式。见下表。该表也列出 来 3.0 文档使用的旧名字。 <> 内的键码可以用来直接定义映射。这样,你可以直接复制/粘贴例子或者输入。<> 的 表示方法在这里有介绍 <> 。要使之工作,'cpoptions' 里必须不能用 'B' 和 '<' 标 志位 'cpoptions'旧名字 新名字 旧代码 旧的 MS-DOS 代码 十六进 十进制 十六进 十进制 <ESC> <Esc> <TAB> <Tab> <LF> <NL> <NewLine> <LineFeed> <SPACE> <Space> <NUL> <Nul> <BELL> <Bell> <BS> <BS> <BackSpace> <INSERT> <Insert> <DEL> <Del> <Delete> <HOME> <Home> <END> <End> <PAGE_UP> <PageUp> <PAGE_DOWN> <PageDown> <C_UP> <Up> 0x80 128 0xb0 176 <C_DOWN> <Down> 0x81 129 0xb1 177 <C_LEFT> <Left> 0x82 130 0xb2 178 <C_RIGHT> <Right> 0x83 131 0xb3 179 <SC_UP> <S-Up> 0x84 132 0xb4 180 <SC_DOWN> <S-Down> 0x85 133 0xb5 181 <SC_LEFT> <S-Left> 0x86 134 0xb6 182 <SC_RIGHT> <S-Right> 0x87 135 0xb7 183 <F1> <F1> 0x88 136 0xb8 184 <F2> <F2> 0x89 137 0xb9 185 <F3> <F3> 0x8a 138 0xba 186 <F4> <F4> 0x8b 139 0xbb 187 <F5> <F5> 0x8c 140 0xbc 188 <F6> <F6> 0x8d 141 0xbd 189 <F7> <F7> 0x8e 142 0xbe 190 <F8> <F8> 0x8f 143 0xbf 191 <F9> <F9> 0x90 144 0xc0 192 <F10> <F10> 0x91 145 0xc1 193 <SF1> <S-F1> 0x92 146 0xc2 194 <SF2> <S-F2> 0x93 147 0xc3 195 <SF3> <S-F3> 0x94 148 0xc4 196 <SF4> <S-F4> 0x95 149 0xc5 197 <SF5> <S-F5> 0x96 150 0xc6 198 <SF6> <S-F6> 0x97 151 0xc7 199 <SF7> <S-F7> 0x98 152 0xc8 200 <SF8> <S-F8> 0x99 153 0xc9 201 <SF9> <S-F9> 0x9a 154 0xca 202 <SF10> <S-F10> 0x9b 155 0xcb 203 <HELP> <Help> 0x9c 156 0xcc 204 <UNDO> <Undo> 0x9d 157 0xcd 205 (没用到) 0x9e 158 0xce 206 (没用到) 0x9f 159 0xcf 207 终端选项改变 termcap-changed

终端选项的名字改成了 termcap 定义的这些选项的名字。所有的终端选项现在都有 t_xx 这样的名字,其中 xx 是 termcap 的名字。通常这些选项都用不到。除非你有一个错误 或者不完整的 termcap 名字,或者你设置不同的光亮选项的值。 terminal-options 注意 有些键没有 termcap 的名字。应该用 <> 形式的名字,不管这么说,这总是一个好 主意。 注意 "t_ti" 变成了 "t_mr" (反转输出) 而 "t_ts" 变成了 "t_ti" (初始终端模式)。 用 "t_ti" 的时候要小心! 旧名字 新名字 含义 t_cdl t_DL 删除行数 t_cdl t_ci t_vi 光标不可见 t_ci t_cil t_AL 插入行数 t_cil t_cm t_cm 移动光标 t_cri t_RI 光标右侧字符数 t_cri t_cv t_ve 光标可见 t_cv t_cvv t_vs 光标非常可见 t_cvv t_dl t_dl 删除行 t_cs t_cs 滚动区域 t_ed t_cl 清除显示 t_ed t_el t_ce 清除行 t_el t_il t_al 插入行 t_il t_da 屏幕上方保留显示 t_db 屏幕下方保留显示 t_ke t_ke 设置终端离开 keypad 传输模式 t_ks t_ks 设置终端进入 keypad 传输模式 t_ms t_ms 保存以便在高亮模式里移动光标 t_se t_se 正常模式 (撤销 t_so) t_so t_so 突出 (standout) 模式 t_ti t_mr 反转高亮 t_tb t_md 粗体模式 t_tb t_tp t_me 结束高亮 t_tp t_sr t_sr 反转滚动 t_te t_te 结束 termcap 模式 t_ts t_ti 进入 termcap 模式 t_ts_old t_vb t_vb 可视响铃 t_csc t_CS 光标相对滚动区域 t_csc t_ku t_ku <Up> 向上光标键 t_kd t_kd <Down> 向下光标键 t_kr t_kr <Right> 向右光标键 t_kl t_kl <Left> 向左光标键 t_sku <S-Up> shifted 向上光标键 t_sku t_skd <S-Down> shifted 向下光标键 t_skd t_skr t_%i <S-Right> shifted 向右光标键 t_skr t_skl t_#4 <S-Left> shifted 向左光标键 t_skl t_f1 t_k1 <F1> 功能键 1 t_f1 t_f2 t_k2 <F2> 功能键 2 t_f2 t_f3 t_k3 <F3> 功能键 3 t_f3 t_f4 t_k4 <F4> 功能键 4 t_f4 t_f5 t_k5 <F5> 功能键 5 t_f5 t_f6 t_k6 <F6> 功能键 6 t_f6 t_f7 t_k7 <F7> 功能键 7 t_f7 t_f8 t_k8 <F8> 功能键 8 t_f8 t_f9 t_k9 <F9> 功能键 9 t_f9 t_f10 t_k; <F10> 功能键 10 t_f10 t_sf1 <S-F1> shifted 功能键 1 t_sf1 t_sf2 <S-F2> shifted 功能键 2 t_sf2 t_sf3 <S-F3> shifted 功能键 3 t_sf3 t_sf4 <S-F4> shifted 功能键 4 t_sf4 t_sf5 <S-F5> shifted 功能键 5 t_sf5 t_sf6 <S-F6> shifted 功能键 6 t_sf6 t_sf7 <S-F7> shifted 功能键 7 t_sf7 t_sf8 <S-F8> shifted 功能键 8 t_sf8 t_sf9 <S-F9> shifted 功能键 9 t_sf9 t_sf10 <S-F10> shifted 功能键 10 t_sf10 t_help t_%1 <Help> help 键 t_help t_undo t_&8 <Undo> undo 键 t_undo 'errorformat' 选项改变 errorformat-changed

'errorformat' 现在包含多种格式,以逗号分隔。第一个匹配的格式被使用。缺省值现在 能捕获许多常见格式。 errorformat 如果你有一种格式包含逗号,前面需要加上反斜杠转义。输入两个反斜杠,因为 ":set" 会吃掉一个。 不再有 'graphic' 选项 graphic-option-gone

'graphic' 选项过去使得 <~> 和 0xa0 之间的字符在屏幕上直接显示。现在 'isprint' 选项替代了它,而且增加了很多可能性。缺省的设置一样;如果你以前在 vimrc 置位了 'graphic' 选项,你只需要看到这一点就行了。 'isprint' 不再有 'yankendofline' 选项 ye-option-gone

'yankendofline' 选项被删除了。你可以用 :map Y y$ 'icon''title' 缺省值改变 icon-changed

'title' 选项现在缺省只有在原来的标题恢复的时候才设置。不再有 "Thanks for flying Vim" 标题。如果你还是想要,在你的 vimrc 文件加上 ":set title"。 'title' 'icon' 的缺省值现在决定于原来的值是否恢复,和 'title' 类似。如果你不喜欢你的 icon 标题被改变,在 vim 里设置这一行: 'icon' :set noicon 'highlight' 选项改变 highlight-changed

'i' 标志位现在意味着斜体高亮,而不是反转。'r' 标志位现在用来代表反转高亮,也就 是 'i' 过去的含义。通常你看不到区别,因为多数终端不支持斜体模式,而用反转模式 作为替代。 'highlight' 如果 'highlight' 的一种场合不存在,使用 'highlight' 的缺省值,而不是反转模式。 'tildeop''weirdinvert' 缩写改变 short-name-changed

'to' 换名成 ('tildeop' 的缩写) 'top''tildeop' 'wi' 换名成 ('weirdinvert' 的缩写) 'wiv''weirdinvert' 之所以这么做,是因为 Vi 使用 "wi" 作为 'window' 的缩写,而 'to' 作为 'timeout' 的缩写。这意味着你如果试图设置这些选项,你不会得到错误信息,但是效果不同。 "v"、"V" 和 "CTRL-V" 在可视模式的改变 use-visual-cmds

在可视模式下,"v"、"V" 和 "CTRL-V" 用来终止可视模式。现在这只有在可视模式处于 相应的类型时才会,不然可视模式的类型发生相应的改变。现在只有 ESC 用来在所有情 况下不做别的,只终止可视模式。 v_V 删除插入模式的 CTRL-B 功能 toggle-revins

插入模式下的 CTRL-B 原来用来切换 'revins' 选项。如果你不知道这一点而不小心按了 CTRL-B,要发现怎么撤销这一点很困难。因为几乎没人用到这一功能,缺省这个功能被关 闭了。如果需要,编译前在 feature.h 里定义 RIGHTLEFT。 'revins' vim:tw=78:ts=8:noet:ft=help:norl: