VIM学习笔记-1
VIM
vim主要分为3个模式:
- Normal 模式
- Insert模式
- command模式
Insert 模式就是普通的编辑模式,没有太多可以介绍的,vim的主要功能都在 Normal 模式和 Command 模式中。
1. Normal 模式
在normal模式下,所有的按键都是功能键。
1.1 切换模式
进行Insert模式可以通过按下输入键
i
- (insert) 在光标前插入a
- (append) 在光标后插入A
在行尾插入o
- () 在当前行后插入新行O
- () 在当前行前插入新行cw/ce
- () 替换从光标处到最后一个单词结尾的所有字符
1.2 移动
最基本的移动按键为hjkl
分别用于左,下,右,上方向的移动
- 使用如
100j
这种格式的命令可以直接向对应方向移动指定的次数
1.2.1 行内移动
0
到行头$
到行尾^
到本行第一个非空白字符g_
到本行最后一个非空白字符
1.2.2 行间移动
{n}G
到第n行gg
到第一行G
到最后一行
1.2.3 单词移动
一般我们规定一个单词由字母,数字和下划线组成。
如果是按默认的单词规则移动,使用小写。如果想要按空白字符来区分单词,则使用大写的E
,W
-
w
移动到下一个单词的开头 -
e
移动到下一个单词的结尾
1.2.4 查找匹配移动方式
-
%
当前光标如果在括号上,则移动到其匹配的另一个括号上,对{}
,[]
,()
都适用 -
*
和#
用于匹配当前光标所在的单词,高亮显示所有匹配项,并且可通过*
移动到下一个单词,通过#
移动到上一个单词 -
/{phrase}
可以在当前光标之后内容中查找{phase}
指定的单词,并跳转到单词的开头,
通过?{phrase}
来从当前光标向前查找
可以通过按n
重复查找当前位置下一个,N
查找当前位置上一个
1.3 编辑操作
1.3.1 简单文本操作
使用d
,c
,y
操作的数据都会进入寄存器,都可以使用p
进行粘贴操作
p/P
粘贴操作,p
在当前位置之后进行粘贴,大写P
表示在当前位置之前yy
复制当前行,效果等价于ddP
d
:
-
dd
删除当前行,并且把行数据放入剪切板中 -
D
等于d$
,删除光标所在处到行尾 -
u
撤回。注意在vim中撤回不是ctrl + z
-
U
大写表示撤回当前行的所有命令,让该行回到原始状态 -
ctrl + r
重做,和撤回相反的操作 -
r{x}
用字符x来替换当前光标所在的字符 -
R
进入替换模式,可以输入字符不停地替换后续的所有内容 -
gU
/gu
变大写/变小写
c
:
c
的作用基本和d
相似,只是在执行命令后会自动进入 Insert 模式
1.3.2 组合操作
许多编辑命令都可以和移动光标的命令组合在一起:<operator> <motion>
,像是d
,c
,y
如 :
d$
将删除光标到行尾的字符dte
将删除光标到当前行的第2个e
之前的字符ye
将复制从光标到词尾的字符
当然我们也可以在编辑命令之前加上移动命令,来进行光标的定位,如:
0d$
会删除本行ggyG
复制整个文本
但是请注意,编辑命令只是和后面跟着的移动命令结合,当你输入一个编辑命令d
时,可以在右下角的命令栏中看到一个字母d,这表示vim正在等待你的后续输入。而前续的移动命令并不是必需的,只是为了对想要操作的内容的起点进行定位。
同时,移动命令也可以和数字相结合,所以可以使用<operator> {number} <motion>
格式的操作
如:
d2w
删除光标开始的后面2个单词d2$
删除光标到后面2行
1.3.3 高级操作
替换命令:
:s/old/new
替换当前行,把old
改成new
:{n},{n}s/old/new/g
在s前可以加上指定行,或指定范围。并且可以通过/g
指定替换每行的所有符合项,否则每行只会替换第一个符合项
:%s/old/new/gc
使用%
表示在全文件中进行查找替换,并且/c
表示在替换时会弹出确认提示
.
小数点可以重复上一次命令{n} <command>
可以重复某个命令n次
100idesu [ESC]
这个命令会向文件中写入100 个desu
单词
Ctlr-N
1.4 其他操作
Ctrl-g
可以在命令栏显示当前文件的基本信息,编辑状态,以及当前光标所在行列。
2. Command模式
命令模式,就是在vim最下面那行输入栏,在这里可以输入许多命令。一般都以:
开头
2.1 执行外部命令
通过:! {command}
来执行外部命令
如:
:! ls
会列出当前目录下的文件
2.2 保存和退出
退出:
:q
quit 退出,但是如果有修改过文件,则无法退出,必须先保存:q!
强制退出,无论是否修改。:x
退出ZZ
直接退出,是Normal
模式的命令,但是放在此处一起归为退出命令了。
保存:
:w
write 保存:w {fileName}
另存为新文件并命名为{fileName}
:wq
保存并退出
另存为命令:w {fileName}
还可以和可视化选择命令搭配。比如在进行可视化选择后,输入另存为命令,可以看到左下方命令栏中出现:'<,'>w {fileName}
,只会将选中的内容另存到指定的新文件中
读取:
:r {fileName}
read 可以读取一个指定的文件到光标处:r !{command}
可以读取一个外部命令的执行结果到光标处
设置:
-
:set nu
常用命令,显示行号 -
:set ruler
在右下角显示当前行列和进度 -
:set hls
查找匹配项高亮 -
:set ic / :set noic
ignore case 查找忽略大小写 开启/关闭
如果想要在一次查询中忽略大小写,可以用/{word}\c
的命令形式。注意\c
并非/c
2.3 补全功能
在输入命令行命令时,用Ctrl-D
可以列出当前匹配的命令。按Tab
键可以补全命令。对于命令中的文件名参数也可以用Tab
补全