vim小小的总结
(本总结摘自马哥网络班22期课堂笔记)
vim是一款交互式的全屏编辑器,是vi的升级版,在vi上增强了很多,如:多级撤销,多窗口和多缓冲区,语法高亮,在线帮助等。
vim也是一种模式化的编辑器。分别是编辑模式也叫命令模式,输入模式,末行模式。其中使用vim打开文件后默认的是编辑模式。
三种模式之间的转换:
编辑模式--->输入模式 i:在光标处输入 a:在光标后输入 o:在光标的下方打开一个新行 I:在光标所在的行首输入 A:在光标所在的行尾输入 O:在光标的上方打开一个新行 输入模式--->编辑模式 ESC键 编辑模式--->末行模式 : 末行模式--->编辑模式 ESC键
打开文件:
vim [options] [file…]
+#:打开文件后,直接让光标处于第3行的行首
+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
关闭文件
ZZ:保持并退出 :q 退出(如果文件有改动此命令没法退出文件) :q! q强制退出,不保存此前的编辑操作 :wq 保存并退出 :x 保存并退出 :w /PATH/TO/SOMEFILE (保存至某文件)
光标跳转:
字符间跳转 h:左 j:下 k:上 l:右 #COMMAND:跳转#个数的字符 单纯间跳转 w:下一个单词的词首 e:当前或后一个单词的词尾 b:当前或前一个单词的词首 #COMMADN:跳转#个数的单词 行首行尾跳转 ^:跳转至行首的第一个非空白字符 0:跳转至行首 $:跳转至行尾 行间跳转 #G:跳转至由#指定的行 1G,gg:第一行 G:最后一行 句间跳转: ) ( 段间跳转 } {
vim的编辑命令:
字符编辑: x:删除光标所在处的字符 #x:删除光标所在处起始的#个字符 xp:交换光标所在处的字符与其后面的字符的位置 替换命令 r:替换光标所在处的字符 如:rCHAR 删除命令 d:删除命令,可结合光标跳转字符,实现范围删除 如:d$:删除光标处至行尾处的字符 dd:删除光标所在行 #dd:删除以光标所在行为起始行的共#行 粘贴命令 P:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方,否则,则粘贴至当前光标所在处的后方; p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方; 复制命令 y:复制,工作行为相似于d命令,可结合光标跳转字符,实现范围复制 如:y$,y^,y0,ye,yw yy:复制一整行 #yy:复制#行 改变命令(c) 编辑模式--->输入模式,实现删除操作,同样有c$,c^,c0,cb,ce,cw等 cc:删除光标所在的行,并转换为输出模式,同样有 #cc 其他编辑操作: 可视化模式 v:按字符选定 V:按行选定 可结合编辑命令使用:d,c,y 撤销操作 u:撤销此前的操作;还可以使用ctrl+r #u:撤销此前的#个操作 重复执行前一个编辑操作 .
VIM末行模式: 内建的命令行接口
1,地址定界 :start_pos[,end_pos] #:特定的第#行,例如5即第5行 .:当前行 $:最后一行 #,#:指定行范围,左侧为起始行,右侧为结束行 #,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量 %:全文 /pattern/:从光标所在处起始向文件尾部第一次被匹配到的行 /pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行 可同编辑命令一同使用,实现编辑操作 如d,y,c w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中、 r /PATH/FROM/SOMEFILE:将指定的文件中的文本读取并插入至指定位置。 2,查找 /PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串 ?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串 n:下一个,与命令方向相同 N:上一个,与命令方向相反 3,查找并替换 s:末行模式的命令; 使用格式:s/要查找的内容/替换为的内容/修饰符 要查找的内容:可使用正则表达式 替换为的内容:不能使用正则表达式,但可以引用 如果‘要查找的内容’部分在模式中使用分组符号:在‘替换为的内容’中使用后向引用 直接引用查找模式匹配到的全部文件,要使用&符号 修饰符: i:忽略大小写 g:全局替换,意味着一行中如果匹配到多次,则均替换 可把分隔符替换为其他非常用字符: 如:s@@@ s###
1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;
]# cp /etc/rc.d/rc.sysinit /tmp/grub ]#vim rc.sysinit : :%s@^[[:space:]]\+@#&@g :wq
2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;
]# cp /boot/grub/grub.conf /tmp ]#vim grub.conf : :%s@^[[:space:]]\+@@g :wq
3、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符
]#vim /tmp/rc.sysinit :%s@^#[[:space:]]\+@@g :wq
4、为/tmp/grub.conf文件中前三行的行首加#号;
]#vim /tmp/grub.conf :1,3s@.*@#&@g :wq
5、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;
]#vim /etc/yum.repos.d/CentOS-Media.repo :%s@\(enabled\|gpgcheck\)=0@\1=1@g :wq
6、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202
0 */4 * * * /bin/cp -R /etc/ /backup/etc-$(date +%Y%m%d%H%M)
7、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20150402
0 0 * * 2,4,6 /bin/cp /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d)
8、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中
0 */2 * * * /bin/grep -E "^S" /proc/meminfo >> /stats/memory.txt
9、工作日的工作时间内,每两小时执行一次echo "howdy"
0 */2 * * 1,2,3,4,5 /bin/echo "howdy"
脚本编程练习
10、创建目录/tmp/testdir-当前日期时间;
11、在此目录创建100个空文件:file1-file100
12、显示/etc/passwd文件中位于第偶数行的用户的用户名;
13、创建10用户user10-user19;密码同用户名;
14、在/tmp/创建10个空文件file10-file19;
15、把file10的属主和属组改为user10,依次类推。
#!/bin/bash # #创建目录/tmp/testdir-当前日期时间 filename=$(date +%Y%m%d%H%M%S) mkdir /tmp/testdir-${filename} #在此目录创建100个空文件:file1-file100,此处没有判断系统有无此文件 for i in {1..100};do touch /tmp/testdir-${filename}/file$i done #显示/etc/passwd文件中位于第偶数行的用户的用户名 sed -n 'n;p' /etc/passwd | cut -d: -f 1 #创建10用户user10-user19;密码同用户名 for i in {10..19};do useradd user$i echo user$i | passwd --stdin user$i done #在/tmp/创建10个空文件file10-file19 #把file10的属主和属组改为user10,依次类推 for i in {10..19};do touch /tmp/file$i chown user$i.user$i /tmp/file$i done
原创文章,作者:N22-成都-stephen,如若转载,请注明出处:http://www.178linux.com/60076
评论列表(1条)
为增加脚本的健壮性,可以在添加用户或者创建目录前做以判断,写代码还是要严谨一些。