上一篇:nginx location配置踩坑详细记录(2019-07-05 23:21:54)
文章大纲

Vi命令记忆诀窍实践总结

2019年08月11日 11:51

最近一直与服务器打交道,所以决心好好实践一番,夯实一下。


本文着重记载文件内容编辑的相关命令,并不是文件和文件夹的新增、删除和查找,这点切勿混淆了。


开始实践之前,首先了解vi下有命令行模式、末行模式和编辑模式3种模式,vi 文件名,默认进入的是命令行模式,当按下a、i、o、O(大写)等这些字母时,会进入编辑模式(对话框底部会显示-- INSERT --),末行模式就是在命令行模式下输入冒号、斜杠等符号进行保存查找等操作时的模式(由于命令在对话框底部,所以叫末行模式)。


首先打开行标:

:set nu    //末行模式,显示光标


本文大纲:
1.删除相关
2.插入(复制与粘贴)
3.搜索与替换
4.光标移动与翻页

1.删除相关

1.1  删除一行里中间一部分

对于一行内容较少的:

nG   //查看模式下输入,跳到指定行行首,例如: 4+shift+g,就代表跳到文件第4行
-> //移动右箭头,放在要删除的片段开头
v //底部出现-- VISUAL --
-> //移动右箭头至你要删除的片段结尾
d //删除上面选中的部分片段(光标所在的绿色字符也会被删除)
:wq //冒号进入末行模式,wq保存退出


对于一行内容较多的:

nG  //跳到指定行行首
/ //进入末行模式,然后输入查找词定位到要删除的片段开头
v //底部出现-- VISUAL --,代表此时可以前后左右移动光标进行选中
/ //再次进入末行模式,输入查找词定位到要删除的片段结尾
d //删除上面选中的部分片段
:wq


删除光标至行首的部分:

d0   


删除光标至行尾的部分:

d$


删除光标后的几个词(中文和英文体验不一样):

中文:

我心里是不大愿意去的,但想着顺便也可以去见见奶奶,便也就没怎么拒绝。
输入4dw变成如下:
便也就没怎么拒绝。

英文:

My world is beautiful
输入2dw变成如下:
is beautiful

总结:中文里一句话就代表一个w,一个逗号也是代表一个w,而英文一个w代表一个单词+空格


1.2 删除一整行

nG    //跳到指定行
dd

后面有S命令,可以直接删除指定行并进入插入模式。


1.3 删除多行(例如10到99行)

10G  //跳到第10行
v //底部出现-- VISUAL --,支持光标选中区域
99G //光标跳到100行,此时10行到98行就是选中状态了
shift + $ //选中第99整行
d
:wq

退出--VISUAL--,按Esc键。


2.插入(主要掌握基本编辑命令和复制粘贴)

如下比较常用的简单快捷键:

i   //在光标前 
I //在当前行首
a //光标后
A //在当前行尾
o //在当前行之下新开一行
O //在当前行之上新开一行
r //替换当前字符
R //替换当前字符及其后的字符,直至按ESC键
s //从当前光标位置处开始,以输入的文本替代指定数目的字符
S //删除指定数目的行,并以所输入文本代替之

记忆诀窍:眼光短小只看当前(i,a),眼光远大会看整行(I,A),根据insert、append两个单词意思区分前后及首尾。大o小o记住倒立的葫芦形状,小o在下开一行。同样根据眼光大小区分r和R,再依replace单词意思综合理解


s和r的区别:

s是直接删除选中部分并进入编辑模式了,r是在输入r后还要再输入目标字符才能将选中部分替换掉。

2.1 复制一行并粘贴到某一行(复制第10行,粘贴到第5行)

10G   //光标跳到第10行
yy //复制光标所在行,即第10行
4G
p //粘贴,会在光标所在行的下一行粘贴上内容

整个过程没有进入编辑模式,也就不需要按Esc来退出编辑模式。


2.2 复制多行并粘贴(复制8到10行,粘贴到第12行)

采用末行模式:

:8,10 copy 11

采用编辑模式(通过v键手工选中拷贝区域):

8G
v //出现--VISUAL--,开始通过箭头方向键选中区域,前面提到$符号,可以直接选中光标当行至行尾
Ctrl + Insert //复制
v //撤销选中,回到命令行模式
12G
i //进入编辑模式
Shift + Insert //粘贴

注意:采用Ctrl+Insert方式复制时,先用:set nonu命令(末行模式)关闭行号,否则粘贴内容会包含行号。

2.3 复制整个文件的内容

这种就可以直接复制文件了。



3.查找与替换

这种情况下主要用到末行模式命令。

先掌握以下基本的末行模式命令:

:n1,n2 co n3 //将n1行到n2行之间的内容拷贝到第n3行下 
:n1,n2 m n3 //将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d //将n1行到n2行之间的内容删除
:w //保存当前文件
:x //保存当前文件并退出
:q //退出vi
:q! //不保存文件并退出vi
/pattern //从光标开始处向文件尾搜索pattern 
?pattern //从光标开始处向文件首搜索pattern


3.1  将一行中所有domain全部替换为zhai14.com

:s/domain/zhai14\.com/g

替换的是进入末行模式之前光标所在的行。



3.2 将文件中所有domain全部替换为zhai14.com

:g/domain/s//zhai14\.com/g

这个命令有点长,可以这么理解:

个人理解:先在global及整个文件下查找domain,然后针对每一行进行替换

其实命令写详细点如下,只是后面domain查找词跟前面相同,可以省略。

:g/domain/s/domain/zhai14\.com/g

在指定行的情况下,也可以用如下命令:

:n1,n2s/domain/zhai14/g   //将从n1行到n2行中所有domain均用zhai14替代 


4. 光标移动与翻页

Ctrl-B  //向上翻页
Ctrl-F  //向下翻页
2b或2B //光标向左移动两个词,中文一句话和一个标点符号各代表一个词
2w或2W //光标向右移动两个词,中文一句话和一个标点符号各代表一个词

记忆诀窍:B-back,回首,F-forward,向前,后面w的也可理解为forward,按照用户阅读习惯自左而右自上而下理解,back即为朝左和朝上,forward即为朝下和朝右。

命令不在多,重在记住并熟练。



  • 2019年08月08日 23:05文章创建
  • 2019年08月11日 11:51文章发布
上一篇:nginx location配置踩坑详细记录(2019-07-05 23:21:54)
我要评论
«-必填,限2-20个字符,中文/字母/字母数字组合
«-评论后,邮箱会收到激活链接,未激活邮箱的留言,将无法显示
评论列表
暂无评论,期待你的评论哦!
回到顶部