vi的重要性不必多讲,之前没有系统的学过,只知道vi强大,使用vi也是像只用windows下没有鼠标的记事本一样。。。。额,这个形容太贴切了,哈哈
今天系统学习一下,这里做一些记录,不记录就忘记了。。。
1. vi三种工作模式,分别是:输入模式,命令模式,末行模式
1.1 模式切换:
进去默认为指令模式,输入i,a,o,I,A,O 可进入输入模式
输入模式下 Esc 进入命令模式
命令模式下输入 : (冒号)进入末行模式
末行模式按两次ESC命令模式
2. 编辑模式进入输入模式详解:(参考马士兵linux视频资料)
i :在当前光标所在字符的前面,转为输入模式;
a:在当前光标所在字符的后面,转为输入模式;
o:在当前光标所在行的下方,新建一行,并转为输入模式;
I :在当前光标所在行的行首,转为输入模式;
A:在当前光标所在行的行尾,转为输入模式;
O:在当前光标所在行的上方,新建一行,并转为输入模式
3. 光标的移动:(命令模式)
3.1 逐字符移动
左:h 右:l 下:j 上:k
数字加以上字母,可以往相应方向移动n个字符,如:10h,往左移动10个字符。
3.2 以单词为单位移动:
w:移至下一个单词词首(往后);
e:移至下一个单词词尾(往后);
b:往前跳至当前或上一个单词的词首。(往前)
同样,可以在字母前加数字,如:10w
3.3 行内跳转:
0:跳至绝对行首(zero)
$:跳至绝对行尾
^:行首第一个非空白字符
3.4 行间跳转
#G:跳至第#行;
G:最后一行
gg:第一行
末行模式下,直接给出行号即可;
4. 关闭文件:
4.1 末行模式关闭文件
:q 退出
:wq 保存并退出
:q! 不保存强制退出
:w 保存
:w! 强行保存
:wq-->:x
4.2 编辑下退出
ZZ 保存退出
5. 删除
5.1 删除单个字符:
x 删除光标所在处的单个字符
#x 删除光标所在处及往后的#个字符
5.2 删除命令d
d命令和跳转命令组合使用
#dw,#de,#db
dd 删除当前行
#dd 删除当前行及往后共#行
6. 复制粘贴
5.1 复制y,用法类似d
#yw,#ye,#yb
yy 复制当前行
5.2 粘贴p
如果复制的为整行内容,则粘贴至光标所在行下一行,若复制或者删除的内容非整行,则粘贴于光标所在字符的后面。(删除相当于剪切)
7. 撤销编辑操作u
u 撤销前一次的编辑,连续按u,连续撤销
#u 撤销最近#次操作
Ctrl+r 取消最近一次的撤销
8. 查找替换
8.1 查找
/aaa 可以找到关键字aaa,输入n找到下一个,输入N找到前一个(类似man里面)
8.2 替换
复杂命令,先进入末行模式,然后输入替换的命令,比如,要讲代码里面所有原本是void的返回值改为String
:1,$s/void/String/g
命令解读,1是指第一行开始,$指的是到文件末尾,s指的是substitute,查找替换,/为分隔符,也可以使用#或者+作为分隔符,此时中间出现的/不会做为分隔符,@也可,查找void,替换为String,g指的是global,全局替换,最后可以加i指的是忽略大小写,不忽略可以不加 ,此处不应该加。
或者
:%s/void/String/g 这样也可以,%指的是任意字符,也就是全文意思了
9. 显示行号
:set number 或者 :set nu