23.vim编辑器高效用法进阶
vim末行模式:
内建的命令行接口
(1)地址定界
:start_pos[,end_pos]
#:特定的第#行,例如5即第5行;
.:当前行;
$:最后一行;
#,#:指定行范围,左侧为起始行,右侧为结束行;
#,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量;例如:3,+7
.,$-1
1,$
%:全文
/pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行;
/first/,$
/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###
示例:
%s@\<t\([[:alpha:]]\+\)\>@T\1@g
%s@\<t([[:alpha:]]\+\>@&er@g
练习:
1.复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符;
%s@^[[:space:]]\+@@
2.复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件的每个以空白字符开头的行的行首加上#;
%s@^[[:space:]]\+[^[:space:]]@#&@g
3.为/tmp/grub2.cfg文件的前三行的行首加上#号;
4.将/etc/yum.repos.d/Centos-Base.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck=0替换为gpgcheck=1;
%s@\(enabled\|gpgcheck\)=0@\1=1@g
vim的多文件功能:
多文件:
vim FILE1 FILE2...
在文件间切换:
:next 下一个
:prev 上一个
:first 第一个
:last 最后一个
退出所有文件:
:wqall 保存所有文件并退出;
:wall
:qall
多窗口:
-o:水平分割窗口
-O:垂直分割窗口
在窗口间切换:Ctrl+w,ARROW
注意:单个文件也可以分割为多个窗口进行查看:
Ctrl+w,s:水平分割窗口
Ctrl+w,v:垂直分割窗口
定制vim的工作特性:
注意:在末行模式下的设定,仅对当前vim进程有效;
永久有效:
全局:/etc/vimrc
用户个人:~/.vimrc
1、行号
显示:set number,简写为set nu
取消显示:set nomber,set nonu
2、括号匹配高亮
匹配:set showmatch,set sm
取消:set nosm
3、自动缩进
启用:set al
禁用:set noal
4、高亮搜索
启用:set hlsearch
禁用:set nohlsearch
5、语法高亮
启用:syntax on
禁用:syntax off
6、忽略字符大小写
启用:set lc
禁用:set nolc
获取帮助:
:help
:help subject
课外作业:如何设置tab键缩进4个字符;
bash脚本编程之算术运算
+,-,*,/,**,%
算术运算格式:
(1)let VAR=算术运算表达式
(2)VAR=$[算术运算表达式]
(3)VAR=$((算术运算表达式))
(4)VAR=$(expr $ARG1 $OP $ARG2)
注意:乘法符号在有些场景中需要使用转义符;
练习:写一个脚本,完成如下功能:
添加三个用户;
求此三个用户的UID之和;