第三步:了解vim及vim的基础使用

vim 官方网站:https://www.vim.org/

什么是vi

首先,我们需要了解以下vi到底是什么东西?为什么要使用vi呢?

  • 所有的 UNIX-like 系统都会内置vi文本编辑器,但是其它软件就不一定了。
  • 众多软件的编辑接口都会主动调用vi
  • vim具有程序编辑的能力,可以主动地以字体颜色辨别语法的正确性、方便程序设计
  • 程序简单,编辑速度相当地快速

上面,我们提到了vi、vim,这两个有什么区别呢?

通俗一点来说,vim是vi的升级版。除了vi拥有的功能外,它还可以用颜色或者下划线的方式来显示一些特殊的信息。还有一点,涉及到shell脚本程序,vim会根据文件的或判断文件内容自动调用该程序的语法判断样式,最终再以颜色来显示。这一点广泛应用于Linux中语法问题的检查

可以说,vi就是一个文本编辑器,而vim则是程序编辑器

vi的使用

image.png
  • 一般命令模式(command mode)
    以 vi 打开一个文件就直接进入一般命令模式了。在这个模式中,可以使用【上下左右】按键来移动光标,可以使用【删除、复制、粘贴】等操作来处理文件内容
  • 编辑模式(insert mode)
    在一般模式下可以进行删除、复制、粘贴等操作,却无法进行编辑,此时就需要按【i、I、o、O、a、A、r、R】任意一个字母进入编辑模式,此时左下方会出现【INSERT】或【REPLACE】字样,若想回到一般命令模式,按下【ESC】即可退出编辑模式
  • 命令行模式( command-line mode)
    在一般命令模式下,输入【:/ ?】三个中任何一个按钮,就可以将光标移动至最下面一行。在该模式当中,提供了【查询数据】的操作。通常在该模式下我们会进行读取、保存、批量替换字符、退出vi以及显示行号等操作

vi/vim命令

进入vi编辑器命令

命令 作用
vi filename 打开或者新建文件,并将光标置于第一行首
vi +n filename 打开文件,并将光标置于第n行首
vi + filename 打开文件,并将光标置于最后一行首
vi +/pattern filename 打开文件,并将光标置于第一个与pattern相匹配的行行首
vi -r filename 在上次正编辑时发生系统崩溃,恢复filename
vi filename......filename 打开多个文件,进行依次编译

移动光标的命令

命令 作用
[ctrl] + [f] 屏幕[向下]移动一页,相当于[Page Down]
[ctrl] + [b] 屏幕[向上]移动一页,相当于[Page Up]
[ctrl] + [d] 屏幕[向下]移动半页
[ctrl] + [u] 屏幕[向上]移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n 按下数字再按下,光标会移动到这一行的第n个字符
数字0或功能键[Home] 移动到这一行的最前面字符处
$或功能键[End] 移动到这一行的最后面字符
H (High)光标移动到这个屏幕最上面的一行的第一个字符处
M (Middle)光标移动到这个屏幕中央的一行的第一个字符处
L (Low)光标移动到这个屏幕最下面的一行的第一个字符处
G 移动到这个文件的最后一行
nG n为数字,移动到这个文件的第n行。可配合set nu使用
gg 移动到这个文件的第一行,相当于1G
n n为数字,光标向下移动n行

查找与替换命令

命令 作用
/test 向光标之下寻找一个名称为 test 的字符串
?test 向光标之上寻找一个字符串名称为word的字符串
n 【重复前一个查找的操作】 如:前面执行/test向下查找test字符串,按下n会查找下一个名称为test的字符串
N 【反向进行】 如:前面执行/test后,按下N会向上查找名称为test的字符串

使用 /test 配合n和N同时使用,可以重复查找关键词
:n1,n2s/word1/word2/g | 在第n1行与n2行之间寻找word1字符串,并将该字符串替换为word2
:1,s/word1/word2/gc | 从第一行到最后一行寻找word1字符串,并将该字符串换为word2,且在替换前显示提示字符给用户确认是否需要替换

删除复制与粘贴

命令 作用
x/X x为向后删除一个字符(相当于del),X为向前删除一个字符(相当于backspace)
nx 连续向后删除n个字符
dd 删除(带复制)光标所在的那一整行
ndd 删除光标所在的向下n行
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除光标所在处,到该行的最后一个字符
d0 删除光标所在处,到该行的最前面一个字符
yy 复制光标所在的那一行
nyy 复制光标所在的向下n行
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行末的所有数据
p或P p为将已复制的数据在光标下一行粘贴,P则为将已复制的数据粘贴在光标上一行
J 将光标所在行与下一行数据结合成一行
c 重复删除多个数据,例如向下删除10行,[10cj]
u 恢复前一个操作
[Ctrl] + r 重做上一个操作

退出vi编辑器命令

命令 作用
:q 退出,在文件内容没有被改变时使用
:q! 强制退出不保存,在改变文件后不想保存时使用
:w [filename] 相当于[另存为],将编辑的数据保存成一个新的文件
:r [filename] 在编辑的数据中,读入另一个文件的数据,即将[filename]文件内容加到光标所在行的后面
:n1,n2 w [filename] 将n1到n2的内容保存为 filename 文件
:wq 对vi编辑器中的文件进行保存并退出vi编辑器
:wq! 强制退出保存在对只读文件编写时使用。注意,编辑只读文件必须使用

vim环境的修改
:noh | 取消高亮
:set nu | 显示行号
:set nonu | 取消行号

案例练习

1. 请在 /tmp 这个目录下建立一个名为 vitest 的目录;

2. 进入 vitest 这个目录当中

3. 将/etc/man_db.conf复制到本目录下(或在线获取)


4. 使用vi打开本目录下的 man_db.conf 文件,在 vi 中设置行号,移动到第43行,向右移动59个字符,请问你看到小括号内是哪个文字?




image.png

5. 移动到第一行,并且向下查找一下【gzip】这个字符串,请问它在第几行?



93行

image.png

6. 接着下来,要将29到41行之间的【小写man字符】改为【大写MAN字符】,并且一个一个是否要修改,如何执行命令?如果在确定过程中一直按【y】,结果会在最后一行出现改变了几个man?


13个man

image.png

7. 修改完后,后悔了,如何恢复?

8. 复制66到71这6行的内容,并且粘贴到最后一行之后


9. 113行到128行之间的开头为#符号的注释数据我不要了,如何删除

10. 将这个文件另存成一个 man.test.config 的文件名

11. 去到第25行,并且删除15个字符,结果出现的第一个单词是什么?


tree

12. 在第一行新增一行,该行内容输入【I am a student...】



13. 保存退出

你可能感兴趣的:(第三步:了解vim及vim的基础使用)