###########################################################################33 模式 ########################################################################################3
###################################### 普通模式下 ################3##############################
########## 窗口 ################
zz 重新绘制屏幕,并把当前行显示在屏幕中央
########## 查看 ###########################
K 查看当前光标所在处的单词的手册页
########## 移动 ########
h
j
k
l
home 去到行首
end 去到行尾
$ 去到行尾
b 去到字符串词首
gg 去到文件开头
{number}G 直接跳转到某行
########## 删除 #####################
dd 删除当前光标所在行
x 删除当前光标所在的字符,并且光标向向前进一位
cw 删除从光标位置到单词结尾间的字符,并进入插入模式
dw 删除从光标位置到单词结尾间的字符,不进入插入模式
db 删除从光标起始位置到代词开头的内容,不进入输入模式
daw delete a word
dap 删除当前所在段落
c 删除指定文本并进入插入模式
########## 查找与替换 ##############################
R 进入替换模式
/ 正向查询字符串
? 逆向查询字符串
f{char} 查找下一出指定字符出现的位置并把光标移动到字符处
; 与f{char}配合使用,重复查找上次F命令所查找到的字符
, 与f{char}配合使用,反向查找上次F命令所查找到的字符
* 查找当前光标下的字符
n 跳转到下一个匹配项
N 反向跳转到上一个匹配项
########## 格式控制 #############################
>G
########## 插入 ##################################3
i
I
a
A
s
cw 删除从光标位置到单词结尾间的字符,并进入插入模式
o(字母) 在当前光标所在行的下面新建一个新行,切换到新行,进入输入模式
<ctrl+v><code> code为要插入字符的编码,
########## 撤销 #################################################
u
########## 复合字符串 ################################
s 先删除光标下的字符,然后进入插入模式
########## 数值运算 ####################################
number<ctrl+a> 加法
number<ctrl+x> 减法
<ctrl+r>=<expression><backspace> 计算表达式的值并插入光标所在位置
########## 复制与粘贴 ######################################################
yy 复制当前行 (使用寄存器)
p 粘贴
J 将当前行与下一行连接起来
########## 进制问题 ########################
0开头的数字为8进制
0x开头的数字为16进制
ga 显示字符编码格式
########## VIM操作符命令 ###########################################
额外规则:当一个操作符被连续调用两次的时候,他会作用于当前行
操作符+动作命令=操作
c 修改
d 删除
y 复制到寄存器
g/~/vU 反转大小写
gu 转换为小写
gU 转换为大写
> 增加缩进
< 减小缩进
= 自动缩进
! 使用外部程序过滤所跨越的行
########### VIM动作命令 ############################################################
aw
ap
it 文本对象
################### 插入模式 #####################################
###### 删除 ############################
ctrl+h 删除前一个字符,相当于<backspace>
ctrl+w 删除前一个单词
ctrl+u 删除至行首
####### 返回普通模式 ##############################################2
<ESC> 切换到普通模式
ctrl+[ 切换到普通模式
ctrl+o 切换到插入-普通模式
################# 可视模式 ########################
v 激活面向字符的可视化模式
V 激活面向行的可视化模式
<ctrl+v> 激活面向块的可视化模式
gv 重选上一次由可视化模式选择的文本范围
o 切换到高亮选区的活动端
b 选区向前选择一个单词
e 选区向后选择一个单词
U 可视模式下的U相当于普通模式下的gU
r<char> 用cahr代替选区中的所有内容
c 删除选区内容,并进入插入模式,并且在退出后会将修改的文本添加到每一行
I 可视模式下的插入(光标前)
A 可视模式下的插入(光标后)
: 在可视模式下进入命令行会将表示范围的'<,'>预先填充到命令行上
################## 命令行模式 #####################################
: 切换到命令行模式
<ESC> 切换回普通模式
:noh 取消搜索之后的一直高亮模式
:edit 读写文件
:write 读写文件
:tabnew 创建标签页
:split 分割窗口
:prev 操作参数列表
:printf :p 显示指定范围的文字
:delete :d 删除指定行的文字
:next 操作参数列表
:bprev 操作缓冲区列表
:bnext 操作缓冲区列表
:[range]delete [x] 删除指定范围内的行【到寄存器X中】
:[range]yank [x] 复制指定范围的行【到寄存器中】
:[range]put [x] 在指定行后粘贴寄存器X中的内容
:[range]copy {address} :co :t 把指定范围内的行拷贝到{address}指定的行之下 (不使用寄存器)
:[range]move {address} 把指定范围内的行移动到{address}指定的行之下
:[range]join 连接指定范围内的行
:[range]normal {command} 对指定范围内的每一行执行普通模式命令{command}
:[range]substitude/{pattern}/{string}/[flags] 在指定范围内出现{pattern}的地方替换为{string}
:[range]global/{pattern}/[cmd] 对指定范围内匹配{pattern}的所有行执行Ex命令{cmd}
:@: 重复执行上次的Ex命令
:@@ 重复执行上一条命令
:u 撤销上一条命令行命令的影响
:<up> or <down> 类似bash,回溯历史命令
<ctrl+d> 命令补全 还可进行选项补全
<tab> 依次显示可以执行的命令 还可进行文件路补全
<s+tab> 反向遍历所有的可执行命令
<ctrl+r><ctrl+w> 复制光标下的单词并把他插入到命令行中
q: 进入命令行窗口模式
<ctrl+f> 把当前命令行命令映射到命令行窗口
########################## 运行shell命令 ########################
:!{cmd} 执行shell中的命令
当给此命令指定范围时,会将『range』指定行会传给{cmd}作为标准输入,然后会将{cmd}的输出覆盖『range』内原本的内容
:shell 启动一个交互的shell会话
:exit 退出此shell并返回vim
:read !{cmd} 把命令的标准输出重定向到缓冲器
:[range]write !{cmd} 把缓冲区的内容作为指定{cmg}的标准输入
区别于 :write! {cmd} 把缓冲区的内容写到一个名为{cmd}的文件,这里的!表示会覆盖原文件的内容
:[range]!filter 使用外部程序{dilter]过滤指定的『range』
#####################3#3##### 批量执行Ex命令 ##############################3##
:source {file} 执行vim脚本
:argdo source {file} 对参数列表里的每个文件执行{file}里面的Ex命令
##########################33# 自动补全EX命令 #################################
:set wildmode=... 设置自动补全的环境变量
############################ 地址的表达 ################################################
{start},{end} start行至end行
0 虚拟行,位于文件的第一行上面
1 文件的第一行
. 表示当前行
$ 表示文件最后一行
% 整个文件(:1,$的简写形式)
m 包含位置标记m的行
< 高亮选区的起始行
> 高亮选区的终止行
/{string}/./{string}/ 起始字符到终止字符
{address}+n 对地址进行便偏移
可视模式的选区
#####################################################################################3 文件 ##################################################################################
############################# 管理多个文件 #########################################
:ls 列出所有被载入内存中的缓冲区列表
% 指明那个缓冲区在当前窗口可见
# 代表轮换文件
<ctrl+r> 在当前文件与轮换文件间快速切换
:bnext 切换到列表中的下一个缓冲区
:bprev 切换到列表中的上一个缓冲区
:bfirst 跳到缓冲区列表的开头
:blast 跳到缓冲去列表的结尾
:buffer N :h N 直接按照编号跳转到相应的缓冲区
:bdelete N1 N2... 删除编号为N1,N2...的缓冲区
:M,N bdelete 删除编号从M到N的缓冲区列表
:args 显示参数列表(参数列表记录了在启动时作为参数传递给VIM的文件列表)(可以在任意时刻修改参数列表的值)
:args file 在参数列表中加入参数
* 匹配0个或多个字符(范围局限于指定的目录,不会递归子目录)
** 匹配0个或多个字符(可以递归进入指定目录的子目录)
:args '{command}' 把``内的命令的输出作为args的参数执行
:w[rite] 将缓冲区内容写入磁盘
:e[dit] 把磁盘文件内容写入缓冲区(即回滚所做修改)
:qa[ll] 关闭所有窗口,摈弃修改而无需警告
:wa[ll] 把所有改变的缓冲区写入磁盘:
:sp[lit] {file} <ctrl+w>s 水平切分当前窗口,并在新窗口中载入{file}
:vsp[lit] {file} <ctrl+w>v 垂直切分当前窗口,并在新窗口中载入{file}
<ctrl+w>w 在窗口间循环切换
<ctrl+w>h 切换到左边的窗口
<ctrl+w>j 切换到下面的窗口
<ctrl+w>k 切换到上面的窗口
<ctrl+w>l 切换到右面的窗口
:clo[se] 关闭活动窗口以及包含此窗口的标签页
:on[ly] 只保留活动窗口,关闭其他活动窗口
<ctrl+w>= 使所有窗口等宽等高
<ctrl+w>_ 最大化活动窗口的高度
<ctrl+w>| 最大化活动窗口的宽度
[N]<ctrl+w> 把活动窗口的高度设置为[N]行
[N]<ctrl+w> 把活动窗口的宽度设置为[N]列
:lcd {path} 设置当前窗口的本地工作目录 如果创建了一个新的标签页,并用:lcd命令切换到另一个目录,就可以将每个标签页限制在当前的工作目录(:lcd只影响当前窗口,而非当前标签页)
:windo lcd {path} 为所有这些窗口设置本地工作目录
:tabe[dit] {filename} 打开一个新的标签页
<ctrl+w>T 把当前窗口移动到一个新的标签页中
:tabc[lose] 关闭当前标签页
:tabo[nly] 只保留活动标签页关闭其他所有标签页
EX命令 普通命令
:tabn[ext] {N} {N}gt 切换到编号为N{的}标签页
:tabn[ext] gt 切换到下一个标签页
:tabp[revious] gT 切换到上一个标签页
:tabmove [N] 重新排列标签页,如果没有N,当前标签会被移动到结尾
############### 打开以及保存文件 #############################################
:edit {file} 通过文件的绝对路径与相对路径来打开文件
:edit % 这里的%表示活动缓冲区的完整文件目录
:edit %:h 这里的:h修饰符回去除文件名,但保留路径中的其他部分
:write 把缓冲区的内容写入磁盘
:pwd 打印工作目录
:find 允许通过文件名来打开一个文件,但无需输入该文件的完整路径,要想利用此功能,首先要配置‘path’选项
:set path+=/dir/** 把/dir/目录下面的所有文件添加到path里面,以','作为分割符
###################### 使用netrw(插件)管理文件系统 #####################
$ vim /dir/ 通过vim打开一个文件管理器窗口{h,j,k,l,/}
:edit /dir/ 在vim内部打开文件管理器窗口
:explore 打开文件管理器,并显示活动缓冲区所在目录
:Sexplore 水平切分窗口打开文件管理器
:Vexplore 垂直切分窗口打开文件管理器
<ctrl+^> 切换刚才正在编辑的文件
######################## 保存文件 ###########################
<ctrl+g> 显示当前文件的文件名与状态
###############################################################3####### 更快的移动及跳转 ############################################################################33
######################### 用命令动作在文档中移动 ########
:h motion.txt 列出动作命令的帮助文档
h
j
k
l
:gj :gk 按照屏幕行进行上下移动
0 移动到实际行的行首
:g0 移动到屏幕行的行首
^ 移动到实际行的第一个非空白字符
g^ 移动到屏幕行的第一个非空白字符
$ 移动到实际行的行尾
g$ 移动到屏幕行的行尾
w 正向移动到下一个单词的开头
W 以字串为单位操作
b 反向移动到当前单词/上一个单词的开头
B 以字串为单位操作
e 正向移动到当前单词/上一个单词的开头
E 以字串为单位操作
ge 反向移动到上一单词的结尾
gE 以字串为单位操作
f{char} 在光标位置与当前行的行尾查找字符串,如果找到就将光标移动到此字符上
F{char} 反向移动到上一个{char}所在之处
t{char} 正向移动到下一个{char}所在之处的前一个字符上
T{char} 反向移动到上一个{char}所在之处的后一个字符上
; 重复上次的字符查找命令
' 反向查找上次的字符查找命令
/{str}<cr> 通过查找命令快速跳转
############### 分割符文本对象 ####################33
文本对象 选择区域
a) ab 包含符号本身
a} aB 包含符号本身
a] 包含符号本身
a> 包含符号本身
a' 包含符号本身
a" 包含符号本身
a` 包含符号本身
at 包含符号本身
i) ib 不包含符号本身
i} iB 不包含符号本身
i] 不包含符号本身
i> 不包含符号本身
i' 不包含符号本身
i" 不包含符号本身
i` 不包含符号本身
it 不包含符号本身
iw 当前单词
aw 当前单词及一个空格
iW 当前字串
aW 当前字串及一个空格
is 当前句子
as 当前句子以及一个空格
ip 当前段落
ap 当前段落以及一个空行
:m{a~zA~Z} 用选定的字母标记当前光标所在位置
:‘{mark} 跳到光标所在的行并且把光标置在第一个非空白字符上
:`{mark} 跳到光标所在的行列
`` 当前文件中上次跳转动作之前的位置
`. 上次修改的位置
`^ 上次插入的位置
`[ 上次修改或复制的起始位置
`] 上次修改或复制的结束位置
`< 上次高亮选区的起始位置
`> 上次高亮选区的结束位置
% 在一组开闭括号间跳转
S{' " } ] } 把选中的文本用符号括起来
########################################################## 在文件间跳转 ######################################################3
:jumps 查看跳转列表的内容
[N]G 跳转到指定的行号
/pattern<CR>/?pattern<CR>/n/N 跳转到下一个/上一个模式出现之处
% 跳转到匹配的括号之处
(/) 跳转到上一句/下一句的开头
{/} 跳转到上一段/下一段的开头
H/M/L 跳转到屏幕上方/正中间/最下方
gf 跳转到光标的文件名下
gi 返回上次修改的地方继续编辑
<C-]> 跳转到光标下关键字的定义之处
‘{mark}/`{mark} 跳转到一个位置标记处,小写字母会创建局部于缓冲区的标记,大写字母则创建全局变量
<ctrl+i>
<ctrl+o>
:changes 查看改变列表
:g;/:g, 反向或正向遍历改变列表
set suffixesadd+=.c 为文件添加扩展名
E
suffixesadd path选项可以针对每一个缓冲区进行设置,因此可以对不同的文件类型来设置不同的值
:vimgrep /"string"/ path 在路径中查找string字符串
:grep
:make
###################################################################333 寄存器 ###############################################################################3
x x命令用于把光标下的字符剪切下来,把他放在无名寄存器中
dd 剪切当行文本并把他放到无名寄存器中
yy 复制当前行文本到无名寄存器中
p p命令把无名寄存器中的内容粘贴到光标后面,也可以在可视模式下替换高亮选区内容
P 将文本插入到光标的前面
gp 将文本插入到光标的后面
gP 将文本插入到光标的前面
"" 无名寄存器的表示
"a-"z/"A-"Z 有名寄存器,用小写字母引用有名寄存器回覆盖该寄存器的内容,用大写字母引用寄存器会将新内容添加到该寄存器的原有内容之后
"_ 黑洞寄存器
"0 复制专用寄存器
:reg {regester} 显示寄存器内的信息
#### 复制文本到外部区域
"+ 系统剪切版,可用剪切,复制粘贴命令操作
"* 主剪切板,保留上次被高亮选中的文本,可用鼠标中键粘贴出来
"= 表达式寄存器,当从此寄存器中读取内容时,VIM进入命令行模式,可以输入一段VIM脚本表达式并执行
#########隐式赋值寄存器(只读寄存器)#3
"% 当前文件名
"# 轮换文件名
". 上次插入的文本
": 上次执行的EX命令
"/ 上次查找的模式
######################### 宏 ##############3############
可以串行或者并行的方式执行宏
q{reg} 录制宏在指定寄存器中 再次按下q录制结束
q{REG} 添加宏在指定寄存器中
@{reg} 用来执行指定寄存器中的宏
@@ 重复最近调用的宏
[N]@{reg} 重复N次寄存器中的宏
:wall 保存缓冲列表中的所有文件
:wnext 相当于 :w+:next
:put {reg} 把寄存器中的内容粘贴到新的一行(当前行的光标之后)
###################################################################### 模式 ############################################################333333########################
############### 匹配 #################
ignorecse 是否忽略大小写的变量
/c 覆盖ignorecase,忽略大小写
/C 覆盖ignorecase,强制大小写检查
smartcase 智能的大小写敏感性检查,如果全部为小写,则忽略大小写,否则不忽略大小写
\v 该元字符会激活very magic搜索模式,即假定除_ 大小写字母以及数字之外的所有字符均具有特殊含义
\V 该元字符会激活very noagic搜索模式
\x 该字符类可以代替完整的字符集[0-9a-fA-F]
. 在VIM中匹配任意字符
() \1 任何()内部的匹配文本都会被自动保存到一个临时仓库中。可以用\1来引用这段被捕获的文本,\2 \3...则被用来对每个()捕获的子匹配
\_s 匹配空白符或换行符
< > 在very magic模式下,用<和>表示单词界定符
\w 匹配单词类字符,包括字母,数字,以及符号_
\W 用来匹配除单词类字符以外的其他字符串
* 正向查找光标下的单词
# 反向查找光标下的单词
g* 正向查找光标下的单词(不使用单词界定符)
g# 反向查找光标下的单词(不使用单词界定符)
查找与匹配的区别
\zs 标志着一个匹配的起始(零宽度)
\ze 标志着一个匹配的结束(零宽度)
/ (正向查找)查找结束符
? (反向查找)查找结束符
\ 在查找域中,一个\的出现预示着紧挨着他的后面的字符将会被特殊对待,如果将其加倍变成\\之后,前者会消除后者的特殊含义
################# 查找 #############33
warpscan 当检查到文件结尾时是否返回文本开头进行检查
/ 正向查找
? 反向查找
gn 进入面向字符的可视化模式,并选中下一次匹配并进行操作
gN 进入面向字符的可是花模式,并选中上一次匹配并进行操作
hlsearch 是否进行高亮匹配
:nohlsearch 暂时关闭查找高亮
incsearch 可以预览第一处匹配
<ctrl+r><ctrl+w> 用当前预览的匹配结果对查找域进行自动补全
/{string}/e /e表示用来结束匹配,并将光标放在string之后
/<UP> 显示上一次的查找历史
q/ 调出命令行窗口(查找历史)
:substitude 能够显示匹配的数量
:vimgrep 显示匹配的数量
/v^([^,]*),([^,]*),([^,]*) 子匹配
############### 替换 ##################
:[range]s[ubtitute]/{pattern}/{string}/[flags] 一条完整的substitute命令 [range]对于每一条EX命令均适用
[flags] effect
g 使substitute命令可以在全局范围内执行,实际上仅作用于当前行
c 有机会确认或者拒绝每一处修改(在每次修改前进行询问)
y 替换此处匹配
n 忽略此处匹配
q 退出替换过程
l 替换此处匹配后退出
a 替换此处与之后所有匹配
<ctrl-e> 向上滚动屏幕
<ctrl-y> 向下滚动屏幕
n 抑制正常的替换行为,即让vim不执行替换操作,只报告此次substitute命令匹配的个数
& 仅仅用来指示vim重用上一次substitute命令所使用的标志位
e 专门用来屏蔽错误提示
替换域中的特殊字符 描述
\r 插入一个换行符
\t 插入一个制表符
\\ 插入一个反斜杠
\1 插入第一个子匹配
\2 插入第二个子匹配(以此类推)
\0 插入匹配模式的所有内容
& 插入匹配模式的所有内容
- 使用上一次调用:substitute的[string]
\={VIM scripts} 执行vim的脚本表达式,并将结果替换为{string}
缺省情况下,substitute命令仅作用于当前行的第一个匹配处
g 标志位,貌似表示全文,实则只表示当前行
% 代表全文范围
c 标志位,控制是否继续实现相同的修改
y 替换此处匹配
n 忽略此处匹配
q 退出替换过程
l 替换此处匹配后退出
a 替换此处与之后的所有匹配
<ctrl+e> 向上滚动屏幕
<ctrl+y> 向下滚动屏幕
#当把查找域留空时,默认使用上一次的查找 这样使得我们可以先设置查找域在进行替换
<ctrl+r>{reg} 把寄存器的值插入到命令行
/= 只是VIM执行一段表达式文本
g& 在整个文件的范围重复上一次substitute命令
& 重复上一次sub命令(忽略上一次的标志位)
vimgrep 在工程范围内查找,并将返回的结果记录在quickfix列表中
:copen 打开quickfix列表浏览匹配结果
:set hidden 该设置项可以无需存盘就可以从某个被修改的文件中切换出去
:cfdo 在整个工程的范围内执行sub命令
:update 用于保存有过更改的文件
########################3### global命令 #############################3
:[range] global[!] /{partern}/ [range2]{cmd} :global命令的形式
默认情况下作用范围是整个文件
{pattern}如果留空的话会自动使用当前的查找模式
{cmd}如果不指定会默认使用:print
global[!]表示反向匹配
range2默认没有,使用前面的range,不过也可以单独设置
############################## ctags ##############################33
<ctrl+]> 光标会从当前所在的关键字跳转到它的定义处
<ctrl+t> 充当后退按钮
g<ctrl+]> 多次匹配的时候会从标签匹配列表挑出可选项供我们选择
:tselect 提示用户从标签匹配列表中选择一项进行跳转
:tprev 跳转到上一处匹配的标签
:tnext 跳转到下一处匹配的标签
:tfirst 跳转到第一处匹配的标签
:tlast 跳转到最后一处匹配的标签
:tag(keyword) 跳转到匹配关键字的第一处标签
:tjumo(keyword) 提示用户从匹配关键字的多次标签中指定一处进行跳转
:tag 正向遍历标签历史
:pop|<ctrl+t> 反向遍历标签历史
################################# quickfix ##########################
:cnext 跳转到下一项
:cprev 跳转到上一项
:cfirst 跳转到第一项
:clast 跳转到最后一项
:cnfile 跳转到下一个文件第一项
:cpfile 跳转到上一个文件的最后一项
:cc N 挑战到第N项
:copen 打开quickfix窗口
:cclose 关闭quickfix窗口
:cdo {cmd} 在quickfix列表中的每一行上执行{cmd}
:cfdo {cmd} 在quickfix列表中的每一个文件上执行一次{cmd}
:colder 回溯quickfix列表之前的某个版本 支持次数
:cnewer 从旧的的quickfix列表回到比较新的列表 支持次数
makeprg 改选项允许指定运行:make时调用的程序
errorformat 改选项控制错误信息显示格式
:compiler 激活一个编译器插件,它回设置‘makeprg’ ‘errorformat’选项
######################## grep vimgrep ####################
:grep 在vim内部调用grep并生成quickfix列表进行查询
grepprg 负责指定调用的shell程序
grepformat 指定VIM如何解析来自:grep命令的输出结果
###########################3 自动补全 ###########################3‘
<ctrl+n> 普通关键字
<ctrl+x><ctrl+i> 当前缓冲区关键字
<ctrl+x><ctrl+n> 包含文件关键字
<ctrl+x><ctrl+]> 标签文件关键字
<ctrl+x><ctrl+k> 字典查找
<ctrl+x><ctrl+l> 整行补全
<ctrl+x><ctrl+f> 文件名补全
<ctrl+x><ctrl+o> 全能(omni)补全
<ctrl+n> 使用来自补全列表的下一个匹配项
<ctrl+p> 使用来自补全列表的上一个匹配项
<Down> 使用来自补全列表的下一个匹配项
<Up> 使用来自补全列表的上一个匹配项
<ctrl+y> 确认使用当前选中的匹配项
<ctrl+e> 还原早先输入的文本(从自动补全中exit)
<ctrl+h> 从当前匹配中删除一个字符
<ctrl+l> 从当前匹配中增加一个字符
{char} 终止自动补全并插入字符串
cd - 切换到之前的工作目录
[s 在拼写错误间进行反向跳转
]s 在拼写错误间正向跳转
z= 获取VIM提供的更正建议列表
zg 把当前单词添加到拼写文件中
zw 把当前单词从拼写文件中删除
zug 撤销针对当前单词的zg和zw命令
<ctrl+x>s vim从光标位置进行反向扫描,直到发现一处拼写错误,然后根据建议创建单词列表并将他们显示在弹出菜单中
set setting! 反转当前设置项的状态
set setting? 查看当前设置项的状态
set setting& 将当前设置项的状态设为默认