请详细总结vim编辑器的使用并完成以下练习题
VIM有三种模式,分别为标准模式、输入模式、末行模式
模式切换:
标准模式——输入模式:i
标准模式——末行模式::
末行模式、输入模式——标准模式:esc
末行模式——输入模式:esc之后按i键
光标移动:
h |
左 |
l |
右 |
j |
下 |
k |
上 |
w |
跳转至下一单词词首 |
2w |
跳转至往下两个单词的词首 |
b |
向前跳转至前一个词首 |
e |
向后跳转至下一个词首 |
2b |
跳转至前两个词首 |
2e |
跳转至下两个词首 |
0 |
绝对行首 |
^ |
非空白行首 |
$ |
行尾 |
( |
上一句 |
) |
下一句 |
{ |
上一段 |
} |
下一段 |
G |
最后一行 |
gg、1G |
第一行 |
5G |
跳转至第5行 |
退出:
q:在没有修改时退出编辑器
q!:不保存退出
w:保存
wq:保存退出
x:保存退出
wq!:强制保存退出
w
/path/to/file:另存为
ZZ:编辑模式下保存退出
编辑操作:
x |
删除光标所在处字符 |
5x |
删除光标所在处及向后共5个字符 |
d |
结合光标跳转字符实现范围删除,如d$、dw、de、db、d0 |
||
dd |
删除光标所在行 |
2dd |
删除2行 |
p |
在光标所在行下方粘贴 |
y |
结合光标跳转字符实现范围复制 |
5y |
从当前行向下复制5行 |
yy、Y |
复制当前行 |
c |
修改,结合光标跳转字符实现范围修改 |
cc |
删除光标所在行并进入编辑模式 |
v |
可视化模式,按字符选择 |
V |
可视化模式,按行选择 |
u |
撤销此前的操作 |
4u |
撤销最近的4次操作 |
ctrl+r |
撤销此前的撤销操作 |
ctrl+f |
向文件尾部翻一屏 |
ctrl+b |
向文件首部翻一屏 |
ctrl+d |
向文件尾部翻半屏 |
ctrl+u |
向文件首部翻半屏 |
|
|
末行模式:
1、 地址定界
#:第#行
#1,#2:从#1行至#2行
#1,+#2:从#1行再往后#2行
.:当前行
$:最后一行
%:全文,相当于1,$
/path1/,/path2/:从第一次被path1匹配到的行到第一次被path2匹配到的行
2、 保存选取内容
w /path/to/file 需配合地址定界功能使用
3、 读取文件内容
r /path/from/file
4、 查找
/key :从当前光标处向文件尾部查找
?key :从当前光标处向文件首部查找
查找过程中:
n:与查找方向相同
N:与查找方向相反
5、 替换
末行模式下s
s/要查找的内容/要替换为的内容/修饰符
要查找的内容:可使用正则表达式
要替换为的内容:不能使用正则表达式,但可以引用,可使用分组引用,也可以使用&引用
修饰符:i 忽略大小写
g 全局模式
多文件模式:
:next |
切换至下一个文件 |
:previous |
切换至上一个文件 |
:last |
切换至最后一个文件 |
:first |
切换至第一个文件 |
:wqall |
保存退出全部文件 |
:qall |
退出所有文件 |
:wall |
保存所有文件 |
|
|
vim -o a.txt b.txt |
水平分割 |
||
vim -O a.txt b.txt |
垂直分割 |
多窗口
ctrl+w,s |
水平分割文件窗口 |
ctrl+w,v |
垂直分割文件窗口 |
ctrl+w,方向键 |
窗口间切换 |
|
|
窗口属性定义(仅对当前vim进程有效):
:set nu |
显示行号 |
:set nonu |
取消显示行号 |
:set ai |
启动自动缩进功能 |
:set noai |
取消自动缩进功能 |
:set ic |
忽略大小写 |
:set noic |
取消忽略大小写 |
:set sm |
括号匹配 |
:set nosm |
取消括号匹配 |
:syntax on |
语法高亮开启 |
:syntax off |
语法高亮关闭 |
:set hisearch |
搜索高亮 |
:set nohlsearch |
关闭搜索高亮 |
也可修改以下文件
/etc/vimrc:全局配置
~/.vimrc:用户配置文件,有可能默认不存在,需要创建
一、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;
[root@centos6
tmp]# cp /etc/rc.d/rc.sysinit /tmp #复制文件至/tmp下
在vim末行模式下输入:
:%s@^[[:space:]]\+@#&@g
或:%s@^\([[:space:]]\+\)@#\1@g
二、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;
[root@centos6
tmp]# cp /boot/grub/grub.conf /tmp #复制文件至/tmp下
:%s@^[[:space:]]\+@@g
:%s@^[[:space:]]\{1,\}@@g
三、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符
s@^#[[:space:]]\+@@g #引用前面的模式
:%s@^#[[:space:]]\{1,\}@@g #分组模式
四、为/tmp/grub.conf文件中前三行的行首加#号;
:1,3s@^.*@#&@g #引用模式
:1,3s@^\(.*\)@#\1@g #分组模式
五、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;
:%s@\(enabled\|gpgcheck\)=0@&=1@g
六、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202
方法一:[root@promote
backup]# crontab -e 输入以下内容
* */4 * * * /bin/tar -P -Jcf /backup/etc-`date
+\%Y\%m\%d\%H\%M`.tar.xz /etc
方法二:[root@promote
crontabscript]# vim etcbackup
输入以下内容:
#!/bin/bash
tar -P -Jcf /backup/etc-`date +%Y%m%d%H%M`.tar.xz /etc
[root@promote backup]#chmod u+x /tmp/crontabscript/etcbackup
#增加执行权限
[root@promote backup]# crontab -e
输入以下内容:
* */4 * * * /tmp/crontabscript/etcbackup
七、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20150402
方法一:[root@promote
backup]# crontab -e 输入以下内容
0 0 * * 2,4,6 /bin/tar -P -Jcf /backup/messages_logs/messages-`date
+\%Y\%m\%d\%H\%M`.tar.xz /var/log/messages
方法二:打开vim编辑器,输入以下内容
#!/bin/bash
tar -P -Jcf /backup/messages_logs/messages-`date +%Y%m%d%H%M`.tar.xz
/var/log/messages
[root@promote backup]# crontab -e 输入以下内容
0 0 * * 2,4,6 /tmp/crontabscript/messagesbackup
八、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中
方法一:[root@promote
backup]# crontab -e 输入以下内容
* */2 * * * /bin/cat /proc/meminfo | /bin/grep -i “^s”
>>/stats/memory.txt && /bin/echo
`/bin/date`>>/stats/memory.txt
#把/proc/meminfo文件中的所有以S开头的信息和时间一起保存至/stats/memory.txt文件中
方法二:打开VIM编辑器,输入以下内容
#!/bin/bash
cat /proc/meminfo | grep -i “^s” >>/stats/memory.txt
&& echo `date`>>/stats/memory.txt
[root@promote backup]# crontab -e 输入以下内容
* */2 * * * /tmp/crontabscript/meminfobackup
九、工作日的工作时间内,每两小时执行一次echo “howdy”
* (9-17)/2 * * 1-5 /bin/echo “howdy”
脚本编程练习
十、创建目录/tmp/testdir-当前日期时间;
#!/bin/bash
# version 1
mkdir /tmp/testdir-`date +%Y-%m-%d-%H-%M`
#!/bin/bash
# version 2
i=`date +%Y%m%d%H%M`
if
[ -e testdir$i ];then
echo
“testdir$i is exists”
else
mkdir
./testdir$i
fi
十一、在此目录创建100个空文件:file1-file100
#!/bin/bash
#version 1
touch file{1..100}
#!/bin/bash
#version 2
for i in
{1..100};do
if [ -e file$i ];then
echo “file$i is
exists”
else touch ./file$i
fi
done
十二、显示/etc/passwd文件中位于第偶数行的用户的用户名;
方法一:
#!/bin/bash
sed ‘1~2d’
/etc/passwd | cut -d: -f1
方法二:
#!/bin/bash
sed -n ‘n;p’
/etc/passwd | cut -d : -f1
原创文章,作者:lixinkuan,如若转载,请注明出处:http://www.178linux.com/79482
评论列表(1条)
6,8,9题需要精确到分钟的哈,加油!!!