1
- *change.txt* For Vim version 7.2 . 最近更新: 2008年8月
1
+ *change.txt* For Vim version 7.3 . 最近更新: 2010年8月
2
2
3
3
4
4
VIM 参考手册 by Bram Moolenaar
@@ -260,7 +260,7 @@ LC_CTYPE 的值。
260
260
g~{motion} 切换 {motion} 跨越的文本的大小写。{Vi 无此功能}
261
261
262
262
g~g~ *g~g~* *g~~*
263
- g~~ 切换当前行的大写 。{Vi 无此功能}
263
+ g~~ 切换当前行的大小写 。{Vi 无此功能}
264
264
265
265
*v_~*
266
266
{Visual} ~ 切换高亮文本的大小写 (关于 {Visual} 见
@@ -436,8 +436,8 @@ CTRL-A 命令在宏命令里很有用。例如: 使用以下的步骤构造一
436
436
将 {range} 指定的行用外部程序 {filter} 过滤。Vim 把可
437
437
选的感叹号替换成最后一次使用的命令,并附加上可选的参数
438
438
[arg] 。Vim 把过滤命令的输出保存到临时文件,并把文
439
- 件内容读到一个缓冲区里。Vim 使用 'shellredir' 选项把过
440
- 滤程序的结果重定向到临时文件 。
439
+ 件内容读到一个缓冲区里 | tempfile | 。Vim 使用
440
+ 'shellredir' 选项把过滤程序的结果重定向到临时文件 。
441
441
不过,如果关闭了 'shelltemp' 选项且可以的话,使用管道
442
442
机制 (Unix 上)。
443
443
如果 'cpoptions' 包含 'R' 标志位,过滤行里的位置标记被
@@ -450,7 +450,8 @@ CTRL-A 命令在宏命令里很有用。例如: 使用以下的步骤构造一
450
450
={motion} 把 {motion} 跨越的行用 'equalprg' 选项指定的外部程序过
451
451
滤。如果 'equalprg' 选项为空 (缺省),使用内部的排版机
452
452
制 | C-indenting | 。但如果 'indentexpr' 非空,则使用之。
453
- | indent-expression | 。
453
+ | indent-expression | 。如果 Vim 编译时不包含内部排版机
454
+ 制,作为最后的手段,使用外部的 "indent" 程序。
454
455
455
456
*==*
456
457
== 和 ={motion} 类似,过滤 [count] 行。
@@ -459,6 +460,18 @@ CTRL-A 命令在宏命令里很有用。例如: 使用以下的步骤构造一
459
460
{Visual} = 和 ={motion} 类似,过滤高亮行。{Vi 无此功能}
460
461
461
462
463
+ *tempfile* *setuid*
464
+ Vim 使用临时文件来处理过滤、执行比较和用于 tempname()。Unix 上,该文件会放在一
465
+ 个私人的目录里 (只能被当前用户访问),以防堵安全上的漏洞 (例如,符号链接攻击或
466
+ 文件被其他用户读取等)。Vim 退出时,自动删除该目录及之下的所有文件。如果 Vim 本
467
+ 身设置了 setuid 位,这样或许会有问题。临时文件由 setuid 用户拥有,但过滤程序以
468
+ 原来用户的权限执行。
469
+ MS-DOS 和 OS/2 上,使用以下目录中首个可用者: $TMP、$TEMP、c:\TMP、c:\TEMP。
470
+ Unix 上,使用的目录依次为: $TMPDIR、/tmp、当前目录、$HOME。
471
+ MS-Windows 上,使用 GetTempFileName() 系统函数。
472
+ 其它系统上使用 tmpnam() 库函数。
473
+
474
+
462
475
4.2 替代 *:substitute*
463
476
*:s* *:su*
464
477
:[range] s[ubstitute]/{pattern} /{string} /[flags] [count]
@@ -488,9 +501,9 @@ CTRL-A 命令在宏命令里很有用。例如: 使用以下的步骤构造一
488
501
关于 [flags] ,参见 | :s_flags | 。
489
502
490
503
*&*
491
- & 等价于 ":s//~/ " (重复上次的 substitute)。注意 这里不记
492
- 住标志位 ,所以实际工作方式可能不尽相同。你可以用 ":&&"
493
- 来保持相同的标志位 。
504
+ & 等价于 ":s" (重复上次的 substitute)。注意 这里不记住标
505
+ 志位 ,所以实际工作方式可能不尽相同。你可以用 ":&&" 来
506
+ 保持相同的标志位 。
494
507
495
508
*g&*
496
509
g& 等价于 ":%s//~/&" (在所有行上重复上次的 substitute,并
@@ -746,7 +759,9 @@ magic nomagic 动作 ~
746
759
寄存器) ({.%#:} 只能用于放置命令)。
747
760
748
761
*:reg* *:registers*
749
- :reg[isters] 显示所有编号和命名寄存器的内容。{Vi 无此功能}
762
+ :reg[isters] 显示所有编号和命名寄存器的内容。但不列出用于 | :redir |
763
+ 目的地的寄存器。
764
+ {Vi 无此功能}
750
765
751
766
:reg[isters] {arg} 显示 {arg} 里提到的编号和命名寄存器的内容。例如: >
752
767
:dis 1a
@@ -808,8 +823,9 @@ magic nomagic 动作 ~
808
823
["x]gp 如同 "p",但光标停留在新文本之后。{Vi 无此功能}
809
824
810
825
*gP*
811
- ["x]gP 如同 "P",但光标停留在新文本之后。{Vi 无此功能} *:pu* *:put*
826
+ ["x]gP 如同 "P",但光标停留在新文本之后。{Vi 无此功能}
812
827
828
+ *:pu* *:put*
813
829
:[line] pu[t] [x] 放置文本 [从寄存器 x] 在行号 [line] (缺省为当前行) 之
814
830
后。它总是 | linewise | 行动作,因而这个命令可以用来把抽
815
831
出的块放置在新行上。
@@ -851,8 +867,11 @@ Vim 总是把文本放在下一行。你可以用命令序列 "xp" 来交换两
851
867
*put-Visual-mode* *v_p* *v_P*
852
868
在可视模式下使用如 | p | 或者 | P | 之类的放置命令时,Vim 试图把选择的文本替换成寄
853
869
存器的内容。是否工作如你所愿决定于选择的类型和寄存器里文本的类型。对于列块选择
854
- 而言,它也决定于列块的大小,和头尾是否包含存在的字符。(实现细节: 实际上,它先
855
- 把寄存器的内容放到选择区之后,再删除选择区。)
870
+ 而言,它也决定于列块的大小,和头尾是否在已存在的字符上。(实现细节: 实际上,它
871
+ 先把寄存器的内容放到选择区之后,再删除选择区的内容。)
872
+ 前次选择的文本被放在无名寄存器中。如果希望把相同的文本重复放入可视选择区多次,
873
+ 请选用其它寄存器。例如,先抽出要复制的文本,再可视化选择要替换的文本,然后使用
874
+ "0p。重复任意多次均可,而每次无名寄存器都会被改变。
856
875
857
876
*blockwise-register*
858
877
如果你使用面向列块的可视模式命令把文本存到寄存器里,文本列块会被插入在当前和其
@@ -883,8 +902,8 @@ Vim 总是把文本放在下一行。你可以用命令序列 "xp" 来交换两
883
902
1. 无名寄存器 "" *quote_quote* *quotequote*
884
903
用 "d"、"c"、"s"、"x" 等命令删除或者用 "y" 等抽出命令复制的文本都被 Vim 用来填
885
904
充该寄存器,不管是否用到别的专门寄存器 (例如 "xdd)。这就好像无名寄存器是指向最
886
- 近使用的那个寄存器的指针一样。'_' 寄存器是一个特例。"_dd 不把删除的文本存在任
887
- 何寄存器里 。
905
+ 近使用的那个寄存器的指针一样。使用大写寄存器进行添加时,无名寄存器包含和命名寄
906
+ 存器相同的文本。'_' 寄存器是一个特例。"_dd 不把删除的文本存在任何寄存器里 。
888
907
不指定寄存器的放置命令 (p 或 P) 使用无名寄存器的内容。你也可以用 '"' 作为名字
889
908
来访问该寄存器。这意味着要输入两个连续的双引号。写入 "" 寄存器将实际写到寄存器
890
909
"0 上。{Vi: 寄存器内容在更换文件时丢失,没有 '"'}
@@ -905,7 +924,7 @@ Vim 把抽出和删除命令的文本保存在这些寄存器里。
905
924
该寄存器保存删除不到一行内容的命令的文本,除非该命令用 ["x] 指定了寄存器。
906
925
{Vi 无此功能}
907
926
908
- 4. 命令寄存器 "a 到 "z 或者 "A 到 "Z *quote_alpha* *quotea*
927
+ 4. 命名寄存器 "a 到 "z 或者 "A 到 "Z *quote_alpha* *quotea*
909
928
Vim 只有在你指定的时候才使用这些寄存器。指定为小写字母时替换原来的内容,指定为
910
929
大写字母时附加到原来的内容。如果 'cpoptions' 里有 '>' 标志位,在附加文本前插入
911
930
一个换行符。
@@ -935,9 +954,13 @@ Vim 只有在你指定的时候才使用这些寄存器。指定为小写字母
935
954
到命令行上,这时你可以输入任何的表达式 (见 | expression | )。所有普通的命令行编辑
936
955
命令都可以使用,还有一个表达式专门的历史表。当你按回车结束命令行时,Vim 计算表
937
956
达式的结果。如果你用 <Esc> 结束,Vim 终止表达式。如果你不输入表达式,Vim 使用
938
- 最近的表达式 (和 "/" 命令的处理相似)。表达式的计算结果必须是一个字符串。如果结
939
- 果为数值,它被转化为字符串。列表、字典、函数引用类型的结果则产生错误信息 (通过
940
- string() 转化)。
957
+ 最近的表达式 (和 "/" 命令的处理相似)。
958
+
959
+ 表达式的计算结果必须是一个字符串。数值结果会自动转化为字符串。对 "p" 和 ":put"
960
+ 命令而言,浮点数结果也会被转化为字符串。如果结果为列表,每个成员被转成字符串,
961
+ 然后被单独放在一行上。字典、函数引用类型的结果则产生错误信息 (通过 string() 转
962
+ 化)。
963
+
941
964
如果 "= 寄存器被 "p" 命令使用,该字符串会在 <NL> 字符处断开。如果该字符串以
942
965
<NL> 结尾,则它被视为一个面向行的寄存器。{Vi 无此功能}
943
966
@@ -1027,7 +1050,7 @@ gq{motion} 对 {motion} 动作跨越的行进行排版。
1027
1050
:nnoremap Q gq
1028
1051
1029
1052
gqgq *gqgq* *gqq*
1030
- gqq 排版当前行。{Vi 无此功能}
1053
+ gqq 排版当前行。如带计数排版相应多行。 {Vi 无此功能}
1031
1054
1032
1055
*v_gq*
1033
1056
{Visual} gq 排版高亮文本 ({Visual} 的部分参见 | Visual-mode | )。
0 commit comments