A!die Software Studio Welcome to A!Die Software Studio

vim 命令参考

by adie
2017-3-15

命令行

vi filepath 打开或创建文件进行编辑
vi directory 打开目录
vi scp:/http:/ftp:/sftp:/dav:/rcp: 编辑远程文件
vi -b filepath 在二进制模式中编辑
vi -c command filepath 启动时执行指定的 ex 命令
vi -cmd command filepath 在 vimrc 文件之前执行 ex 命令
vi -d file1 file2 以 diff 模式查看 2~4 个文件的差异
vi -m filepath 关闭写入选项, 不能修改缓冲区
vi -onumber file1 file2 用多窗口打开多个文件
vi -Onumber file1 file2 用垂直切分的窗口打开多个文件
vi +number filepath 在指定的行打开文件
vi + filepath 在最后一行打开文件
vi +/pattern filepath 在第一个出现 pattern 的地方打开文件
vi -R filepath 以只读模式打开文件
vi -r 显示由于系统崩溃而保存的缓冲列表
vi -r filepath 恢复编辑保存的缓冲
vi filepath1 filepath2 同时打开多个文件进行编辑
gvim / vi -g 打开图形化的 vim 程序
vimtutor 学习 vi 的引导教程

配置脚本

VIMINIT 环境变量 将环境变量内容当做 ex 命令运行
EXINIT 环境变量
/etc/vimrc
主目录 .vimrc 文件
主目录 .exrc 文件
当前目录 .vimrc 文件 设置 set exrc 选项后有效, set noexrc 取消
当前目录 .exrc 文件 设置 set exrc 选项后有效, set noexrc 取消

命令模式

