欢迎各位兄弟 发布技术文章
这里的技术是共享的
十五,查找并替换 (末行模式下)
:s 用法与 sed 一模一样
ADDR1,ADDR2S@PATTERN@string@gi
例子 :.,$-1s/he/HE/g (命令模式下)
1,$ 全文
%:表示全文 ( 简写方法 )
当前行至倒数第二行的所有的he 替换成 HE
练习将 ~/aaa.txt 中 ftp://instructor.example.com/pub替换为http://127.16.0.1/yum
%s/ftp:\/\/instructor\.example\.com\/pub/http:\/\/172.16.0.1\/yum/g
%s@ftp://instructor\.example\.com/pub@http://172.16.0.1/yum@g
十六,使用 vim 编辑器 打开多个文件
vim 可以跨文件复制 粘贴 (但是不是太方便)
vim FILE1 FILE2 FILE3
:next 切换至下一个文件
:prev 切换至前一个文件
:last 切换至最后一个文件
:first 切换至第一个文件
退出 默认情况下退出当前文件
:qa (或者:qall) 退出所有文件
[root@ebs-22618 ~]# vim testrc.sysinit testinttab
默认情况下 显示出来的只是第一个文件
:next (末行模式下,next 切换到下一个文件) (改变内容了 要先保存一下 :w!)
:prev (末行模式下,prev 切换回到上一个文件)
十七,分屏显示一个文件
[root@ebs-22618 ~]# vim testrc.sysinit
先同时按 ctrl+w ,再按s 就分屏显示了水平分割(拆分)窗口
ctrl+w,再向向下箭头,就到了下一个窗口
ctrl+w,再按上下左右箭头,就切换窗口了
先同时按 ctrl+w ,再按v 就分屏显示了垂直分割(拆分)窗口
:q 退出拆分窗口(还是当前窗口)
:qa 退出整个所有窗口
十八,分窗口编辑多个文件
vim -o File1 File2: 水平分割窗口
vim -O File1 File2: 垂直分割窗口
:q 退出当前窗口文件
:qa 退出整个所有窗口
十九,将当前文件的部分内容另存为另外一个文件
末行模式下使用w命令即可
:w 保存当前文件
:w /path/to/somefile 保存为另外一个文件
:ADDR1,ADDR2w /path/to/somefile 将某部分内容保存为另外一个文件 与sed命令类似
二十,将另个一个文件的内容填充在当前文件中
:r /path/to/somfile 在当前光标所在行的下方把 somfile的文件填充进来了 与sed命令类似
二十一,跟 shell 交互
:! COMMAND
二十二,高级话题
1,显示或取消显示行号 (命令模式下,好多特性都可以使用set命令) (末行模式)
:set number (set nu) 显示行号 (好多特性可以简写) (这在当前进程有效)
:set nonumber (:set nonu) 取消行号 前面加 no
(可以有配置文件的,可以永久有效)
2,显示忽略或区分字符大小写
:set ignorecase(set ic) 忽略大小写 (比如编辑模式下 搜索的时候 /aaa 会搜出aaa 和 Aaa AAA 等等吧 ) 大小写不敏感
:set noignorecase (set noic ) 忽略大小写 (这个用得不多) 大小写敏感
3,设置自动缩进
:set autoindent (:set ai) 设置自动缩进 (在写脚本的时候可能有用)
:set noautoindent (:set noai) 取消自动缩进
if [ $# -gt 0 ]; then
....
.....
fi
4搜索时(查找到的)(搜索的时候 /abc )文本会高亮显示
:set hlsearch (:set hls) (h表示high,l表示light) 这里表示 高亮显示
:set nohlsearch (:set nohls) 取消高亮显示
:set incsearch(:set is) 增量搜索,搜到结束后从头开始搜
:set noincsearch (:set nois) 取消增量搜索
5,语法高亮 比如 shell脚本
:syntax on 语法着色 (开启语法高亮功能)
:syntax off 语法不着色 (关闭语法高亮功能)
上面的设定只对 vim 的 当前进程有效
要想永久有效的话,就要用到vim的编辑配置文件
二十三,配置文件
1),全局的,对所有的用户生效
/etc/vimrc
[root@ebs-22618 ~]# vim /etc/vimrc
此时 用 vim 打开任意一个文件就看到行号了
2),全局的,对某个用户生效
~/.vimrc
vim ~/.vimrc (如果没有就新建)
[root@ebs-22618 ~]# vim ~/.vimrc
此时对当前用户就是生效的了
[root@ebs-22618 ~]# vimtutor vim导师,vim教程
按住 ctrl+Z退出时会有下面的提示信息
如果 变化不重要的话 直接 A 退出 然后
[root@ebs-22618 ~]# rm -f .aa.txt.swp
如果 不保存退出 (非法退出的话) 就会有 swp 文件
可以使用 rm -r aa.txt 进行恢复(把 .aa.txt.swp 恢复到 aa.txt) 再 rm -f .aa.txt.swp
[root@ebs-22618 ~]# ./addusers3.sh
[root@ebs-22618 ~]# userdel -r user10
[root@ebs-22618 ~]# userdel -r user3
[root@ebs-22618 ~]# ./addusers3.sh
写一个脚本,一下子删除user1..use10的10个用户
[root@ebs-22618 ~]# vim delusers.sh
[root@ebs-22618 ~]# chmod +x delusers.sh
[root@ebs-22618 ~]# userdel -r user5
userdel:/var/spool/mail/user5 并不属于 user5,所以不会删除
[root@ebs-22618 ~]# userdel -r user8
userdel:/var/spool/mail/user8 并不属于 user8,所以不会删除
[root@ebs-22618 ~]# ./delusers.sh
[root@ebs-22618 ~]# vim adminusers.sh
[root@ebs-22618 ~]# chmod +x adminusers.sh
[root@ebs-22618 ~]# bash -n adminusers.sh
[root@ebs-22618 ~]# ./adminusers.sh add
[root@ebs-22618 ~]# ./adminusers.sh del
可以 改成 [root@ebs-22618 ~]# ./adminusers.sh --add
[root@ebs-22618 ~]# ./adminusers.sh --del
里面改成 $1 == '--add' $1 == '--del' 这样看起来就像选项了
[root@ebs-22618 ~]# adminuser2.sh user1,user2,user3,hello,hi
由此可以 user1,user2,user3,hello,hi 把逗号替换为空格,就会变成 user1 user2 user3 hello hi 即列表
[root@ebs-22618 ~]# ./adminuser3.sh --add user4,user5
[root@ebs-22618 ~]# ./adminuser3.sh --del user4
[root@ebs-22618 ~]# ./adminuser3.sh --help
测试:
整数测试
-le
-lt
-ge
-gt
-eq
-ne
字符串测试
==
!=
>
<
-n
-z
文件测试
-e
-f
-d
-r
-w
-x
-s 如果文件存在且非空
if [ $# -gt 1 ]; then
组合测试条件
-a : and 与关系 与符号 与条件
-o : or 或关系 或符号 或条件 并关系 关符号 并条件
!: 非关系(取反) 否关系 否符号 否条件
if [ $# -gt 1 -a $# -le 3 ]
if [ $# -gt 1 ] && [ $# -le 3 ]
&& 两个与符号
|| 两个并符号
q,Q,quit,Quit
[root@ebs-22618 ~]# ./quit.sh q
Quting...