###########################################################################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 专门用来屏蔽错误提示
替换域中的特殊字符 描述
插入一个换行符
插入一个制表符
\ 插入一个反斜杠
1 插入第一个子匹配
2 插入第二个子匹配(以此类推)