; 第六周总结VIM编辑器的使用并完成练习题 | Linux运维部落

第六周总结VIM编辑器的使用并完成练习题

第六周 总结VIM编辑器的使用并完成练习题

1. VIM是什么?

VIM(Vi IMproved)是从vi发展出来的一个文本编辑器。


2.为什么要使用VIM?

VIM有代码补完,编译以及错误跳转等方便编程的功能,在程序员中广泛使用。对于大多数的用户来说,VIM有着比较陡峭的学习曲线,但是一旦掌握一些基本操作之后,能大幅度提高编辑效率。VIM是类Unix系统用户最喜欢的文本编辑器之一。


3.如何使用VIM?

介于VIM命令实在是太多及本人的时间有限,接下来就VIM的使用做尽可能的详细介绍。读者如想了解更多关于VIM的使用,可以在VIM中输入不带参数的“help”来阅读帮助文档。请读者跟着下面的VIM使用介绍,动手实践操作,切勿只是阅读!

3.1 用VIM打开和退出文本文件
3.1.1 使用VIM打开文本文件
在shell命令行模式中输入 vim FILENAME 即可用vim打开要编辑的文本文件。

3.1.2 退出VIM
退出VIM有多种方式:
a.保存退出 :wq b.不保存强制退出 :q! c.未编辑文本退出 :q

3.2 VIM模式 
VIM大致可分为三种模式:普通模式,编辑模式和命令模式。

3.2.1 三种模式之间的切换 
i键,在光标所在位置前插入,等待输入。
a键,在光标所在位置之后添加,等待输入。
o键,在光标所在行的下方添加新行,等待输入。
I键,在光标所在行的行首,等待输入。
A键,在光标所在行的行尾,等待输入。
O键,在光标所在行的上方添加新行,等待输入。
注意: 
a,用vim命令编辑文本时,默认处在普通模式中,按i,o,a任意一个按键可进入编辑模式。当编辑完成后,可按ESC键返回普通模式。
b,在普通模式下,按冒号“:”键可进入命令模式。同样,在命令模式下返回普通模式按ESC键。
c,在编辑模式下想进入命令模式必须先返回普通模式。

3.2.2 在普通模式下移动光标
a,字符间移动光标 
h键,光标向左移动 
j键,光标向下移动 
k键,光标向上移动 
l键,光标向右移动

b,单词间移动光标
w键,光标向行尾移动到下一个单词的词首。
e键,光标向行尾移动到当前或下一个单词的词尾。
b键,光标向行首移动到当前或上一个单词的词首。
注意:以上按键可以结合数字键一起使用。例如:2w表示光标向行尾移动两个单词。

c,行首行尾移动光标
^键,光标移动到行首的第一个非空白字符。
数字0,光标移动到行首。
$键,光标移动到行尾。

d,文本行键移动光标
1G或gg,光标移动到文本行的第一行。 
G,光标移动到文本行的末行。
注意:数字+G键,光标移动至指定数字的行。

