vim的四种模式
- 一般模式 normal
- 编辑模式 insert
- 命令模式 command
- 可视模式 visual
1、Normal 模式
-
vim进入时的默认模式,对于一个编辑器而言,大部分的操作是查看,默认是Normal模式很合理
-
光标移动
-
h
左移 -
l
右移 -
k
向上 -
j
向下 -
w
移动光标到下一个单词开头 -
e
移动光标到下一个单词结尾 -
b
移动光标到上一个单词开头 -
^
移动光标到本行的最开头字符处 -
$
移动光标到本行末尾 -
H
移动光标到屏幕首行 -
M
移动光标到屏幕中间行 -
L
移动光标到屏幕尾行 -
gg
移动到文档首行 -
G
移动到文档尾行 -
:n
移动到第n行 -
ctrl + f
向下翻页 page down -
ctrl + b
向上翻页 page up -
ctrl + d
向下翻半页 -
ctrl + u
向上翻半页 -
ctrl + e
向上翻一行 -
ctrl + y
向下翻一行 -
[[
转到上一个位于第一列的{
-
]]
转到下一个位于第一列的}
-
{
转到上一个空行 -
}
转到下一个空行 -
f[str]
行首调到str字符位置,;
下一个字符 -
''
两个单引号 此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查找到某个单词后, 再输入此命令则回到上次停留的位置 -
'.
一单一点 此命令相当好使, 它移动光标到上一次的修改行 -
`. 一倒引一点 此命令相当强大, 它移动光标到上一次的修改点
-
-
复制、粘贴、删除、撤销、重复操作
** y 表示拷贝, d 表示删除, p 表示粘贴,u U表示撤销**-
yy
表示拷贝光标所在行 -
+y
复制到系统粘贴板,可以跨文件粘贴 -
yw
表示拷贝从当前光标到光标所在单词结尾的内容 -
y0
表示拷贝从当前光标到光标所在行首的内容 -
y$
表示拷贝从当前光标到光标所在行尾的内容 -
p
粘贴到光标下一行 -
P
粘贴到光标上一行 -
dd
表示删除光标所在行 -
D
表示删除从当前光标到光标所在行尾的内容 -
X
删除光标之前一个字符 -
x
删除光标之后的一个字符 -
xp
交换光标与其之后的字符位置 -
ddp
交换光标所在行与下一行位置 -
J
合并光标行和下一行 -
u
撤销到上一步操作 -
U
行撤销 -
.
重复上一步操作
-
-
特殊编辑
ga
显示光标所指字符的encoding 编码,比如ASCII码guw
光标所在单词光标后的字符小写gUw
光标所在单词光标后的字符大写
2、Command 模式
-
查找
/str
表示向下查找?str
表示向上查找n
查找到之后,向下一个匹配处N
查找到之后,向上一个匹配处
-
替换
:[addr]s/源字符串/目的字符串/[option]
:%s/源字符串/目的字符串/g
全局替换- [addr] 表示检索范围,省略时表示当前行
- “1,20” :表示从第1行到20行;
- “%” :表示整个文件,同“1,$”;
- “. ,$” :从当前行到文件尾;
- s : 表示替换操作
- [option] : 表示操作类型
- g 表示全局替换;
- c 表示进行确认
- p 表示替代结果逐行显示(Ctrl + L恢复屏幕);省略option时仅对每行第一个匹配串进行替换;如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义 如 \t
3、Visual 模式
- Visual 模式用于选择多行文本或文本块,开头结尾自己去定,象用鼠标选一样
v
单行选择V
多行选择VG
选中当前行到尾行Vgg
选中当前行到首行va{
选中{}中间内容,包括{}va(
选中()中间内容vi<
选中<>中间内容vi[
选中[]中间内容vit
选中中间的内容vi"
选中""中间内容vi'
选中’'中间的内容vis
选中一个句子vib
选中一个blockviw
选中一个单词vip
选中一个段落
可以配合复制、删除操作
4、Insert 模式
- i、I (insert)
i
光标前插入I
光标当前行首插入
- a、A(append)
a
光标后插入A
光标当前行尾插入
- o、O(open new line)
o
光标当前行下一行插入O
光标当前行上一行插入
- r、R(replace)
r
替换光标处的一个字符R
替换光标所在行字符
- c(change)
ci(
修改()内部信息ci"
修改 “” 内部信息- 等成对出现符号内容
- s、S
s
删除光标所在的字符并进入插入模式S
删除光标所在行并进入插入模式
5、vim macro批量处理文件内容
- q* 开始录制宏
- q 停止录制宏
- @* 执行宏
- @@ 重复执行上次的@*命令一次
以上命令均是在VIM的一般模式(Normal)下使用的,其中*代表一个数字和单词字符,正则表达式规则是:[0-9a-zA-Z]
:help recording
查看宏帮助
6、Visual模式下使用Normal模式命令
- visual模式下进入命令模式
:normal I"
选中行首插入"
:normal A"
选中行为插入"
ctrl + p
命令模式重复上一次命令
7、数字与命令
-
在 vi 中数字与命令结合往往表示重复进行此命令, 若在扩展模式的开头出现则表示行
- 号定位. 如:
5yy[y5y]
表示拷贝光标以下 5 行5dd[d5d]
表示删除光标以下 5 行:12,24y
表示拷贝第12行到第24行之间的内容:12,y
表示拷贝第12行到光标所在行之间的内容:,24y
表示拷贝光标所在行到第24行之间的内容. 删除类似5fx
表示查找光标后第 5 个 x 字符5w(e)
移动光标到下五个单词的头部(尾部).
8、自动完成与路径设定
- 在 vi 中, 不要求你输入每一个字符, 可以有很多种方法快速输入一些字符.
ctrl+p(ctrl + n)
在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜索开头与其匹配的单词并补齐, 不断输入此命令则循环查找. 此命令会在所有在这个 vim 程序中打开的所有文件中进行匹配ctrl + x + l
在编辑模式中, 整行补齐, 但是仅在本窗口中出现的文档中进行匹配ctrl + x + f
在编辑模式中, 这个命令表示补齐文件名. 如输入: /usr/local/tom 后再输入此命令则它会自动匹配出:/usr/local/tomcat/abbr
即缩写. 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个字符串. 比如编写java文件的常常输入 System.out.println, 这很是麻烦, 所以应该用缩写来减少敲字. 可以这么做:abbr flask from flask import Flask
- 以后在输入flask后再输入其他非字母符号, 它就会自动扩展为from flask import Flask
- 可以定义一些模板