移动
h 光标左移一个字符
j 光标下移一行
k 光标上移一行
l 光标右移一个字符
^ 移动到本行的第一个非空格字符
0 移动到行首
$ 移动到行尾
% 在匹配的括号上移动
number% 移到按百分比计算的行上
number| 移动到本行的第 n 列
H 移动到屏幕顶端
M 移动到屏幕中间
L 移动到屏幕底端
numberH 移动到屏幕顶端往下的第 n 行
numberL 移动到屏幕底端往上的第 n 行
w 向后移动一个单词或符号
W 向后移动一个单词
b 向前移动一个单词或符号
B 向前移动一个单词
e 移动到单词末尾
E 移动到单词末尾(忽略标点符号)
G 移动到文件末尾
gg 移动到文件开头
Ctrl+End 移动到文件末尾
Ctrl+Home 移动到文件开头
[Enter] 移动到下一行的第一个字符
+ 下一行的第一个字符
- 上一行的第一个字符
numberG 移动到指定的行
numbergo 移到指定的字节
`` 回到执行 G 命令或搜索命令之前的位置
'' 回到执行 G 命令或搜索命令之前行的行首
numberh/j/k/l/w/W/b/B 按指定的次数重复移动光标
( 移动到本句(以句号 ., ?, ! 标识)的开头
) 移动到下一句的开头
{ 移动到本段的开头(用空行区分, 或是 troff 的段落宏)
} 移动到下一段的开头
[[ 移动到本节的开头(troff 的节宏)
]] 移动到下一节的开头
Ctrl+] 跳转到光标所在标识符的定义上, 等价于 :tag tagname 命令
Ctrl+T 回到标签跳转之前的位置上, 等价于 :pop 命令
Ctrl+F 向前滚动一屏
Ctrl+B 向后滚动一屏
Ctrl+D 向前滚动半屏
Ctrl+U 向后滚动半屏
Ctrl+E 向前滚动一行
Ctrl+Y 向后滚动一行
Ctrl+O 回到上一次的位置
Ctrl+I 回到较新的位置
z [Enter] 滚动屏幕让光标行在屏幕顶端
z. 滚动屏幕让光标行在屏幕中间
z- 滚动屏幕让光标行在屏幕底端
numberz[Enter]/z./z- 光标移动到指定的行, 并将该行滚动到特定位置
Ctrl+L 重绘屏幕
Ctrl+G 在屏幕底端显示当前位置等信息
Ctrl+D 显示自动补全列表, 按 TAB 切换
编辑
i 插入, 在光标位置插入文本
a 添加, 在光标后面插入文本
I 在一行的开始插入文本
A 在一行的末尾插入文本
numberi/a/I/Atext [ESC] 将插入的文本重复指定的次数
o 在光标位置的下一行插入新行
O 在光标位置的上一行插入新行
s 删除光标位置字符后再插入文本
numbers 删除 n 个字符后进入插入模式
S 删除整行后进入插入模式
numberS 删除多行后进入插入模式
c光标命令 删除从当前光标位置到光标移动命令后光标位置之间的文本后进入插入模式
cw 删除从光标到单词结尾后进入插入模式
cc 删除整行后进入插入模式
C 等价于 c$, 删除光标到行尾的文本后进入插入模式
d光标命令 剪切文本
dw 剪切到单词末尾, 包含空格
de 剪切到单词末尾, 不包括空格
dl 剪切一个字符
dd 剪切整行
D 等价于 d$, 剪切到行尾
x 剪切光标后的一个字符
X 剪切光标前的一个字符
y光标命令 拷贝文本
yy 拷贝整行
Y 拷贝整行
v 进入可视模式, 移动光标可以高亮选择, 完成选择后可执行 y, d 等操作命令, 也可以执行 ex 命令. 任何需要范围的命令都可以通过可视模式指定的范围来工作. 可视模式下可以使用一些额外的命令:
numberaw/aW 选择指定的单词数量. w 将标点符号当做单词分割, W 只将空格当做单词分割.
numberiw/iW 同上, 但是将标点符号或空格也视为一个单词.
as, is 增加一个句子, is 不包含空格
ap, ip 增加一个段落, is 不包含空行
Ctrl+v 进入块可视模式(矩形选择)
p 粘贴
P 将内容粘贴到光标前
r 替换一个字符, 完成后返回命令模式
R 进入覆盖模式
~ 更改光标位置字符的大小写
J 将两行文本合并到一行
u 撤销上一个命令
U 恢复整行到最开始的样子
Ctrl+R 恢复一个被撤销的命令
. 重复执行上一次的命令
ZZ 保存结果并退出
"1~9p 粘贴最近第 n 次剪切的内容
"1pu.u.u.u ... 依次粘贴缓冲区的内容并删除
"a-zy/d光标命令 将复制/剪切的内容放到命名缓冲区中, 缓冲区的名字只能是 a 到 z 的一个字符
"A-Zy/d光标命令 将复制/剪切的内容追加到命名缓冲区中
"a-zp 粘贴命名缓冲区的内容
:n1,n2ya a-z 复制 n1 到 n2 的行到命名缓冲中
:pu a-z 将命名缓冲的内容放置到当前行的下一行
"1~9, "a-z, "+, "* 代表了 vim 中的寄存器, 其中 "+ 表示系统的剪切板, "* 表示系统的当前选择区(Win下和+相同)
"+y 复制到系统剪切板
"+p 从系统剪切板中粘贴
:reg 查看所有寄存器的内容
xp 交换两个字符
mchar 在当前位置添加标记
'char 移到标记行的第一个字符
`char 移到标记字符
:mark char 同 m
:marks 列出所有的标记
@a-z 将命名缓冲区的内容作为命令序列来解释
:@a-z 同上
fchar 在本行中搜索字符, 将光标移到下一个出现该字符的地方
Fchar 行内搜索, 将光标移到上一个出现该字符的地方
tchar 行内搜索, 将光标移到下一个出现该字符的前一个字符的地方
tchar 行内搜索, 将光标移到上一个出现该字符的前一个字符的地方
; 重复上一个行内搜索,方向相同
, 重复上一个行内搜索,方向相反
设置
:set all 显示所有设置选项的值
:set option? 显示设置选项当前的值
:set ic/noic 搜索是忽略/不忽略大小写
:set nu/nonu 显示/隐藏行编号, nu=number
:set autoindent 自动缩进, 设置后, 在插入模式下可以在一行的开头使用:
Ctrl+T 增加一层缩进
Ctrl+D 减少一层缩进
^ Ctrl+D 当前行缩进为 0
0 Ctrl+D 当前行和之后的行缩进都改为 0
:set smartindent 比 autoindent 更为智能的自动缩进
:set cindent 能理解 C 语言语法的自动缩进
:set cinkeys=keys 定义减少一层缩进的关键字
:set cinoptions=style 定义自动缩进的样式
:set cinwords=words 定义在下一行增加一层缩进的关键字
:set indentexpr=expr 自定义表达式的自动缩进
:set paste 关闭所有的自动功能, 比如粘贴文本前取消自动缩进等
:set nopaste 恢复 paste 关闭的功能
>> 将当前行往右移动一个缩进
<< 将当前行往左移动一个缩进
number>> 将 number 行一起往右移动一个缩进
number<< 将 number 行一起往左移动一个缩进
:set shiftwidth=4 设置缩进的宽度(>>, << 命令移动的字符个数)
:set ts=4 设置 tab 在屏幕上的宽度为 4, ts=tabstop
:set softtabstop=4 编辑模式按退格键退回缩进的长度
:set expandtab 用空格来替换 tab
:set list 在屏幕上标记出 tab 和换行字符
:set showmatch 开启后, 输入闭括号是会自动指示对应的开括号, 不匹配则报警
:set nowrapscan 搜索的时候不回绕
:set wm=number 设置右边界, wm = wrapmargin
:set incsearch 开启增量搜索
:set showmode 显示当前的模式
:set laststatus=0/1/2 状态栏显示, 设置为 2 则多窗口是为每个窗口显示状态栏
:set equalalways 平均的分割窗口
:set eadirection=hor/ver/both 平均分割窗口的方向
:set winheight/winwidth=number 活动窗口的最小高度和宽度
:set winminheight/winminwidth=number 窗口的最小高度和宽度
:set cmdheight=number 命令行的高度
:set mouse=a 在所有模式下启用鼠标功能, 其他选项包括:
n 命令模式
v 可视模式
i 插入模式
c 命令行模式
h 编辑帮助文件的所有模式
r 双击链接跳转
:set statusline=fmtstr 设置状态栏显示的内容, 可使用 %{Fun()} 来调用自定义函数. 其余格式参考 :help statusline
:set filetype=type 设置文件的类型
:filetype detect 自动检测文件的类型
:filetype indent off 关闭文件的自动缩进功能
:set backup 创建备份文件, 并删除之前的备份
:set writebackup 只创建备份, 不删除之前的备份
:set backupdir 创建备份文件的目录
:set backupext 创建的备份文件扩展名
:set backupskip 匹配模式的文件不创建备份
:set backupcopy 创建备份文件的方式
:set viminfo vim 保存会话的限度
:set nowrap 当行过长后不进行绕排
ex命令
:version 显示 vi 的版本号
:help 显示帮助画面
:number 跳到指定的行
:go number 调到指定的字节
:number1,number2d/delete 删除第 number1 到 number2 行
:n1,n2m/move/co/copy/tn3 移动/拷贝 n1 至 n2 的行到 n3 行之后
:n1,n2# 临时显示 n1 到 n2 行的内容, 行号除了可以使用数字还可以使用:
. 当前行
$ 最后一行
% 文件中的每一行
+n 当前行往后第 n 行
-n 当前行往前第 n 行
+ 等价于 +1
- 等价于 -1
0 文件的开头, 第一行之前
/pattern/ 下一个包含 pattern 的行
:n1;+/-number# 用分号代替逗号可以让 +/- 的当前行指定为 n1, 而不是光标所在行
:= 显示文件总行数
:.= 显示当前所在行的行号
:l 显示指定行中的 tab 和换行符
:/pattern/= 列出 pattern 第一次出现的行号
:w 保存文件
:q 退出
:qa 打开了多个窗口时退出所有窗口
:wq 保存并退出(和 ZZ 相同)
:w! 强制保存,即使文件是以只读方式打开的
:q! 强制退出,即使有修改没保存也丢弃修改退出
:w filepath 保存为指定的文件
:n1,n2w filepath 将指定的行保存到文件中
:n1,n2w >> filepath 将指定的行追加到文件中
:w %.bak 保存为当前文件名加上 .bak 后缀
:r filepath 将文件内容插入到光标所在位置
:numberr filepath 将文件内容插入到指定的行
:x 保存并退出(只有文件有修改才会写入)
:so filepath 读入 vi 脚本并执行
/pattern 往下搜索
?pattern 往回搜索
/[Enter] 往下重复搜索
?[Enter] 往回重复搜索
n 在上一次搜索方向继续搜索
N 与上一次搜索方向相反的方向继续搜索
:s/pattern/repstr 将当前行中第一个出现的 pattern 替换为 repstr, 如果 pattern 中包含 /, 可用其他字母, 数字, \, ", |, 空格以外的任何字符代替 / 作为分隔符.
:s/pattern/repstr/g 将当前行中的每一个 pattern 都替换为 repstr
:n1,n2s/pattern/repstr/g 在指定的行中进行替换
:%s/pattern/repstr/g 在文件中的每一行进行替换
:%s/pattern/repstr/gc 在每次替换前进行确认
:s 等价于 :s//~/, 重复上一次替换
:& 重复上一次替换
& 等价于 :&, 重复上一次替换
:%&g 在所有地方重复上一次替换
:~ 重复上一次替换, 如果上次替换后有搜索命令, 则替换的搜索表达式为上一次搜索命令的表达式
:g/pattern1/s/pattern2/repstr/g 将满足 pattern1 的行中的 pattern2 替换成 repstr
:g/pattern 显示所有包含 pattern 的行
:g/pattern/nu 显示所有包含 pattern 的行, 并且显示行号
:n1,n2g/pattern/p 在 n1 到 n2 之间搜索 pattern, 并显示包含的行
:g!/pattern 显示不包含 pattern 的行
:noh 取消上次搜索字符的高亮显示
:cmd1 | cmd2 ... 合并执行多个 ex 命令
:!cmd 执行 Shell 命令
:r !cmd 将 Shell 命令的结果插入当前位置
:n1,n2!cmd 将指定的行传入 shell 命令作为输入, 并用输出替换文本
!光标移动命令cmd 将光标移动范围内的文本传入 shell 作为输入, 并用输出替换文本
!!cmd 对当前行进行上面的操作
:!ctags *.c 调用 ctags 程序生成包含文件中函数信息的 tags 文件
:tag name 利用 tags 文件查找 name 函数所在文件, 并自动打开, 跳转到函数上.
:stag name 用分割窗口来打开文件
:pop 回到标签跳转之前的位置
:tags 显示标签跳转栈的内容
:ts 列出匹配的标签, 等价于 tselect
:sts 在分割窗口中列出匹配的标签, 等价于 stselect
:tn 跳到下一个匹配的标签, tnext
:0tn 可以显示上次的跳转情况, 不进行新的跳转
:tp 跳到上一个匹配的标签, tprevious
:tl 跳到上一个匹配的标签, tlast
:tr 跳到第一个匹配的标签, trewind
:set tl=n 设置标签中有效字符数量, 默认为 0 表示不限制, taglength
:set tags=pathlist 设置搜索 tag 文件的路径
:set tagrelative tag 文件中的路径为相对于 tag 文件自己的相对路径
:n 打开多个文件时用于切换到下一个文件, n = next
:prev 切换到上一个文件
:last 切换到最后一个文件
:rew 切换到第一个文件 rew = rewind
:ar 显示命令行上列出的文件列表, 当前编辑的用 [] 括起, ar = args
:e filepath 切换到另一个文件进行编辑
:e# 切换到候补文件进行编辑 (% 代表当前文件, # 代表候补文件)
Ctrl+^ 等价于 :e#
:e! 丢弃修改,恢复当前文件存储的内容
:colo/:colorscheme 显示当前的配色方案
:!ls $VIMRUNTIME/colors/ 显示可以使用的配色方案
:colo name 使用指定的配色方案
窗口
Ctrl+Ws 分割屏幕
Ctrl+Wv 垂直分割屏幕
:split filename 在分割窗口中打开文件, 省略文件名则打开当前缓冲区
:vsplit filename 在垂直分割的窗口中打开
:nsplit ++opt +cmd filename n 指定新窗口的行数, opt 为传给新窗口的选项 cmd 为在新窗口中执行的命令
:nnew ++opt +cmd filename 除了分割窗口, 还执行自动命令 WinLeave, WinEnter, BufLeave, BufEnter
:nvsplit/vnew ++opt +cmd filename
Ctrl+Wj 移动到下面一个窗口
Ctrl+Wk 移动到上面一个窗口
Ctrl+Wh 移动到左边一个窗口
Ctrl+Wl 移动到右边一个窗口
Ctrl+Ww 移动到下边或右边的一个窗口, 到达边界后会循环
Ctrl+Wt 移动到最左上角的窗口
Ctrl+Wb 移动到最右下角的窗口
Ctrl+Wp 移动到前一个窗口
Ctrl+Wr 向右或向下轮换一个窗口
Ctrl+WR 向左或向上轮换一个窗口
Ctrl+Wx 和附近的窗口交换位置
nCtrl+Wx 和第 n 个窗口交换位置
Ctrl+WK 将当前窗口移动到屏幕顶端, 并使用全部宽度
Ctrl+WJ 将当前窗口移动到屏幕底端, 并使用全部宽度
Ctrl+WH 将当前窗口移动到屏幕左端, 并使用全部高度
Ctrl+WL 将当前窗口移动到屏幕右端, 并使用全部高度
Ctrl+WT 移动当前窗口至新的分页
Ctrl+W= 调整所有窗口大小使其尽量相等
Ctrl+W+ 当前窗口增加一行
Ctrl+W- 当前窗口减少一行
Ctrl+W> 当前窗口增加一列
Ctrl+W< 当前窗口减少一列
Ctrl+Wg] 分割窗口来执行 :tselect tag 命令, tag 为当前窗口光标位置的标签
Ctrl+Wg Ctrl+] 同上, 不过执行的是 :tjump 命令
Ctrl+Wf 分割窗口, 编辑光标位置的文件名
Ctrl+WF 分割窗口, 编辑光标位置的文件名, 并调到文件名后制定的行上
Ctrl+Wgf 在新的分页中打开光标位置的文件名, 文件不存在则不会创建新的分页
Ctrl+WgF 在新的分页中打开光标位置的文件名并调到后面制定的行上, 文件不存在则不创建分页
Ctrl+Wq 离开当前窗口
:quit 离开当前窗口
Ctrl+Wc 关闭当前窗口, 如果窗口是分页中最后一个窗口, 也会关闭分页
:close 和 Ctrl+Wc 相同. 加上 ! 可忽略修改强制关闭
Ctrl+Wo 关闭当前窗口以外的所有窗口
:only 关闭当前窗口外的所有窗口
:hide 关闭当前窗口, 隐藏缓冲区
:resize n 将当前窗口设置为 n 行
:resize +n 当前窗口增加 n 行
:resize -n 当前窗口减少 n 行
:vertical resize n 将当前窗口设置为 n 列
:vertical resize +/-n 当前窗口增加/减少 n 列
windo cmd 在每一个窗口中执行 cmd 命令
:tabnew filename 在新的分页中打开文件
:tabclose 关闭当前分页
:tabonly 关闭其他所有的分页
Ctrl+PageUp/Ctrl+PageDown 切换分页
:Ctrl+F 打开最近输入的命令窗口
缓冲区
:ls/:files/:buffers 列出缓冲区
:ls!/:files!/:buffers! 额外的缓冲区也一起列出, 其中数字编号后的状态吗含义如下:
u 隐藏缓冲区, 只有使用带 ! 的命令才会列出
% 当前窗口所使用的缓冲区
# 后备缓冲区, 使用 :edit # 后切换的缓冲区
a 活动缓冲区, 可以在窗口中查看的
h 不能在任何窗口中查看的缓冲区
- 关闭了 modifiable 选项的只读缓冲区
= 没有写权限的只读缓冲区
+ 可修改的缓冲区
x 该缓冲区具有读入错误
bufdo cmd 对每一个缓冲区执行 cmd 命令
:ball/:sball 编辑所有参数或缓冲区, 带 s 的命令会在新窗口中打开, 下同.
:unhide/:sunhide 编辑所有载入的缓冲区
:buffer n/:sbuffer n 打开第 n 个缓冲区
:bnext n/:sbnext n 打开往后的第 n 个缓冲区
:bNext n/:sbNext n 打开往后的第 n 个缓冲区, 到结尾后回绕到开头
:bprevious n/:sbprevious n 打开前面第 n 个缓冲区
:bfirst/sbfirst 打开第一个缓冲区
:blast/sblast 打开最后一个缓冲区
:bmod n/:sbmod n 打开第 n 个修改过的缓冲区
:badd filepath 把文件加入缓冲区列表
:bunload 从内存中卸载缓冲区, 加上 ! 可忽略修改
:bdelete 卸载缓冲区, 并从列表中删除, 加上 ! 可忽略修改
折叠 单行操作命令在折叠的行上执行时会对所有折叠内容生效
:mkview 保存当前的折叠信息
:loadview 加载保存的折叠信息
:set foldcolumn=n 设置左侧用于显示折叠信息的宽度, 最大为 12
:set foldenable 打开折叠功能, 手动折叠时可以不用设置
:set foldmethod=foldway 设置自动折叠的方式, 可以是以下值之一:
manual 手动折叠
indent 按缩进层次来折叠, 对应 shiftwidth 选项值
expr 用正则表达式来定义折叠
syntax 以文件所使用的语言语义进行折叠
diff 按文件差异进行折叠
marker 以文件中预定义的标记来折叠
:set foldlevel=n 控制折叠的可见层次
za 切换一个折叠(打开的关闭, 关闭的打开)
zA 递归切换折叠
zo 打开一个折叠
zO 递归打开一个折叠
zc 关闭一个折叠
zC 递归关闭一个折叠
zd 删除一个折叠
zD 递归删除一个折叠
zE 删除所有折叠
zj 移动到下一个折叠
zk 移动到上一个折叠
zm 递减 foldlevel 选项的值
zM 将 foldlevel 选项值减小到 0
zr 递增 foldlevel 选项的值
zR 将 foldlevel 选项值增加到最大
zn/zN 清除/设置 foldenable 选项
zi 切换 foldenable 选项
zf光标命令 创建折叠, 范围由光标命令指定
nzF 创建 n 行的折叠, 创建折叠时已经折叠的行只算一行
zf% 在括号的开始或结束创建括号范围的折叠
zfgg 创建光标位置到文件开始的折叠
补全
Ctrl+N 下一个自动补全的内容
Ctrl+P 上一个自动补全的内容
Ctrl+E 停止补全, 不替换任何文本
Ctrl+X Ctrl+L 整行补全, 回溯当前文件中的行, 用相似的行自动补全
Ctrl+X Ctrl+N 关键字补全, 在当前文件中搜索光标前方字符的关键字
Ctrl+X Ctrl+K 搜索 dictionary 选项定义的文件中的关键字来进行补全
Ctrl+X Ctrl+T 搜索 thesaurus 选项定义的文件中的关键字进行补全, 可提供同义词进行选择
Ctrl+X Ctrl+P 搜索当前文件中的关键字
Ctrl+X Ctrl+I 搜索当前文件以及其包含文件中的关键字
Ctrl+X Ctrl+J 搜索当前文件以及包含文件中匹配标签的关键字
Ctrl+X Ctrl+F 搜索文件名进行补全
Ctrl+X Ctrl+D 搜搜当前文件以及包含文件中的宏名称(#define)所定义的关键字进行补全
Ctrl+X Ctrl+V 按命令行进行补全
Ctrl+X Ctrl+U 按 completefunc 选项所指定的自定义函数进行补全
Ctrl+X Ctrl+O 根据文件类型的不同, 载入不同的自定义函数进行补全
Ctrl+X Ctrl+S 按拼写检查进行补全
Ctrl+N 按 complete 选项定义的来源进行搜索补全, complete 选项包含用 , 分割的下列值:
. 当前缓冲区
w 其他窗口中的缓冲区
b 缓冲区列表中已载入的缓冲区
u 缓冲区列表中未载入的缓冲区
U 不在缓冲区列表中的缓冲区
k dictionary 选项中的字典文件
kspell 拼写检查
s thesaurus 选项中定义的同义词文件
i 当前文件与包含文件
d 当前文件与包含文件中的宏
t 标签
] 标签
语法
:syntax enable 启用语法高亮, 保留当前的颜色配置
:syntax on 启用语法高亮, 覆盖当前的颜色配置
:set syntax=langtype 设置文件的语法类型, 类型名为 $VIMRUNTIME/syntax 目录下的文件名
:set background=dark/light 设置背景色为深色或浅色, 然后对字体颜色进行调整
:hi 查看当前对语法的颜色设置, hi 等价于 highlight
:hi syntax_group 查看指定语法组的颜色设置
:hi syntax_group target=font 设置字体, 其中语法组包括注释, 常量等等分类, target 包括:
term 普通终端
cterm 支持彩色的终端
gui 图像环境
字体可以设置为
bold 粗体
underline 下划线
underurl URL 格式
italic 斜体
reverse/inverse 反转
standout 正常
NONE 没有属性
:hi yntax_group targetfg=color 设置颜色, 颜色值可以是颜色名称或 #rrggbb 格式
编译集成
:set makeprg program 开发环境的编译器名称
:set errorformat ... 设置错误报告的格式
:copen 打开显示错误的 Quickfix List 窗口
:cclose 关闭错误显示窗口
:cn/cnext 光标移到下一个错误处
:cp/cprevious 光标移到前一个错误处
:colder 在 Quickfix List 中加载前面 10 个错误
:cnewer 在 Quickfix List 中加载后面 10 个错误
:vimgrep /pattern/file_pattern 在 Quickfix List 中显示匹配内容
键映射
:ab 列出当前定义的缩写
:ab name text 定义缩写
:unab name 删除缩写
:map 列出当前定义的按键映射
:map char cmds 将按键映射到命令序列, 输入特殊键作为命令序列是需要使用 Ctrl+V 在加上对应的键.
:unmap char 删除定义的键映射
:map! char cmds 定义在插入模式仍然有效的按键映射
:unmap! char 取消按键映射, 若按键被展开无法输入, 可在前面加 Ctrl+V
char 可以是 #1, #2... 来代表功能键 F1, F2 ...
Home, End ... 等特殊按键可以使用<> 来表示, <Home>: <End>...
映射的按键也可以是多个字符
:digraph 显示特殊字符表
Ctrl+K char mark 输入特殊字符
GVIM
:set guicursor=n-v-c:ver1 设置光标为竖线
:set guifont=fontname 设置字体

pattern (正则表达式)

. 匹配任意字符
* 前一个单一字符出现 0 或 多次
^ 出现在表达式开头时表示行首, 出现在其余位置时表示 ^ 字符本身
$ 出现在表达式结尾是表示行尾, 出现在其余位置时表示 $ 字符本身
\ 转义字符, 后面的字符只表示字符本身, 不代表特殊意义
[] 匹配里面的任意一个字符, 在 [] 里面, 只有三个字符需要转义: \, -, ] . 在 [] 中可以使用的特殊字符:
- 表示范围
^ 出现在第一个是表示取反, 匹配不在方括号中的字符. 其余位置表示字符本身
\( \) 将括号中的模式匹配的字符保存到缓冲区中, 在后面或替换字符串中可以使用 \number 来使用
\< 匹配单词开头
\> 匹配单词结尾
~ 上一次搜索使用的正则表达式, 只能用于搜索中, 不能用于替换
POSIX 扩展: 只能出现于 [] 中, 比如 [[:alpha:]123] 表示匹配字母或 123. 这组表达式可以表达本地化的非 ASCII 字符
[:alnum:] 字母和数字
[:alpha:] 字母
[:blank:] 空格和制表符
[:cntrl:] 控制字符
[:digit:] 数字
[:graph:] 可打印的可见字符, 不包含空格
[:lower:] 小写字符
[:print:] 可打印字符, 包含空格
[:punct:] 标点符号
[:space:] 空白字符
[:upper:] 大写字符
[:xdigit:] 十六进制数字字符
[.chars.] 校对字符
[=char=] 与 char 等价的字符
VIM 扩展:
\| 表示或
\+ 前面的表达式匹配 1 或 多次
\= 前面的表达式匹配 0 或 1 次
\{n, m} 前面的表达式匹配 n 到 m 次, 按贪多原则
\{n} 前面的表达式匹配 n 次
\{n,} 前面的表达式匹配 n 到 多次, 按贪多原则
\{,m} 前面的表达式匹配 0 到 m 次, 越多越好
\{} 前面的表达式匹配 0 或多次, 与 * 相同
\{-n,m} 前面的表达式匹配 n 到 m 次, 越少越好
\{-n}, \{-n,}, \{-,m} 和上面相同, 但是匹配越少越好
\i 匹配标识符字符, 标识符由 isident 选项定义
\I 不包括数字的标识符
\k 匹配关键字字符, 关键字由 iskeyword 选项定义
\K 不包括数字的关键字
\f 匹配文件名字符, 文件名有 isfname 选项定义
\F 不包括数字的文件名
\p 匹配可打印字符, 由 isprint 选项定义
\P 不包括数字的可打印字符
\s 匹配一个空格或Tab字符
\S 匹配不是空格和Tab的字符
\b backspace 键
\e escape 键
\r 回车键
\t Tab 键
\n 换行
~ 匹配前一个替换字符串
\number 匹配第 number 个 \(...\) 匹配的字符串

repstr

\number 匹配时用 \(\) 保存的第 n 个缓冲区, 0 表示整个匹配
\ 转义字符, 把后面的特殊字符当做字符本身.
& 搜索模式匹配出的完整文本
~ 上一次使用的替换字符串
\u 下一个字符变为大写
\l 下一个字符变为小写
\U 后面的所有字符串变为大写, 直到 \e 或 \E
\L 后面的所有字符串变为小写, 直到 \e 或 \E
\e, \E 结束改变大小写的状态

脚本

变量 :help variables 查看变量使用
作用域 变量使用名字前缀来表示作用域, 没有指定时函数内为局部变量, 函数外为全局变量, 前缀包括:
b: 缓冲区
w: 窗口
t: 分页
g: 全局
l: 函数内
s: 脚本文件
a: 函数参数
v: 内置变量
&option 获取设置选项的值
运算符
. 字符串连接
!~ 不等于
[val1, val2 ... ] 定义数组
varname[n] 取数组元素, 下标从 0 开始
语句
"text 单独的行或不把 " 当做命令一部分的行末尾加 " 表示后面的文本为注释
echo "message" 显示消息, 可能在状态栏或是弹出对话框
let var=value 变量赋值
execute expr 将表达式的结果作为 vim 的命令执行
if cond_expr
    statements
else if cond_expr
    statements
else
    statements
endif
条件语句
cond_expr ? expr1 : expr2 条件语句
function FuncName(arg1, arg2 ...)
    statements
endfunction
定义函数, 函数名的第一个字符必须大写
call FuncName() 调用函数
函数 :help functions 可查看全部的函数列表
exists("varname") 判断变量是否存在
strftime("fmt", timestamp) 格式化时间, 如果省略 timestamp 则使用当前时间
命令 在编辑中使用时前面需要加 : 号
au/autocmd event pattern command 发生指定的事件时, 如果文件名能匹配 pattern 则自动执行 command 指定的命令. 其中事件可以是用逗号分割的下面中的一个或多个:
BufNewFile 开始编辑新文件
BufReadPre 打开缓冲区
BufRead, BufReadPost 新文件读入完成后
FileType 设置文件类型后
VimResized 改变窗口尺寸后
WinEnter, WinLeave 进入, 离开窗口时
CursorMoved, CursorMovedI 光标在正常模式, 插入模式时移动
:help event 查看完整的事件列表
augroup groupname/augroup END 在这两个命令之间的 au/atuocmd 命令自动放入 groupname 组中
au! groupname 删除 groupname 组中的自动命令
au groupname 查看 groupname 组中的自动命令

命令组合

1. 手动替换
/pattern 搜索需要替换的内容
c... 修改
n 继续搜索
. 重复修改
2. 重建帮助标签
:helptags $VIMRUNTIME/doc 安装插件后生成插件文件的帮助标签

插件和辅助

1. 中文文档
下载 https://sourceforge.net/projects/vimcdoc
安装 UNIX: ./vimcdoc.sh -i Windows: 安装目录选 vim80 子目录
切换帮助语言 :set helplang=cn/en
2. ctags
下载 https://sourceforge.net/projects/ctags
安装 将 ctags.exe 拷贝到 vim80 目录
3. taglist
下载 http://www.vim.org/scripts/script.php?script_id=273
安装 解压到 vim80 目录
配置 let Tlist_Ctags_Cmd='ctags.exe'
let Tlist_Auto_Open=1
命令 :Tlist 打开或关闭标签窗口
4. winmanager
下载 http://www.vim.org/scripts/script.php?script_id=95
安装 解压到 vim80 目录
命令 :WMToggle 打开关闭 winmanager 的窗口
5. bufferexplorer 推荐用 minibufexp1 代替
下载 http://www.vim.org/scripts/script.php?script_id=42
安装 解压到 vim80 目录
命令 \be 在本窗口打开
\bs 水平分割窗口打开
q 关闭
6. minibufexpl
下载 http://www.vim.org/scripts/script.php?script_id=159
安装 拷贝到 plugin 目录
命令 :MiniBufExplorer 打开窗口
:CMiniBufExplorer 关闭窗口
7. Vundle
下载 git clone https://github.com/VundleVim/Vundle.vim.git %USERPROFILE%/vimfiles/bundle/Vundle.vim
安装 https://github.com/VundleVim/Vundle.vim/wiki/Vundle-for-Windows

▲评论

X 正在回复:
姓 名: 留下更多信息
性 别:
邮 件:
主 页:
Q Q:
来 自:
职 业:
评 论:
验 证:


Valid HTML 4.01 Strict Valid CSS!
Copyleft.A!die Software Studio.ADSS
Power by webmaster@adintr.com