e,句间移动光标
( 左括号,光标移动到上一句句首。
) 右括号,光标移动到下一句句首。
注意:数字键+括号键表示光标移动到数字键指定的句子的句首。例如:6(,表示光标向上移动6句。 f,段落间移动光标
{ 左花括号,光标移动到上一个段落段首。
} 右花括号,光标移动到下一个段落段首。
注意:数字键+花括号键表示光标移动到数字键指定的段落的段首。例如:3{,表示光标向上移动3个段落。

g,屏幕间移动光标
ctrl+d键,光标向下移动半屏。
ctrl+u键,光标向上移动半屏。
ctrl+f键,光标向下移动一屏。
ctrl+b键,光标向上移动一屏。

3.3 VIM的编辑命令
在编辑(普通)模式下编辑命令的格式是:operator [number] motion
operator,操作符,表示要做的事情,比如d代表删除。 
[number],可以附加的数字,代表动作的重复的次数。
motion,动作,代表在所操作的文本上的移动,例如w代表单词,$代表行末。

a,删除字符命令
x键:删除光标所在位置的单个字符。
[number]+x键,删除光标所在位置向后[number]个字符。
xp组合键,交换光标所在位置的字符与其后面的字符。

b,替换字符命令
r键,替换光标所在位置的字符,按r键后输入要替换的字符。

c,删除字符命令
d键,结合[number]和motion实现范围删除。
d$组合键,删除当前光标位置至行尾的所有字符。
d^组合键,删除当前光标位置至行首的所有字符。
dw组合键,删除当前光标位置至下一个单词词首之间的所有字符。
de组合键,删除当前光标位置至单词词尾的所有字符。
db组合键,删除当前光标位置至单词词首的所有字符。
dd组合键,删除当前光标所在的行。
注意:d2w组合键或2dw组合键,删除当前光标位置至下二个单词词首之间的所有字符。其他上述组合键亦可与[number]一起使用。

d,黏贴字符命令
小写p键,如果缓冲区的内容是整行,则黏贴在当前光标所在行的下方。如果不是整行,则黏贴在当前光标所在位置的后方。
大写P键,如果缓冲区的内容是整行,则黏贴在当前光标所在行的上方。如果不是整行,则黏贴在当前光标所在位置的前方。

e,复制字符命令
y键,结合[number]和motion实现范围复制。
y$组合键,复制当前光标位置至行尾的所有字符。
y^组合键,复制当前光标位置至行首的所有字符。
yw组合键,复制当前光标位置至下一个单词词首之间的所有字符。
ye组合键,复制当前光标位置至单词词尾的所有字符。
yb组合键,复制当前光标位置至单词词首的所有字符。
yd组合键,复制当前光标所在的行。
注意:y2w组合键或2yw组合键,复制当前光标位置至下二个单词词首之间的所有字符。其他上述组合键亦可与[number]一起使用。

f,改变字符命令 c键,实现删除操作并转换成输入模式,结合[number]和motion实现范围改变。
c$组合键,改变当前光标位置至行尾的所有字符,并进入输入模式。
c^组合键,改变光标位置至行首的所有字符,并进入输入模式。
cw组合键,改变当前光标位置至下一个单词词首之间的所有字符,并进入输入模式。
ce组合键,改变当前光标位置至单词词尾的所有字符,并进入输入模式。
cb组合键,改变当前光标位置至单词词首的所有字符,并进入输入模式。
cd组合键,改变当前光标所在的行,并进入输入模式。
注意:c2w组合键或2cw组合键,改变当前光标位置至下二个单词词首之间的所有字符,并进入输入模式。其他上述组合键亦可与[number]一起使用。

g,可视化编辑
小写v键,按字符选定范围,结合c,y,d键执行想要的编辑操作。 大写V键,按行选定范围,结合c,y,d键执行想要的编辑操作。

h,撤消操作
小写u键,撤消上一次的编辑操作,可与[number]结合使用。
大写U键,撤消光标所在行的所有编辑操作。
ctrl+r键,撤消此前撤消的编辑操作,也就是可以重新执行被撤消的编辑操作。
.点号键,重复执行前一次编辑操作。

i,配对各位括号 [],{},()
把光标移动到任何一个括号上,然后按%百分号键,即可找到配对的括号。在程序调试时,这个功能用来查找不配对的括号非常有用。

3.4 命令模式
3.4.1在普通模式中输入:冒号可进入命令模式,可执行保存,读入,合并文件等功能。 
a,输入:w FILENAME,可将当前VIM中正在编辑的文件保存到名为FILENAME的文件中。 
b,先输入v或V键选定范围,然后输入:w FILENAME,可将选定范围的字符保存到FILENAME中。 
c,输入:r FILENAME,可提取FILENAME并将其插入到当前光标所在位置的后面。
d,输入:r !COMMAND,可读取COMMAND命令的输出结果并将其放置到当前光标所在位置的后面。

3.4.2 在命令模式下查找字符串 
/键,加上PATTERN可以用以在当前文本中,从当前光标所在位置向文件尾部查找该PATTERN。查找到第一个匹配字符串后按小写n键,可查找下一个。
?键,加上PATTERN可以用以在当前文本中,从当前光标所在位置向文件首部查找该PATTERN。查找到第一个匹配字符串后按大写N键,可查找上一个。

3.4.3 在命令模式下查找并替换 
输入:s/OLD/NEW 表示在一行内替换头一个字符串OLD为新字符串NEW。
输入:s/OLD/NEW/g 表示在一行内替换所有个字符串OLD为新字符串NEW。
输入[number],[number]:s/OLD/NEW/g 表示在第一个[number]行至第二个[number]行之间替换所有的字符串OLD为新字符串NEW。
输入:%s/OLD/NEW/g 表示在全文中替换所有的字符串OLD为新字符串NEW。
输入:%s/OLD/NEW/gc 表示在全文中替换所有的字符串OLD为新字符串NEW时询问用户确认是否替换。
注意1:[number],[number]是指定行范围。
例如:
2,4 表示从第2行到第4行之间。
. 表示当前行。
$ 表示最后一行。 
5,$ 表示从第5行至最后一行之间。 % 表示全文。 注意2:s///g中间三个斜杠为分隔符可用@@@或###替换。

3.4.4 在VIM内部执行外部命令
输入:!COMMAND 即可执行外部命令,按键结束命令,回到VIM。
例如:
!ls 列举出当前目录的内容
!rm FILENAME 删除名为FILENAME的文件


第六周练习题

1,复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#。

%s@^([[:space:]]+)@#\1@

2,复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中行首的空白字符。

%s@^[[:space:]]+@@g

3,删除/tmp/rc.sysinit文件中以#开头,且后面跟了至少一个空白字符的行行的#和空白字符。

%s@^#[[:space:]]+@@g

4,为/tmp/grub.conf文件中前三行的行首加#号。

1,3s@^@#@g

5,将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1。

%s@(enabled\|gpgcheck)=0@\1=1@g

6,每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202。

[root@www ~]# crontab -e
0 */4 * * * root cp -r /etc/ /backup/etc-$(date +%Y%m%d%H%M)

7,每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20150402。

[root@www ~]# crontab -e
0 * * * Tue,Tur,Sat root cp /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d)

8,每天每两个小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中。

[root@www ~]# crontab -e
0 */2 * * * root grep “^S” /proc/meminfo >> /stats/memory.txt

9,工作日的工作时间内,没两小时执行一次echo “howdy”。

[root@www ~]# crontab -e
0 9-18/2 * * 1-5 root echo “howdy”

脚本编程练习

10,创建目录/tmp/testdir-当前日期时间。

#!/bin/bash
mkdir /tmp/testdir-$(date +%Y%m%d%H%M%S)
[root@www scripts]# bash -x mkdir2.sh
++ date +%Y%m%d%H%M%S
+ mkdir /tmp/testdir-20170902155548

11,在此目录中创建100个空文件:file1-file100。

#!/bin/bash
for num in `seq 1 100`; do
    touch /tmp/testdir-20170902155548/file$num
done

12,显示/etc/passwd文件中位于第偶数行的用户的用户名。

#!/bin/bash

sed '1~2d' /etc/passwd | cut -d : -f 1
[root@www scripts]# bash -x even.sh
+ cut -d : -f 1
+ sed 1~2d /etc/passwd
bin
adm
sync
halt
uucp
games
ftp
dbus
abrt
ntp
postfix
tcpdump
archlinux
rpcuser
apache
redhat
ubuntu
slackware
gentoo
user1
chrooter
bash
basher

原创文章,作者:ZhengBin,如若转载,请注明出处:http://www.178linux.com/85975

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论列表(1条)

  • 马哥教育
    马哥教育 2017-10-10 13:10

    再接再励 。

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班