7.1 熟练使用vim

系列 - LINUX VIM和Shell基础
目录
摘要
本文主要介绍了如何使用 Vim 编辑器编辑文件,包含以下几个方面:
- 启动和退出 Vim:介绍了如何启动 Vim 编辑器,以及如何退出 Vim 编辑器。包括使用命令 :q、:w、:wq 和 :x。
- 查找:介绍了如何在 Vim 中进行查找,包括使用 / 进行查找,以及使用 n 和 N 键进行查找下一个或查找上一个。
- 替换:介绍了如何在 Vim 中进行替换,包括使用 s/word1/word2/g 命令进行替换。
- 编辑:介绍了如何在 Vim 中进行编辑,包括使用 x 删除当前字符、使用 dd 删除当前行、使用 dG 删除当前位置到最后一行等。
准备工作
1、在图形界面中,在 root 的家目录建立一个文本文件,文件名为 file.txt
其内容为:
abc
123
2、拷贝一份 sshd 的配置文件到家目录
cp /etc/ssh/sshd_config /root
任务
任务一:启动和退出
1、输入命令 vim
或 vim filename
可以打开 vim
vim /root/file.txt

2、vim有三个模式:
(1)一般模式 进入vim之后,首先进入的就是一般模式。进入一般模式后,vim等待编辑命令而不是文本输入。 进入一般模式后光标停在屏幕第一行首位,其余各行的行首均有一个“~”符号,表示该行为空行。
(2)编辑模式 在一般模式下按下 i 键可以进入编辑模式。在编辑模式下,用户输入的任何字符都被vim当作文件内容保存起来,并将其显示在屏幕上。在文本输入过程中(插入模式下),若想回到一般模式下,按“Esc”键即可。
(3)命令模式 在编辑模式下,用户按 : 键即可进入命令模式。此时vim会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为命令模式的提示符,等待用户输入命令。 多数文件管理命令都是在此模式下执行的。 命令执行完后,vim自动回到编辑模式。 若在命令模式下输入命令的过程中改变了主意,可在用退格键将输入的命令全部删除之后,再按一下退格键,即可使vim回到一般模式。
在命令模式下:
q
命令退出(quit)w
命令保存(write)wq
保存并退出x
等同于wq
(一定要注意是小写,大写的意思是加密保存)
任务二:查找
1、在一般模式下,输入 /
进行查找
例如查找 sshd_config 中的 HostKey
此时按 n
键进行“查找下一个”:
n 是 next 的缩写 按 N 可以“查找上一个”
任务三:替换
1、替换的命令是:
n1,n2 s/word1/word2/g
- n1与n2为数字。在第n1~n2行寻找word1这个字符串,并将该字符串取代为word2。
- 举例来说,在100~200行查找
myweb
并取代为MYWEB
则输入100,200 s/myweb/MYWEB/g
- 如果想要在整个文件所有行中进行替换,可以用
%
替代n1,n2
- 如果从第 n1 行到文件结尾,可以用
n1,$ s/word1/word2/g
- 举例来说,在100~200行查找
- s 是 substitute 的缩写,意为“替换”
- g 代表全局,如果不加g,每行只替换一次
任务四:编辑
x
删除当前字符dd
删除当前行(delete)2dd
删除2行5dd
删除5行
dG
删除当前位置到最后一行d1G
删除当前位置到第一行dgg
作用一样- 在其他场合也是,
1G
相当于gg
至少记住前两个!
作业
1、sshd 的配置文件中,有几个 want ?
不知道什么时候查找到结尾了?试试 set nu 命令
2、将 sshd 配置文件中的所有 you
替换为 @YOU@
综合练习
练习目的
- 将刚刚读过的内容做一遍巩固;
- 将没有讲的内容(不是特别常用)进行了解,万一记住一两个呢
- 在/tmp目录下建立一个名为mytest的目录,进入mytest目录当中。
- 将/etc/man_db.conf复制到上述目录下面,使用vim打开目录下的man_db.conf文件。
- 在vim中设定行号,移动到第58行,向右移动15个字符,请问你看到的该行前面15个字母组合是什么?
- 移动到第一行,并且向下查找“gzip”字符串,请问它在第几行?
- 将50~100行的man字符串改为大写MAN字符串,并且逐个询问是否需要修改,如何操作?如果在筛选过程中一直按“y”键,结果会在最后一行出现改变了多少个man的说明,请回答一共替换了多少个man。
- 修改完之后,突然反悔了,要全部复原,有哪些方法?
- 需要复制65~73这9行的内容,并且粘贴到最后一行之后。
- 删除23~28行的开头为#符号的批注数据,如何操作?
- 将这个文件另存成一个man.test.config的文件。
- 到第27行,并且删除8个字符,结果出现的第一个单词是什么?在第一行新增一行,该行内容输入“I am a student…”;然后存盘后离开。
参考步骤
- 输入mkdir /tmp/mytest; cd /tmp/mytest。
- 输入cp /etc/man_db.conf .; vim man_db.conf。
- 输入:set nu,然后你会在画面中看到左侧出现数字即为行号。先按下“5+8+G”组合键再按下“1+5+→”组合键,会看到:# on privileges.。
- 先执行1G或gg后,直接输入/gzip,应该是第93行。
- 直接下达“:50,100 s/man/MAN/gc”即可!若一直按“y”键最终会出现“在15行内置换26个字符串”的说明。
- 简单的方法可以一直按“u”键回复到原始状态;使用不储存离开:q!命令之后,再重新读取一次该文件也可以。
- 执行65G然后再执行9yy之后最后一行会出现“复制9行”之类的说明字样。按下“G”键到最后一行,再按下p,则会在最后一行之后粘贴上述9行内容。
- 执行23G→6dd就能删除6行,此时你会发现光标所在23行的地方变成MANPATH_ MAP开头了,批注的 # 符号那几行都被删除了。
- 执行:w man.test.config,你会发现最后一行出现“man.test.config”[New]..”的字样。
- 输入27G之后,再输入8x即可删除8个字符,出现MAP的字样;执行1G移到第一行,然后按下大写的O键,便新增一行且位于插入模式;开始输入I am a student…后,按下“Esc”键回到一般模式等待后续工作;最后输入:wq。