纵横四海

天道酬勤

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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# VIM模式
默认为命令模式,则任何其他模式下按ESC返回到命令模式,连续两次ESC也可以返回到命令模式
编辑模式
底行模式

# VIM命令行
vim +100 /etc/file.txt #打开file.txt,并直接跳转到100行
#分屏打开多个文件
vim -On file1 file2 #同时打开两个文件,左右分屏,n是要打开的文件的数量,表示有几个文件需要分几个屏幕
vim -on file1 file2 #上下分屏
#对单个文件进行分屏:命令模式
ctrl+w+s #上下分屏
ctrl+w+v #左右分屏
ctrl+w+c #结束分屏

# 录宏模式
当命令行显示recording时,说明进入录像模式,该模式下vim会记录你所有的操作,直到按q退出

# visual模式:命名模式下
v:字符选择,会将光标经过的所有地方反白选择
V:行选择,会将光标经过的行反白选择
ctrl+v:区块选择,可以用长方形的方式选择,然后按I,进入编辑模式输入需要插入的字符串,ESC后可以看到效果。

y:将反白的部分复制下来
d:将反白的部分删掉
p:将刚刚复制的区块,在游标处黏贴

# 缩进
shift+>(或者 shifi+<) --可能需要按两下才有效果
#批量缩进
ctrl+v,选择多行,然后shift+>(或者 shifi+<)
#对其缩进
ctrl+v,选择多行,然后按=,此时所有选中行与选择区域的上一行进行对齐缩进
# 底行命令:
:上下 --可以快速调取历史命令
:set nu --行号
:set nonu --取消行号
:n --跳转到n行
:set list --显示行尾符,通常用来判断行尾是否存在空格
:set all --查看所有配置
:w [filename] --另存为
:n1,n2 w [filename] --将n1到n2行的内容另存为
:! cmd --暂时离开vi,然后执行cmd,例如【:! ls /home】,即可在vi中查看/home
:set cursorcolumn --显示垂直辅助线
:e! --恢复至打开时的状态
:set ff --查看当前文本模式类型,一般为dos,unix
:set ff=dos --设置为dos模式
:set fileencoding --查看当前文本编码格式
:noh --取消高亮

# 多窗口
:sp /path/file1.txt --filename可有可无,不带filename,则打开同一个文件的两个窗口,上下分屏
:vsp --左右分屏
ctrl+ww --使光标在不同窗口之间跳转



# 翻页
ctrl+f 向前滚动一页
ctrl+b 向后滚动一页
ctrl+u 向前滚动半页
ctrl+d 向后滚动半页

# 光标移动
一个字符、一个句子、一个段落、一行、一屏、一页。
确定操作单位后,需要确定命令重复执行的次数。Vim光标移动命令的操作对象范围计算公式为: 操作范围 = 操作次数 x 操作单位
例如:5h命令表示左移5个字符,8w命令右移8个单词
#上下左右
上:k ick up
下:j ump down
左:h ang back
右:l eap forward
#行级别移动
0 移动到光标所在行行首
$ 移动到光标所在行行尾
^ 移动到当前行的第一个非空字符
1G=gg 移动到文件第一行
2G=2gg 移动到文件第二行
nG 移动到当前文件的第n行
:n 移动到当前文件的第n行
#文件首尾
gg|:0 移动光标到当前文件的第一行的第一个字符
G|:$ 移动光标到当前文件的第后一行的第一个字符
#以单词为单位移动
w|W 移动到下一个单词的开头
b|B 移动到上一个单词的开头
e|E 移动到下一个单词的末尾

* 移动到和当前光标所在位置的单词相同的下一个单词的开头
'#' 移动到和当前光标所在位置的单词相同的上一个单词的开头
#匹配括号移动
% 在匹配的括号上移动。
#段落级别移动
'}' 移动到当前段落的末尾
'{' 移动到当前段落的开头
#当前屏幕内上中下移动
H 移动到当前屏幕第一行第一个字符
M 移动到当前屏幕中间第一个字符
L 移动到当前屏幕最后第一个字符




# 插入(进入到编辑模式)
#行首,行尾插入
I 将光标移动到行首并进入编辑模式
A 将光标移动到行末并插入-在当前行尾追加
#光标左右插入
i 当前光标处插入-左插入
a 当前光标后插入-右插入
#行上行下插入
o 在当前行下面插入新行
O 在当前行上面插入新行-在当前行首插入
#删除插入
s 删除光标所在字符并插入
S 删除整行并插入
C 删除光标所在位置后面的内容并进入编辑模式

# 删除(本质是剪切)
dd 删除光标所在行
4dd 从当前行开始向下删除4行

dgg 删除当前行以及当前行前面的所有行
dG 删除当前行以及当前行后面的所有行

d $|D|shift+d 删除光标位置到行尾
d 0 删除光标所在行,光标位置到行首

^d 删除整行

# 删除单个字符:在命令模式下
x 向后删除,从光标位置开始
X 向前删除,从光标前一个位置开始

# 替换字符:在命令模式下
r 按r后输入需要替换的字符,替换当前光标所在位置的字符
R 进入替换模式,替换光标位置的字符

# 撤销
u 撤销最近一次操作,并恢复操作结果,可多次使用来恢复已进行的多步操作
U 撤销对当前行的所有操作
ctrl+r 重做上一个动作

# 复制
yy 复制当前整行
4yy 从当前行向下复制4行
# 黏贴
p 将已复制的数据在光标下一行黏贴
3p 将已复制的数据在光标下一行黏贴出3份
P 将已复制的数据在光标上一行黏贴

# 查找并替换:底行模式下
自上而下查找:/字符 查找过程中可使用n查看,N反向查看
自下而上查找:?字符

#针对光标停留处的特定的单词,可以使用快捷键进行向上和向下的搜索,而且是vim的全词搜索。
Shift + 8,即*键,直接对光标停留处的单词进行向下搜索;
Shift + 3,即#键,直接对光标停留处的单词进行向上搜索。

:set hlsearch 搜索词高亮显示设置
:nohl 取消搜索词高亮显示,用快捷键搜索的高亮也用词命令取消

s 表示替代的意思
g 表示替换一行内所有匹配到的字符串,全局替换。如果不加g则只替换第一个匹配的字符串
'#''/' 都可以用来分隔,作用相同,并且这个分隔符是可以自定义的

:s#string1#string2#g 将光标所在行中的string1替换为string2
:%s/word1/word2/g 使用word2替换该文件中的所有word1
:%s#string1#string2#g 将文件中的所有string1替换为string2

:s/string//g 将文件中的所有匹配到的string都删除掉

:1s/string1/string2/g 将第一行中的所有string1替换为string2
:1,5s/word1/word2/g 从1到5行之间查找word1字符串,并将其更改为word2
:1,$s/word1/word2/g 从第一行到最后一行查找word1字符串,并将其更改为word2
:1,$s/word1/word2/gc 从第一行到最后一行查找word1字符串,并将其更改为word2,需要用户确认



# 查找{}闭合块
shift+5 能够在{}的闭合处进行跳转。

# VIM中的shell操作
:!cmd #不退出vim执行cmd,将cmd输出显示在vim的命令区域,不会更改当前编辑的文件的内容
:!bash #启动bash
:r !cmd #将cmd的结果插入到当前行的下一行
0%