linux《vim使用详解与基础shell脚本演示》-阿里云开发者社区

开发者社区> 开发与运维> 正文

linux《vim使用详解与基础shell脚本演示》

简介: vim基本用法,基础shell编写

1、总结vim命令行模式常见快捷方式,以及vim查找,替换的方法

vi:Visual Interface 文本编辑器
vim:Vi Improved 增强版文本编辑器

模式 进入说明
命令模式 打开文件的第一个模式,按esc可从其他模式返回命令模式
插入模式 在命令模式下按i,I,a,A,o,O键都可以进入插入模式,esc返回命令
扩展命令模式 在命令模式下按":"即可打开扩展命令模式
可视化模式 命令模式下,按v进入字符模式,V进入行模式,ctrl+v进入块模式
多文件模式 通过vim file1 file2 file3 ...可进入多个文件模式

命令模式常用快捷键
字符间跳转:
上下左右方向键:上下左右移
按h:光标左移
按l:光标右移
按j:光标下移
按k:光标上移
先按数再按[hljk]:向指定的方向跳转指定数个

单词间跳转:
w:下个单词的词首
e:当前或下个单词的词尾
b:当前或前一个单词的词首
先按数在按[web]:向指定的方向跳转指定数个单词

当前页跳转:
H:页首 M:页中间行 L:页底
zt:将光标所在当前行移到屏幕顶端
zz:将光标所在当前行移到屏幕中间
zb:将光标所在当前行移到屏幕底端

行首行尾跳转:
0:跳转到行首
^:跳转到行首的第一个非空白字符
$:跳转到行尾

行间移动:
1G,gg:跳转到第一行
先按数再按G:跳转到指定数行
G:跳转到最后一行

句间移动:
(:上一句
):下一句

段落间移动:
{:上一段
}:下一段

翻屏操作
Ctrl+u:向文件首部翻半屏
Ctrl+d:向文件尾部翻半屏
Ctrl+b:向文件首部翻一屏
Ctrl+f:向文件尾部翻一屏

字符编辑:
x: 删除光标处的字符
nx: 删除光标处起始的n个字符,n为数
xp: 交换光标所在处的字符及其后面字符的位置,p粘贴
~:转换大小写
J:删除当前行后的换行符

替换
r: 替换光标所在处的字符
R:切换成REPLACE模式

删除命令:
d: 删除命令,可结合光标跳转字符,实现范围删除
d$: 删除到行尾
d^:删除到非空行首
d0:删除到行首
dw:删除到下个单词词首
de:删除到这个单词词尾或下个单词词尾
db:删除到这个单词词首或上个单词词首
dd: 删除光标所在的行

dd:删除#行

复制命令:
y: 复制,行为相似于d命令
y$:复制到行尾
y0:复制到行首
y^:复制到非空行首
ye:复制到这个单词或下个单词词尾
yw:复制到下个单词词首
yb:复制到这单词或上个单词词首

粘贴命令:
p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴
至当前光标所在处的后面
P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴
至当前光标所在处的前面

查找
/PATTERN:从当前光标所在处向文件尾部查找
?PATTERN:从当前光标所在处向文件首部查找
n:与命令同方向
N:与命令反方向

撤销更改
u撤销最近的更改
nu撤销之前n次更改
U 撤消光标落在这行后所有此行的更改
按Ctrl - r重做最后的“撤消”更改
. 重复前一个操作
n.重复前一个操作n次

插入模式:可正常编辑

扩展命令模式

地址定界
:n,m 申明范围,从n行开始到m行的范围内
$ 最后一行 ,$-1 倒数第二行
% 全文,等价于 1,$
:/pat1/,/pat2/ 从第一次被pat1模式匹配到的位置开始,到pat2匹配到的位置结束
后接编辑命令:d(删除),y(复制)
w file:将范围内内容另存至file文件中
r file:在/pat2/后插入指定文件中的所有内容

查找并替换
s: 在扩展模式下完成查找替换操作
格式:s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用1, 2, ...等后向引用符号;还可
以使用“&”引用前面查找时查找到的整个内容
修饰符:
i: 忽略大小写
g: 全局替换;默认情况下,每一行只替换第一次出现
gc:全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符,例如
s@/etc@/var@g
s#/boot#/#i

可视化模式

允许选择的文本块
v 面向字符
V 面向行
ctrl-v 面向块
可视化键可用于与移动键结合使用:
w ) } 箭头等
突出显示的文字可被删除,复制,变更,过滤,搜索,替换等

多文件模式
vim FILE1 FILE2 FILE3 ...
:next 下一个
:prev 前一个
:first 第一个
:last 最后一个
:wall 保存所有
:qall 退出所有
:wqall
1)复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
:%s@/etc/s.*fig/init@/var/log@
2)删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号
:%s@^# +.*$@@

2、总结脚本中运算符、逻辑运算以及用法

运算符有:
+:加
-:减
*:乘
/:除
%:取余

逻辑运算有:
&:与-两边为真,结果为真,有假为假
|:或-有真为真,两边为假,结果为假
!:非-取反
短路运算
短路与:&&
第一个为0,结果必定为0
第一个为1,第二个必须要参与运算
短路或:||
第一个为1,结果必定为1
第一个为0,第二个必须要参与运算
异或
^:异或的两个值,相同为假,不同为真

1)编写脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和
image

2)编写脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和
image

3、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到 /root/etcYYYY-mm-dd中

image

4、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统

image

5、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值

image

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章