命令 | 描述 |
---|---|
ga | 查看当前的ascii值,并且打印八进制十进制十六进制的值 |
符号匹配
符号 | 作用 |
---|---|
\s | 表示匹配任意空白字符,包括空格,制表符,换页符 |
\_s | |
* 符号用于匹配0个或多个字符(:h wildcard)
** 符号也用于匹配0个或多个字符,但它可以递归进入指定目录的子目录 (:h starstar-wildcard)
技巧37 用缓冲区列表管理打开的文件
缓冲区列表命令
命令 | 功能 |
---|---|
Ctrl+^ | 在列表中互相切换 |
:bprev | 在列表反向移动,每次移动一项 |
:bnext | 在列表正向移动,每次移动一项 |
:bnext ! | 强制移动 |
:edit! | 从磁盘重新读取文件(会覆写缓冲区的内容) |
:bfirst | 跳转到列表的开头 |
:blast | 跳转到列表的结尾 |
:buffer N | 通过:ls显示的数字来进行切换 |
:bufdo | 在:ls列出的所有缓冲区上执行Ex命令 |
:bdelete N | 删除缓冲区 |
技巧38 用参数列表将缓冲区分组
参数列表
参数列表易于管理,适用于对一批文件进行分组,使其更容易访问
命令 | 功能 |
---|---|
:argdo | 在参数列表中的每个文件执行一条Ex命令 |
:args | 查看参数列表 |
:args {arglist} | arglist可以包括文件名通配符,shell的输出结果,要用反撇号`,如`cat test.txt`,同样可以包含glob模式,如**.*.js表示在列表中加入当前目录和子目录下所有的以js文件结尾的文件在列表中增加几个文件 |
:next | 向前遍历参数列表中的文件 |
:prev | 向后遍历参数列表中的文件 |
技巧39 管理隐藏缓冲区
在退出时处理隐藏缓冲区的方式
命令 | 用途 |
---|---|
:w[rite] | 把缓冲区内容写入磁盘 |
:e[dit]! | 把磁盘文件内容读入缓冲区(即回滚所做修改) |
:qa[ll]! | 关闭所有窗口,摒弃修改而无需警告 |
:wa[ll]! | 把所有改变的缓冲区写入磁盘 |
技巧40 将工作区切分成窗口
:h window
命令 | 功能 |
---|---|
Ctrl+w+s | 水平切分当前窗口,新窗口仍显示当前缓冲区 |
Ctrl+w+v | 垂直切分当前窗口,新窗口仍显示当前缓冲区 |
:sp[lit] {file} | 水平切分当前窗口【并在新窗口中载入{file}】 |
:vsp[lit] {file} | 水平切分当前窗口【并在新窗口中载入{file}】 |
Ctrl+w+w | 在窗口间循环切换 |
Ctrl+w+j|k | 切换到上|下的窗口 |
Ctrl+w+h|l | 切换到左|右的窗口 |
实际上,<C-w><C-w>完成的功能和<C-w>w相同,就是说可以一直按住<Ctrl>键,然后输入ww(或wj,或上表中的其他命令)来切换活动窗口。<C-w><C-w>要比<C-w>w更容易按一些。
关闭窗口
ex命令 | 普通模式命令 | 用途 |
---|---|---|
:clo[se] | <C-w>c | 关闭活动窗口 |
:on[ly] | <C-w>o | 只保留活动窗口,关闭其他所有窗口 |
改变窗口大小及重新排列窗口
命令 | 用途 |
---|---|
Ctrl+W+= | 使所有窗口等宽等高 |
Ctrl+w+_ | 最大化活动窗口的高度 |
Ctrl+w+| | 最大化活动窗口的宽度 |
[N]Ctrl+w+_ | 把活动窗口的高度设为[N]行 |
[N]Ctrl+w+| | 把活动窗口的宽度设为[N]列 |
技巧41 用标签页将窗口分组
命令 | 功能 |
---|---|
:lcd {path} | 设置当前窗口的本地工作目录只影响当前窗口,而非当前标签页。如果一个标签页包含了两个或更多的窗口,可以用:windo lcd {path}命令为所有这些窗口设置本地工作目录。 |
:tabedit {filename} | 打开一个新的标签页,如果省略了{filename}参数,那么 Vim 会创建一个新标签页,里面包含一个空缓冲区 |
:close | 如果活动标签页中只包含一个窗口,那么:close命令将关闭此窗口以及包含此窗口的标签页。 |
:tabe[dit] {filename} | 在新标签页中打开 {filename} |
<C-w>T | 把当前窗口移到一个新标签页 |
:tabc[lose] | 关闭当前标签页及其中的所有窗口 |
:tabo[nly] | 只保留活动标签页,关闭所有其他标签页 |
在标签页间切换
ex命令 | 普通模式命令 | 功能 |
---|---|---|
:tabn[ext] {N} | {N}gt | 切换到编号为 {N} 的标签页 |
:tabn[ext] | gt | 切换到下一标签页 |
:tabp[revious] | gT | 切换到上一标签页 |
重排标签页
:tabmove [N]
- 当 [N] 为0时,当前标签页会被移到开头
- 如果省略了[N],当前标签页会被移到结尾。
基础命令
<C-a>
代表Ctrl + a
,其他同理A
在光标所在行末尾添加内容a
在光标之后添加内容aw
是指一个文本如一个词^
快速移动到行首$
快速移动到行尾db
删除从光标其实位置到单词开头的内容<C-a>
和<C-x>
分别对数字执行加和减操作,如光标在字符 5 上面执行10<C-a>
就会把它变成 15, 如果 5 的前方或者当前位置处运行10<C-a>
就会把它变成 6在 Vim 中如果遇到 0 开头的数字比如 007 就会被认为是八进制的数字,如果想要修改这个可以在 vimrc 中添加
set nrformats=
<C-o>
进入插入-普通模式, 可以执行一遍普通模式后进入插入模式zz
重绘屏幕,便且吧当前行显示在窗口正中<Esc>
,<C-[>
切换到普通模式在插入模式下
<C-h>
为删除前一个字符(同退格键)在插入模式下
<C-w>
为删除前一个单词在插入模式下
<C-u>
为删除到行首c
修改d
删除y
复制到寄存器g~
反转大小写gu
反转为小写gU
反转为大写>
增加缩进<
减小缩进=
自动缩进!
使用外部程序过滤{motion}所跨越的行Vim 的语法大部分当一个操作符连续调用两次时,它会作用于当前行
dap
删除一个段落daB
删除一个{}块:%s/content/copy/g 替换所有 5
第一章: Vim 解决问题的方式
技巧 1: 结识 . 命令
x
命令会删除光标下的字符>G
会增加缩进等级
技巧 2: 不要自我重复
C
删除从光标所在处往后的行并且进入插入模式 = c$.s
删除光标后面的字符并且进入插入模式 =cl.
S
删除光标所在行并且在删除行进入插入模式.I
跳转到行首然后进行插入.A
跳转到行尾然后进行插入.
技巧 3: 以退为进
技巧 4: 执行, 重复, 回退
;
重复查找上次 f 命令所查找的字符.@
用来重复任意的 Ex 命令.%%%%%%%%%%%%目的 操作 重复 回退 做出一个修改 {edit}
. u 在行内查找下一指定字符 f{char}/t{char}
; , 在行内查找上一指定字符 F{char}/T{char}
; , 在文档中查找下一处匹配项 /pattern<CR>
n N 在文档中查找上一处匹配项 ?pattern<CR>
n N 执行替换 :s/target/replacement
& u 执行一系列修改%%%%%%% qx{change}q
@x u
技巧 5: 查找并手动替换
*
查找当前光标下的单词.w
当前光标位置到单词末尾.cw
删除从光标位置到单词结尾的字符并且进入插入模式.
技巧 6: 结识 . 范式
第一部分 模式
第二章: 普通模式
技巧 7: 停顿时请移开画笔
技巧 8: 把撤销单元切成块
技巧 9: 构造可重复的修改
b
跳转到单词的开头.db
删除从光标起始位置到单词开头的内容.dw
删除从光标起始位置到单词结尾的内容.aw
文本对象(text object).daw
删除所在光标位置的单词.
技巧 10: 用次数做简单的算术运算
<C-a>
对光标所在位置的数字进行加.<C-x>
对光标所在位置的数字进行减.- 注意如果前面是以 0 开头的, 会被认为成八进制.
技巧 11: 能够重复, 就别用次数
技巧 12: 双剑合璧, 天下无敌
g
在这里可以当中前缀字符,足以该表其后面的按键行为.g~
反转大小写.gu
转换为小写.gU
转换为大写.y
复制到寄存器.Vim 中一条额外规则, 当一个操作符命令被连续调用两次时, 它可以作用于当前行,
dd
删除当前行,>>
缩进当前行,而gU
是一种特殊情况, 我们既可以用gUgU
,也可gUU
.>
增加缩进.<
减少缩进.=
自动缩进.%%%%%%%%%%%%%!
使用外部程序过滤{motion}所跨越的行.自定义操作符.
第三章: 插入模式
技巧 13: 在插入模式中即可即时更正错误
以下是在插入模式下, 且不是 Vim 首创,在 bash shell 也可以使用它们.
<C-h>
删除前一个字符.<C-w>
删除前一个单词.%%%%%%%%%%%有问题不能复现<C-u>
删除到行首.
技巧 14: 返回普通模式
<Esc>
,<C-[>
从插入模式切换回普通模式<C-o>
从插入模式切换到插入普通模式, 是普通模式的一个特例, 它能执行一个普通模式命令, 执行完后就返回到插入模式.
技巧 15: 不离开插入模式, 粘贴寄存器中的文本
yt
是复制到专用寄存器中.%%%%%%%%%%%<C-r>0
把复制到的文本粘贴到光标所在位置. 它的一般格式是<C-r>{register}
,其中{register}
是我们想要插入的寄存器的名字.%%%%%%%%
技巧 16: 随时随地做运算
- ???????????
技巧 17: 用字符编码插入非常用字符
<C-v>{code}
用字符编码插入非常用字符,如<C-v>u00bf
输入¿,u 的意思是用十六进制.ga
限速当前光标下的编码,分别以十进制和十六进制的形式限速.
技巧 18: 用二合字母插入非常用字符
<C-k>{char1}{char2}
用二合字母插入非常用字符,如<C-k>?I
输入¿,详细用法:h digraphs-default
,查看可以用的二合字母列表:digraphs
或者是:h digraphs-table
.
技巧 19: 用替换模式替换已有文本
<Insert>
按键,可以在插入和替换模式下进行切换, 同R
.R
命令进入的是替换模式, 这个模式下某些字符回变得复杂化, 如制表符,它在文件中以单个字符表示, 但是在屏幕中却会占用若干列的宽度, 此宽度由tabstop
设置. 如果把光标移动倒制表符上,然后进入替换模式, 那么我们所输入的下一个字符将会替换制表符, 假设tabstop
设为 8(缺省值), 那么该操作就是把 8 个字符替换成了一个字符. 而 Vim 还有另一种虚拟替换模式,由gR
触发, 它会把制表符当成一组空格进行处理. 假设把光标移动倒制表符上,然后进入虚拟替换模式, 在输入前 7 个字符时, 每个字符都会被插入到制表符之前, 最后, 当输入了第 8 个字符时, 该字符将会替换制表符.
第四章
技巧 20: 深入理解可视模式
技巧 21: 选择高亮选区
- 激活可视模式
命令 | 用途 |
---|---|
v | 激活面向字符的可视模式 |
V | 激活面向行的可视模式 |
<C-v> | 激活面向列块的可视模式 |
gv | 重选上次的高亮选区 |
- 在可视模式之间进行切换
按键操作 | 用途 |
---|---|
<Esc> | <C-[> | 回到可视模式 |
v | V | <C-v> | 切换到普通模式, 分别对应面向字符可视模式, 面向行的可视模式, 面向列块的可视模式 |
v | 切换到面向字符的可视模式 |
V | 切换到面向行的可视模式 |
<C-v> | 切换到面向列块的可视模式 |
o | 重选高亮选区的活动端 |
e
向后到单词的末尾.
技巧 22: 重复执行面向行的可视命令
技巧 23: 只要可能, 最好用操作符命令
it
是一种文本对象(text object).vit
选择标签内的内容. 如<a href="#">one</a>
,使用vit
就会高亮 one.
技巧 24: 用面向列块的可视模式编辑表格数据
技巧 25: 修改列文本
- 在插入时只影响顶行, 但是按下
Esc
后将会正常插入所选的区域 ????自己的总结
技巧 26: 在长短不一的高亮块后添加文本
第五章 命令行模式
技巧 27: 结识命令行模式
读写文件
:edit
.创建及销毁新标签页
:tabnew
,:tabclose
.分割窗口
:split
:sp
.<C-w> k|j|h|l
移动光标到上下左右.<C-w> K|J|H|L
移动窗口到上下左右.
操作参数列表
:prev/:next
及缓冲区列表:bprev/:bnext
.更多 Ex 命令
:h ex-cmd-index
.操作缓冲区文本的 Ex 命令
命令 用途 :[range]delete [x]
删除指定范围内的行(到寄存器 x 中) :[range]y[ank] [x]
复制指定范围内的行(到寄存器 x 中) :[range]put [x]
在指定行后粘贴寄存器 x 中的内容 :[range]co[py] {address}
把指定范围内的行拷贝到 {address}
所指定的行之下:[range]m[ove] {address}
把指定范围内的行拷贝到 {address}
所指定的行之下:[range]j[oin]
把指定范围的行连接到一起变成一行: :[range]norm[al] {commands}
对指定范围内的每一行执行普通模式命令 {commands}
:[range]s[ubstitute]/{pattern}/{string}/[flags]
对指定范围内出现 {pattern}
的地方替换成{string}
:[range]g[lobal]/{pattern}/[cmd]
对指定范围内匹配{pattern}的所有行,在其上执行 Ex 命令 {cmd}