vim-tutorial
vim tutorial
整理资料来源
本资料来自 vim-web 一起来说vim语
整理学习 jokechat
理解此部分需要你已经理解vim的几种常用工作模式(正常模式,插入模式,命令模式等)
动词
动词代表了我们打算对文本进行什么样的操作.例如:
1
2
3
4
5d # 表示delete
r # 表示替换replace
c # 表示表示change
y # 表示复制yank
v # 表示选取visual select
名词
名词代表了我们即将处理的文本.vim中有一个术语对象叫做 text object (文本对象) ,示例如下:
1
2
3
4
5w # 表示一个单词word
s # 表示一个句子sentence
p # 表示一个段落paragraph
t # 表示一个html标签tag
引号或者各种括号所包含文本称为一个文本块
介词
介词界定了待编辑文本的范围或者位置
1
2
3
4i # 表示在...之内 inside
a # 表示环绕...around
t # 表示到...位置钱 to
f # 表示到...位置上 forward
数词
数字指定了待编辑文本对象的数量,从这个角度而言,数词也可以看做一种介词.引入介词之后,文本编辑命令的语法就升级成了下面样子:
1
动词 介词/数词 名词
下面是几个例子:
1
2c3w # 修改三个单词 change three words
d2w # 删除两个单词 delete two words
另外,数词也可以修饰动词,表示将执行n次.于是,我们又有了下面的语法
1
数词 动词 名词
请看示例:
1
22dw # 两次删除单词(等价于删除两个单词) twice delete word
3x # 三次删除字符(等价于删除三个字符) three delete character
组词为句
有了这些基本的语言元素,我们就可以着手构造一些简单的命令了.文本编辑命令的基本语法如下
1
动词 介词 名词
下面是一些例子🌰(如果熟悉了上面的概念,你将会看到这些例子非常容易理解),可以自己亲自尝试一番
1
2
3
4
5
6
7
8
9dip # 删除一个段落 delete inside paragraph
di{ # 删除{}中的所有代码
di( # 删除()中的所有代码
di[ # 删除[] 中的所有代码
vis # 选取一个句子 visula select inside sentence
ciw # 修改一个单词 change inside word
caw # 修改一个单词 change around word
dtx # 删除一个文本直至字符"x"(不包括字符"x") delete to x
dfx # 删除文本直至字符"x" (包括字符"x") delete forward x
常用快捷键
这里的vim快捷键是已经配置好的,回头留意查快捷怎么配置
- 研究vim快捷键配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98;fl # 唤出当前目录文件菜单列表 file list
nw # 窗口切换
;lw # 跳转至右方的窗口
;hw # 跳转到左方的窗口
;kw # 跳转到上方的子窗口
;jw # 跳转到下方的子窗口
# 可以直接在tab之间切换
gt # 后一个tab标签
gT # 前一个tab标签
;q # 关闭一个标签
;bn # 正向遍历 buffer
;bp # 逆向遍历 (光标必须在buffer列表子窗口外)
;bd # 关闭当前buffer
;bb # 你之前所在的前一个buffer
ctrl+y # 向上一行
ctrl+e # 向下一行
ctrl+u # 向上半屏
ctrl+d # 向下半屏
ctrl+f # 向上一页 f 就是'forward'
ctrl+b # 向下一页 b 就是'backward'
ctrl+o # 上一个光标的位置
ctrl+i # 下一个光标的位置
# 书签设定,标记并跳转
ma # 设定/取消当前行名为 a 的标签
m, # 自动设定下一个可用标签名
mda # 删除当前文件中所有所有独立标签
m? # 列出当前文件中所有书签,选中后回车可直接跳转
mn # 按照行号的前后顺序,跳转至下一个独立书签
mp # 按照行号的前后顺序,跳转至前一个独立书签
'a # 调到书签a
'. # 最后一次编辑的地方
;t # 通过搜索文件打开文件
0 # 跳转到当前行首
$ # 跳转到当前行尾
!CLL # CLL 表示要执行的shell命令
!date # 查看时间
:r !date # 当前系统时间写入到光标所在行
:r ./hello.txt # 表示将当前路径下hello.txt文件中的内容 导入到光标所在行
# visual select模式选中状态下
U # 选中 - 小写变大写
u # 选中 - 大写变小写
~ # 选中 - 小写大写相互转换
J # 选中 - 选中的多行合并为一行
:sp # 选中搜索 - 搜索当前目录所有文件
;sl # 选中搜索 - 当前目录结果列表
# 列选中编辑
ctrl+v # 进入块选中模式(visual block) 'hjkl'方向键控制选中区
shift+i # 进入列选择批 ;c$ # 光标开始位置量编辑
;cc # 代码注释 (根据语言选择注释形式 "//" or "<!- comment -->>" )
;cm # 代码段落注释 "/**/"
;ci # 注释相反,没注释的添加注释,注释额取消注释
;cs # 段落注释,注释每行前面加"*"
;c$ # 光标开始位置到行结束位置添加注释
;cA # 在行尾部添加注释 "//"
;cu # 取消代码注释
:132,135 join # 合并132~135行
xp # 左右交换光标处两字符的位置
;y # 复制到系统剪贴板
y # 复制
yy # 复制光标所在行
yw # 从光标处复制一个字符/单词额末尾,包括空格
ye # 从光标出复制一个字符/单词的末尾,不包括空格
y$ # 从当前光标处复制到行末
y0 # 从当前光标位置复制到行首(不包括光标位置)
y5l # 从光标位置(包含光标位置)向右复制5字符
y3B # 从光标位置(不包含光标)反向复制3个单词
. # 粘贴
p # 粘贴
# 多光标编辑
shift+n # 选中下一个相同字符
shift+k # 跳过当前选中的字符
za # 单个代码折叠
zM # 折叠左右代码
zR # 所有代码折叠取消
;i # 开/关缩进可视化 - 代码缩进关联线条
> # 代码缩进 -
< # 代码缩进
:1,20/header/www/g # 1~20行将header替换成www
ctrl+z # vim 扔进后台jobs
基础使用
快捷键通配符
快捷键通配符 <leader>
相当于一个通用的命令符
1 | let mapleader=";" |
插入命令
1 | a # 在光标所在字符后插入 |
删除命令
1 | x # 删除光标所在字符 |
定位命令
1 | :set number # 设置行号 简写 set nu |
简单排版
1 | :ce(center) # 居中显示光标所在行 |
刷新重载打开的文件
1 | :e # 刷新当前文件 |
保存退出
1 | :w filename # 保存修改 |
整页翻页
1 | ctrl+f # 下一页 f 就是 'forward' |