7 vim编辑及文件查找
vim编辑器
文本:纯文本,ASCII text;Unlcode(编码机制)
文本编辑种类:
行编辑器:sed
全屏编辑器:nano,vi
vi:VIsual Interface
vim:vi IMproved (vi的增强版)
vim:模式化的编辑器
基本模式:
编辑模式,命令模式
输入模式(插入模式)
末行模式:
内置的命令行接口
打开文件:
vim [options] [file ..]
+#:打开文件后,直接让光标处于第#行的行首
+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
+:表示文件末端
模式转换:
编辑模式:默认模式
编辑模式 --> 输入模式
i:install,在光标所在处输入
a:append,在光标所在处后方输入
o:在光标所在处下方打开一个新行;
I:在光标所在行的行首输入
A:在光标所在行的行尾输入
O:在光标所在处的上方打开一个新行
从输入模式 --> 编辑模式
Esc
编辑模式 --> 末行模式
:
末行模式 --> 编辑模式
Esc
关闭文件:
ZZ:在编辑模式下,保存并退出
末行模式下:
:q 退出
:q!:强制退出,不保存此前的编辑
:wq 保存并退出
:x 保存并退出
:w /PATH/TO/SOMEFILE
光标跳转:
字符间跳转
h:向左
j:向下
k:向上
l:向右
#command:跳转由#指定的个数字符
单词间跳转
w:下一个单词的词首
e:当前或后一个单词的词尾
b:当前或前一个单词的词首
#command:跳转由#指定的个数的单词
行首行尾跳转
^:跳转至行首的第一个非空白字符
0:跳转至行首(空白字符可以,但是tab键的空白不可以)
$:跳转至行尾
行间跳转
#G:跳转至由#指定的行
1G,gg:跳转至第一行
G:跳转至最后一行
句间跳转
)
(
段间跳转
}
{
翻屏操作:
Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
Enter:按行向后翻
vim的编辑命令:
字符编辑
x:删除光标所在处的字符
#x:删除光标所在处起始的#个字符
xp:交换光标所在处字符与其后面的字符的位置
替换命令:(replace)
r :替换光标所在处的字符,按r后,需要后面要跟一个要替换成的字符
删除命令
d:删除命令,可结合光标跳转字符,实现范围删除
d$
d^
dw
de
db
#d command
dd:删除光标所在的一整行
#dd:删除光标所在处的行起始的共#行
粘贴命令(p,put,paste)
P:大写P,缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方,否则,则粘贴至当前光标所在处的前方
p:小写p,缓冲区的内容如果为整行,则粘贴在当前光标所在行的下方,否则,则粘贴至当前光标所在处的后方
复制命令(yank,y):
y:表示复制,工作行为相似于d命令
y$
y^
y0
ye
yw
yb
#command
yy:复制一整行
#yy:表示复制#行
改变命令(change,c):
编辑模式 --> 输入模式,实现删除操作:
c$
c^
c0
cb
ce
cw
#command
cc:删除光标所在的行,并转换为输入模式
#cc:
其他编辑操作:
可视化模式:
v:按字符选定
V:按行选定
结合编辑命令:d,c,y,p
撤销操作(undo):
u:撤销此前的操作
#u:撤销此前的#个操作
撤销此前的撤销:
Ctrl+r
重复执行前一个编辑操作
.
vim自带的练习教程:vimtutor
vim末行模式:
内建的命令行接口
(1)地址定界
:start_pos[,end_pos]
#:特定的第#行,例如5即第5行
.:当前行
$:最后一行
#,#:指定行范围,左侧为起始行,右侧为结束行
#,+#:指定:行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量;例如3,+7
%:全文
/pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行
/first/,$
/pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行
可同编辑命令一同使用,实现编辑操作:
d
y
c
w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中
r /PATH/FORM/SOMEFILE:将指定的文件中的文本读取并插入至指定位置
(2)查找
/PATTERN:从当前光标所在处向文件尾部能够被当前模式匹配到的所有字符串
?PATTERN:从当前光标所在处向文件首部能够被当前模式匹配到的所有字符串
n:下一个,与命令方向相同
N:上一个,与命令方向相反
(3)查找并替换
s:末行模式的命令;使用格式:
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用正则表达式
替换为的内容:不能使用正则表达式,但可以引用
如果“要查找的内容“部分在模式中使用分组符号:在"替换为的内容"中使用后向引用
直接引用查找模式匹配到的全部文本,要使用&符号
修饰符:
i:忽略大小写
g:全局替换,意味着一行中如果匹配到多次,则均替换
可把分隔符替换为其它非常用字符
s@@@
s###
示例:
%s@\<t\([[:alpha:]]\+\)\>@T\1@g
%s@\<r[[: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:]]\+@#&
3.为/tmp/grub2.cfg文件中的前三行的行首加上#号
:1,3s@^@#&
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
注意:单个文件也可以分割为多个窗口进行查看
Ctrl+w,s:水平分割窗口 逗号为松开
Ctrlw,v:垂直分隔窗口 逗号为松开
定制vim的工作特性:
注意:在末行模式下的设定,仅对当前vim进程有效
永久有效:
全局:/etc/vimrc
用户个人:./.vimrc
1、行号
显示:set number,简写为 set nu
取消显示:set nonumber 简写:set nonu
2、括号匹配高亮
匹配:set showmatch,set sm
取消:set nosm
3、自动缩进
启用:set ai
禁用:set noai
4、高亮搜索
启用:set hlsearch
禁用:set nohisearch
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之和
#!/bin/bash
useradd test1
useradd test2
useradd test3
a=`id -u test1`
b=`id -u test2`
c=`id -u test3`
echo $(($a+$b+$c))