第六周总结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

(3)
ZhengBinZhengBin
上一篇 2017-09-02
下一篇 2017-09-02

相关推荐

  • LAMP部署之NFS共享网络存储

    LAMP部署之NFS共享网络存储 架构图: 说明:     当一个网站的访问量上来之后,一台WebServer服务器无法应付那么高的并发,需要横向扩展Web服务器数量,     当我们访问网页,向Web服务器请求资源时,资源主要分为静态资源和动态资源(程序处理),  &…

    Linux干货 2016-06-20
  • 笔记整理:权限管理1-基础权限管理&默认权限

    权限管理: 权限的分配根据owner和group来进行分配的   对于文件,各个权限的意义: r:可以使用工具查看内容 w:往里写 x:运行,提请内核发起一个进程 对于目录,各个权限的意义: r:用ls 查看目录列表   w:可以创建或删除目录中的文件   x:可以使用ls -l查看文件列表,也可cd进去   管理命令…

    Linux干货 2016-08-05
  • 马哥教育网络21期+第十一周练习博客(下)

    马哥教育网络21期+第十一周练习博客(下) 3、描述DNS查询过程以及DNS服务器类别。 DNS:Domain Name Service 通俗的称为地址解析,使用TCP和UDP的53端口,是属于应用层的协议; DNS查询有2种方式:     递归查询:至发送一次请求,就能找到最终的结果的查…

    Linux干货 2016-09-26
  • 正则表达式之初体验

    学习正则表达式之前,看过这复杂的表达式,犹如天书,无比高大上;怀着战战兢兢的心情,开始了学习之旅: 一、  正则表达式:Global search REgular expression and Print out the line. 我的理解是:通过一大堆符号组成的公式逐行查找文本中匹配的字符串并显示出来  分类: &…

    Linux干货 2015-03-31
  • Linux发展及OS基础

    开源协定:          GPL  LGPL,Apache,BSD          BSD:      …

    Linux干货 2016-08-08
  • 三次握手和四次挥手

    TCP三次握手:                              &n…

    2017-09-02

评论列表(1条)

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

    再接再励 。