VIM 几乎可以运行在"任何"操作系统之上, 包括我们常用的 DOS, Windows 和 UNIX/Linux. 目前, 大多数的 Linux 分版都带有 VIM, 它的源程序以及其它操作系统的版本也可以很容易地从它的主页上自由下载. 你可以访问 VIM 的主页以获得更多的信息.
尽管 VIM 功能十分强大, 但对于刚接触它的人尤其是用惯 DOS 的 EDIT 的人来说, VIM 并不十分易于掌握, 毕竟它兼容的是 vi 而不是 EDIT. 本文旨在介绍 VIM 中我所了解的用法, 希望有更多的人喜欢 VIM. 应该指出的是, VIM 中有太多的功能和命令, 有许多你并不用的着, 因此没有记得必要, 有些我也不知道, 这要靠你来发现, 关键是多看"help", 多试.
1. vi 的基本用法
vi 的屏幕区域分为两个部分: 最下面一行是命令行, 一般用于提示信息或命令行输入; 除此之外为正文显示区域. 跟 EDIT 不同的是, vi 中存在三种模式: 普通(Normal)模式, 插入(Insert)模式, 可视(Visual)模式.
进 入 vi 后缺省即为普通模式. 新手一般初次进入 vi 后就狂敲一串字符, 结果发现 vi 一连串莫名其妙的反应. 其实, 在 vi 的普通模式下, 任何按键包括普通字符都表示某个命令, 并不表示在当前光标处插入字符. 常用的命令有: (注意区分大小写)
: 进入命令行
i 或 a 进入插入模式. 区别是: i 进入插入模式后的光标在当前字符前面, a 进入插入模式后的光标在当前字符后面
v 进入可视模式
h, j, k, l 分别是光标左移, 下移, 上移, 右移 (一般来说你不会用到它来移动光标, 按方向键就可以了)
x 删除一个字符
dd 删除一行
J 删除本行的回车符, 也就是把下一行并入本行末尾
r字符 替换光标所在字符为新字符
p 或 P 在当前位置粘贴剪贴板的内容, p 粘在光标所在字符后面, P 粘在前面
数字G 移动光标到第若干行, 如果直接按 G 则移动到最后一行
在普通模式中, 命令以按键形式输入. 而在命令行中, 命令以字符串形式输入. 下面是常用的命令行:
:q 退出! (更确切的说应该是关闭当前文件)
:w 文件名 存盘. 如果还是保存为当前文件名, 那么文件名不必写
:wq 存盘退出
:n 文件名 打开或新建文件(同时关闭当前文件). 如果不指定文件名或者文件名不存在则是新建文件
:help 帮助! 看完后用 :q 关掉窗口. 可以在 help 后面加某个帮助主题的名称, 如 :help dd 和 :help help
还 有一点是, 如果某个命令得到警告(拒绝执行), 则要在命令的命令词后加叹号表示强制执行. 比如你修改过文件, 但又想放弃存盘并退出, 如果输入 :q, vi 会告诉你文件已修改, 这时, 你只能输入 :q! 退出. 又如用 :w! a.txt 表示把当前文件存为 a.txt 而不管 a.txt 是否已经存在.
插入模式就不用多说了, 添加你的新内容吧. 不过, 你也许会发现 BackSpace 健和 Delete 健的运用很受限制, 也不能像 EDIT 那样选择, 复制和粘贴. 这些都是由于这是 vi 的标准, 后面我们将看到 VIM 扩展的功能可以解决这些问题. 记住按 ESC 退出插入模式, 回到普通模式.
可视模式其实跟"可视"没有太大联系, 更确切的应该称为选择模式. vi 里对复制粘贴的问题是这样解决的: 首先在普通模式下移动光标到要选择的文本块开头, 然后按 v 进入可视模式, 再移动光标到要选择的文本块末尾(注意光标所在字符是包含在块中的), 现在你有几种选择: 按 y 复制到剪贴板, 按 x 剪切到剪贴板, 按 d 删除. 当你输入了其中一条命令后, vi 将会回到普通模式, 这时你可以按 p 或 P 粘贴. 在 vi 中复制粘贴需要切换模式, 因此挺麻烦. 后面我们将利用 VIM 扩展的功能解决这个问题.
2. VIM 的定制
VIM 在 vi 的基础上扩展了许多功能和命令, 但是这些功能缺省是关闭的. 为了使用这些功能, 我们需要编写一个 vimrc 文件. 在 DOS/Windows 版本的 VIM 中, 这个文件应放在 VIM 的目录下, 文件名为"_vimrc". 在 UNIX 版本 的 VIM 中, 这个文件一般可以放在用户的个人主目录下, 文件名为".vimrc". VIM 启动时将会把 vimrc 文件中的每一行作为命令行依次执行, 我们可以在该文件中加入若干命令, 使 VIM 启动时自动开启一些有用的功能, 定义一些常用的快捷键等.
你的 VIM 安装目录下很可能已经带有一个缺省的 vimrc 文件, 它在某些方面也许比下面我所介绍的设置要好用, 你可以互相参考.
下面是一个 vimrc 文件的示例: (请注意区分浏览器的换行与实际的换行.)
" 设置 Backspace 和 Delete 的灵活程度, backspace=2 则没有任何限制
set backspace=2
" 设置在哪些模式下使用鼠标功能, mouse=a 表示所有模式
set mouse=a
" 设置路径, 在 f 等命令中涉及此参数
" 对于 Windows95 编程, path 可设为如
" set path=.,"C:\Program Files\Microsoft Visual Studio\vc98\Include",,
" 对于 UNIX 编程, path 可设为如下
set path=.,/usr/include,/usr/include/qt,,
" 打开光标的行列位置显示功能
set ruler
" 设置跳格距离
set tabstop=4
" 设置自动缩进格数
set shiftwidth=4
" 打开自动缩进功能
set smartindent
" 设置哪些键可以行间绕转, 如下设置则 Backspace 和方向键等均可行间绕转
set whichwrap=b,s,h,l,<,>,[,]
" 根据当前文件语法自动变色. VIM 识别上百种文本文件的语法, 如 html, c++, java 等
syntax on
" 以下定义 等键, 解决 vi 复制粘贴的困难
vnoremap y "ryi vnoremap x "rxi
vnoremap d di
imap :if col(".")!=1 exe 'normal "rp'elseexe 'normal "rP'endif`[i
nmap "rP
imap :if col(".")!=1 exe 'normal lv'elseexe 'normal v'endif
nmap v
根 据以上定义, 复制粘贴可以这样完成: (在普通或插入模式下)首先移动光标到要选择的文本块开头, 然后按 自动切换到可视模式, 再移动光标到要选择的文本块末尾, 按 y 复制到剪贴板, 按 x 剪切到剪贴板, 按 d 删除. 当你输入了其中一条命令后, vi 自动回到插入模式, 这时你可以按 粘贴. 以上操作无需按 Esc 回到普通模式, 因此比 vi 中方便.
上面所述仅仅是解决复制粘贴问题的方法之一, 是我所习惯的一种方法. 其实, 你还可以尝试以下方法, 它们均无须进行多次模式切换:
1) 插入模式下按 Ctrl+O 再按 v 即可进入可视模式, 或者按 Ctrl+O 再按 P 或 p 即可粘贴. Ctrl+O 的详细用法请见后.
2) 命令 :behave mswin 可以使用 EDIT 风格的按键, 如 Shift+方向键 选择等, 详细情况请看帮助.
3) 肯定还有其它方法. :-)
这里是我常用的 .vimrc (3K) 文件, 你可以参考一下. 如果遇到没有见过的命令或者参数, 可以自己看看"help".
3. VIM 的其它命令
要 真正使用 VIM, 光靠 vi 的基本命令当然不行啦, 下面就来介绍更多的命令. 以下的命令, 有些是 VIM 特有的, 有些在 vi 中也存在, 我就不加区分了. 其中, 以":"开头表示该命令在命令行输入, 以"i"开头表示这是插入模式下的命令, 其它则是普通模式下的命令. 表示按 Ctrl+X.
3.1 使用帮助
在 :help 中, 遇到超连接可以按 Ctrl+] 跳转
在 :help 中, 按 Ctrl+T 往回跳转
3.2 打开多个文件
:split 文件名 切分出一个新窗口, 打开指定文件. 如果省略文件名, 则仍显示当前文件, 可用于同时观察文件的不同部分.(注意跟 :n 的区别)
f 切分显示光标所指的文件名, VIM 会在 path 中搜索该文件名, 比如常用它打开 #include 语句中的文件
当同时打开几个文件时, 按 在各窗口之间切换
_ 当同时打开几个文件时, 按 _ 使当前窗口最大化
:set scrollbind 设置卷动绑定属性. 所有设置了卷动绑定属性的窗口将一起卷动. 可以用 :set noscrollbind 解除绑定
3.3 撤销和恢复
编辑过程中出现错误在所难免, 不过没有关系, VIM 允许无限次的撤销. 只要你没有关闭文件, 你甚至可以一直撤销下去, 回到几个小时以前刚打开这个文件开始工作时的状态.
u 撤销(Undo)上次所做的修改
恢复(Redo)上次撤销的内容
3.4 字符串搜索替换
/字符串 向下搜索字符串
?字符串 向上搜索字符串
*, # 向下和向上搜索光标所指的词
n 重复上一次搜索
:起始行,结束行s/搜索串/替换串/g 从起始行到结束行, 把所有的搜索串替换为替换串
:set ignorecase 设置忽略字母大小写. 可以用 :set noignorecase 取消忽略字母大小写
例 如 /hello 从当前光标位置开始向下搜索 hello, 不带字符串的命令 / 可重复上一次搜索, 相当于 n. 又如 :1,$s/hello/hi/g 把全文中的 hello 改为 hi, 其中 $ 表示最后一行. 另外, 你还可以先进入可视模式选择一段文本, 按 : 并输入 s/hello/hi/g , VIM 将在选中段中进行替换操作.
搜索字符串用的是正规表达式(Regular expression), 其中许多字符都有特殊含义:
\ 取消后面所跟字符的特殊含义. 比如 \[vim\] 匹配字符串"[vim]"
[] 匹配其中之一. 比如 [vim] 匹配字母"v", "i"或者"m", [a-zA-Z] 匹配任意字母
. 匹配任意字符
* 匹配前一字符大于等于零遍. 比如 vi*m 匹配"vm", "vim", "viim"....
\+ 匹配前一字符大于等于一遍. 比如 vi\+m 匹配"vim", "viim", "viiim"....
\= 匹配前一字符零遍或者一遍. 比如 vi\=m 匹配"vm"或者"vim"
^ 匹配行首. 例如 /^hello 查找出现在行首的单词 hello
$ 匹配行末. 例如 /hello$ 查找出现在行末的单词 hello
\(\) 括住某段正规表达式
\数字 重复匹配前面某段括住的表达式. 例如 \(hello\).*\1 匹配一个开始和末尾都是"hello", 中间是任意字符串的字符串
对于替换字符串, 可以用"&"代表整个搜索字符串, 或者用"\数字"代表搜索字符串中的某段括住的表达式.
举一个复杂的例子, 把文中的所有"abc......xyz"字符串替换为"xyz......abc"可以有下列写法:
:%s/abc\(.*\)xyz/xyz\1abc/g
:%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/g
其它关于正规表达式搜索替换的更详细准确的说明请看"help".
3.5 插入补全
在 插入模式下, 为了减少重复的击键输入, VIM 提供了若干快捷键, 当你要输入某个上下文曾经输入过的字符串时, 你只要输入开头若干字符, 使用快捷键, VIM 将搜索上下文, 找到匹配字符串, 把剩下的字符补全, 你就不必敲了. 这样, 编程序时你起多长的变量名都没关系了, 而且还可以减少输入错误. 我认为, 插入补全是 VIM 最为突出的一项功能.
i 向上搜索, 补全一个词. 例如, 上文中出现过 filename 这个词, 当你想再输入 filename 时, 只要按 f 即可. 假如 VIM 向上搜索, 找到以 f 开头的第一个匹配不是 filename, 你可以继续按 搜索下一个匹配进行补全. 当然, 如果你想一次 就成功, 你可以多输入几个字符比如 filen 再按 补全
i 向下搜索, 补全一个词
i 补全一行. 比如你写过一行 for (int i=0;i<100;i++), 你想再写一模一样的一行, 只要输入 for 即可. 如果补全出来的不是你想要的那一行, 你可以按 或 选择上一个或下一个匹配行
i 在文件系统中搜索, 补全一个文件名
如果按 或 补全一个词, 在当前文件中没有找到匹配, VIM 将搜索 #include 语句中的文件, 而文件的位置将在 path 中搜索.
3.6 键的定义
在 VIM 中你可以定义一个键, 按了这个键等于按了某一串预定的键. 比如
:map! ddi
表示如果你在插入模式下按 就相当于连续按了 ddi, 这将会使 VIM 退回到普通模式, 删除一行, 再进入插入模式.
map 命令有许多变化形式, 每种变化形式所定义的键只在某些模式下有效, 而在其它模式下无效. 你需要根据情况使用正确的变化形式:
:nmap 键只对普通模式有效
:imap 键只对插入模式有效
:vmap 键只对可视模式有效
:cmap 键只在命令行下有效
:map 键在普通模式和可视模式都有效
:map! 键在插入模式和命令行下都有效
还要注意, 如果你定义 :map d di 这将引起循环定义错误. 这时, 你需要使用 :noremap d di 来定义. 同样, noremap 也有对不同模式的变化形式.
比如, 你想在文件的每一行的倒数第二个字符处插入字符串"abc", 你可以定义
:nmap $hiabcj
在 普通模式下按一次 将会: 光标移到行末, 光标左移一格, 进入插入模式, 输入"abc", 退回到普通模式, 光标下移一行. 不停地按 将解决问题. 这是我编程时临时处理多行重复操作的常用手段, 当然, 这是一种笨办法. :-) 而上文写到的对 的定义则是 map 更复杂的用法. 你还可以定义
:map :w:!gcc -o %< -I/usr/include/qt -lqt %
:map :!./%<
实现按 编译当前文件, 按 执行.
在插入补全当中提到的补全一行需要按 , 如果你觉得麻烦, 你可以定义
:inoremap
减少击键次数. 同样, 对 也可以作类似定义.
3.7 其它命令
:!命令行 执行一条外部命令
. 在光标当前位置处重复上一次操作
i后续字符 输入特殊的 ASCII 字符或键. 除了插入模式外, 也适用于命令行. 后续字符可以是键盘上的任意键, 也可以是三位的十进制数字表示字符的 ASCII 码. 具体细节请自己尝试, 或者看"help".
i命令 执行一个普通模式的命令, 执行完毕后回到插入模式
i 跳转到光标所指标识符的定义行. 比如你在编程时遇到一个函数 CreateWindow, 想看它的定义语句, 你就可以在它上面按 i, VIM 将打开新窗口, 把光标移到它定义的地方. 当然, 前提是在当前文件或它的 #include 文件中存在 CreateWindow 的定义. 这也牵涉到 path 的设置. 不过, VIM 找得不一定很准
K 看光标所指标识符的 man 帮助页
i 把上一行对应列的字符抄下来
i 把下一行对应列的字符抄上来(写这一行时我就用了 )
光标所指整数加一
光标所指整数减一
光标返回到以前的位置. 相当于光标移动的"撤销"
:X 对当前文本文件加密
4. VIM 6.0 的一些新特性
2001 年 9 月 26 日发布的 VIM 6.0 增加了一些以往没有的新特性. 下面仅仅是一些简单的介绍, 更详细的描述请自己看"help".
打开目录
在 VIM 6.0 中, n 和 split 等命令不但可以打开普通文件, 还可以打开目录. 一个目录打开以后将列出里面的文件信息, 可以按回车继续打开相应的文件或者子目录, 也可以按 ? 得到其它目录操作(修改文件名, 删除文件等)的帮助.
折叠
当一个文本太长而你又对其中很长一大段内容不关心的话, 可以把你不关心的那些行折叠起来, 让它们从你的视线中消失. 被折叠的行将以一行显示代替, 例如:
+--217 行: 2. VIM 的定制---------------------
折叠可以有多种方式控制, 可以通过设置 foldmethod 选项的值来改变. 缺省情况下 foldmethod=manual 为手工折叠. 下面介绍几个使用折叠的最简单的命令:
vzf 手工创建折叠. 在可视模式下选择一段文本, 然后按 zf 可以手工创建一个折叠
方向键左或右 打开折叠. 普通或插入模式下, 在折叠行上横向移动光标将打开被折叠的行
zc 关闭折叠
垂直切分窗口
:vsplit 文件名 垂直切分窗口. 跟 :split 命令相似, 但新窗口与原窗口左右并列.
更多的正规表达式
VIM 6.0 比以前增加了许多新的正规表达式, 其中我认为最有用的是换行匹配符 \n. 以前的版本中, 正规表达式只能在同一行上匹配. 现在, 只要显式地给出 \n , 正规表达式可以跨多行.
diff 模式
专 门用于比较编辑两个或多个内容相近的文件的模式. 一般来说, 比如你要比较编辑 A 跟 B 两个文件, 你可以这样: 先打开文件 A, 然后 vsplit 打开文件 B, 对文件 A 和 B 都输入命令 :diffthis. 这时 VIM 将非常清晰的对比显示出两个文件的不同之处, 编辑起来十分方便.
仔细一看, 这个 diff 模式动用了 VIM 许许多多的特性, 包括垂直切割, 滚动绑定, 折叠和语法变色等等. 好高级啊!
我 所熟悉的 VIM 的功能已经介绍得差不多, 剩下的要靠你自己来学习了. 其实, VIM 的功能还有很多很多. 还是那句话, 多看"help", 多试. VIM 的帮助还是挺容易看的, 相信你看了以后会有更多的惊喜. 如果你有什么心得或者新发现, 欢迎跟我讨论. 最后, 向大家推荐一个去处: vim online. 那有一些 VIM 的脚本和插件, 还有不少有用的技巧提示.
6.0 - 依字母顺序的vi快速参考
... 是指有些东西需要在命令之前或之后指明.这通常是说光标的移动键
(h,j,k,l,w,b等等)或者是指行号.
# (这里#代表一个数字) 执行n次后面的命令...
: 进入ex模式
) 下一句
( 上一句
} 下一段
{ 上一段
]] 下一节
[[ 上一节
0 行的开头
$ 行的末尾
^ 行的第一个非空白字符
+ 下一行的开头
- 上一行的开头
(空格) 下一个字符
(回车) 下一行
/ 向前搜索
? 向后搜索
% 查找当前小(中,大)括号的匹配字符
, 逆向重复上一个f,F,t或T操作
; 重复上一个f,F,t或T操作
. 重复上一个操作
` 转到标记处
转到标记所在行的开头
`` 查找前回到上一个做标记的地方
\ 查找前回到上一个做标记所在行的开头
~ 切换字符的大小写
" 保存到寄存器中
!! 重复上一次SHELL命令
! 把后面的文本送给命令, 取代输出(例如, !}fmt把当前的段落
送给命令fmt处理,然后用fmt返回的东西替换输出.)
>> 右移当前段落一个移动宽度(shiftwidth)
<< 左移当前段落一个移动宽度(shiftwidth)
>% 从当前到匹配小(中,大)括号之间的文本右移
<% 从当前到匹配小(中,大)括号之间的文本左移
(似乎漏了一个符号|, 移动到某一列----译注)
a 在当前位置之后添加
A 在当前行的末尾添加
^a 没有使用
b 上一个单词的开头
B 上一个单词的开头,忽略标点符号
^b 上移一屏
c 覆盖...
C 覆盖到行末尾
^c 终止插入模式,在命令模式没有用
d 删除...
D 删除到行末尾
^d 下移半屏,如果在插入模式下则移到上一个移动宽度(ShiftTab)处
e 单词的末尾
E 单词的末尾,忽略标点符号
^e 屏幕下卷一行
f 查找...
F 向后查找...
^f 下移一屏
g 未用
G ...跳至[缺省是到文件末尾]
^g 显示状态栏
h 左移
H 屏幕上的第一行
^h 在插入模式下是退格,命令模式下是左移
i 在当前的位置前面插入
I 在本行的第一个非空白字符前面插入
^i 插入模式下是制表键,命令模式下未用
j 下移
J 把下一行合并到本行
^j 命令模式下是下移,插入模式下是建一个新行
k 上移
K 未用
^k 未用
l 右移
L 屏幕中的最后一行
^l 重绘屏幕
m 把当前位置标记到寄存器中
M 屏幕的中间行
^m 回车
n 重复上次查找
N 逆向重复上次查找
^n 命令模式下是下移
o 在当前行的下面建一个新行
O 在当前行的上面建一个新行
^o 未用
p 在当前行的下面粘贴
(译注--应为在当前位置的后面粘贴)
P 在当前行的上面粘贴
(译注--应为在当前位置的前面粘贴)
^p 命令模式下是上移
q 未用
Q 退出并且启动ex
^q 未用
r 覆盖当前的字符
R 在插入模式下一直覆盖字符
^r 在命令模式下面重绘屏幕
s 替换
S 替换整行
t 到...
T 向后到...
^t 移到下一个移动宽度(shifttab)处
u 撤消上一次操作
U 撤消对本行的所有修改
^u 上移半屏
v 未用
V 未用
^v 未用
w 下一个单词的开头
W 下一个单词的开头,忽略标点符号
^w 命令模式下未用,在插入模式下是到上一个单词的开头处
x 删除当前字符
X 删除前一个字符
^x 未用
y 复制...
Y 复制整行
^y 屏幕上卷一行
z 重新配置当前行周围的屏幕
ZZ 保存之后退出
^z 未用
(译注--在命令模式下,^z执行了UNIX暂停操作
6.1 - 命令模式的输入选项(:命令)
(注: 这不是一个规范的列表,, 我只是列出了一些最重要的命令)
:r <文件> 把<文件>读入到当前文档
:r !<命令> 把<命令>的输出插入到当前文本中
:nr <文件> 把<文件>插入到第n行
:!<命令> 运行<命令>,然后返回
:sh 转到SHELL
:so <文件> 读取<文件>,再执行文件里面的命令
(译注--文件中的命令应该都是一些ex命令)
:x 保存之后退出
:wq 保存之后退出
:l1,l2w <文件>把第l1和第l2行之间的文本写到<文件>中去,如果没有指定<文件>,
vi就假定是当前文件,如果没有指定l1,l2,就假定是整个文件(就成了:w)
:w >> <文件> 添加到<文件>末尾. 也可以使用行号
:w! 覆盖当前文件
:q 退出
:q! 不存盘就退出
:e <文件> 不离开vi编辑<文件>
:e! 重新编辑当前文件,忽略所有的修改
:n 编辑下一个文件
:e +n <文件> 从第n行开始编辑<文件>,如果超过了末尾,就从末尾开始编辑
:e# 编辑替换文件(如果使用了命令:e<文件>,替换文件就指的是原始文件)
:args 显示所有要编辑的文件
:rew 重新回到第一个编辑的文档
:map m n 创建一个宏(使 m 做 n)
:map! m n 创建一个插入模式的宏(使 m 做 n)
:unmap m 删除宏m
:unmap! m 删除插入模式的宏m
:ab <1> <2> 缩写,敲<1>的时候用<2>取代
:unab <1> 取消缩写<1>
:set <选项> 设置<选项>...
6.2 - 设置选项(set)
可以使用括号中的缩写形式. 语法:
:set <选项> <参数> (如果需要参数的话)
也可以在一行中指定多个选项
:set <选项>? 显示出当前这个选项的参数值
:set all 则显示所有的选项值
对那些无须参数的选项来说,使用:set no<选项>就可以把它给关了
选项: 缺省值: 含义:
autoindent (ai) noai 使新行自动缩进,和上(下)行的位置对齐
autoprint (ap) ap 每条命令之后都显示出修改之处
autowrite (aw) noaw 在:n,:!命令之前都自动保存文件
beautify (bf) nobf 在输入的时候忽略所有的控制字符
(除了制表键(tab),换行(newline),进纸(formfeed))
directory= (dir=) /tmp 存放缓冲区的目录名
edcompatible noedcompatible 在替换的时候使用类ed的用法
errorbells (eb) errorbells 出错的时候响铃
exrc (ex) noexrc 允许在主目录(home)外面之外放.exrc文件
hardtabs= (ht=) 8 设置硬制表的边界
ignore case (ic) noic 正规式里忽略大小写
lisp nolisp 打开lisp模式
list nolist 显示所有的制表键和行的结尾
magic magic 可以使用更多的正规表达式
mesg mesg 允许向终端发送消息
number (nu) nonumber 显示行号
open open 允许开放和可视化
optimize (opt) optimize 优化吞吐量,打印时不发回车
paragraphs= (para=) IPLPPPQPPLIbp 设置{ & }的分界符
prompt prompt 命令模式下的输入给出:的提示符
readonly (ro) noro 除非用!号否则不准保存文件
redraw noredraw 当编辑的时候重绘屏幕
remap remap 允许宏指向其他的宏
report= 5 如果影响的行数>这个数的话就报告
scroll 1/2 window 下卷屏幕时滚动屏幕的数目,
同样这也是z命令输出的行数(z 输出2倍滚屏的大小)
sections= SHNHH HU 定义节的末尾(当使用命令[[ 和 ]] 时)
shell= (sh=) /bin/sh 缺省的SHELL,如果设置了环境变量SHELL的话,就使用变量
shiftwidth= (sw=) 8 当使用移动(shift)命令时移动的字符数
showmatch (sm) nosm 显示{, }, (, ), [, 或者 ] 的匹配情况
showmode noshowmode 显示你处在什么模式下面
slowopen (slow) 插入之后不要立刻更新显示
tabstop= (ts=) 8 设置制表停止位(tabstop)的长度
taglength= (tl=) 0 重要标记的字符个数(0表示所有的字符)
tags= tag, /usr/lib/tags 定义包含标记的文件路径
term= 设置终端类型
terse noterse 显示简短的错误信息
timeout (to) timeout 一秒钟后键盘映射超时
ttytype= 设置终端类型
warn warn 显示"No write since last change"信息
window= (w=) 可视模式下窗口的行数
wrapmargin= (wm=) 0 右边距,大于0的话最右边的单词将折行,留出n个空白位置
wrapscan (ws) ws 查找到文件尾后再重头开始
writeany (wa) nowa 可以保存到任意一个文件去