建议大家参考网上的文章:正则表达式
30分钟入门教程 其中W3Cschool版本是经作者授权后整理并转载;因为vim也支持正则表达式!
vim编辑器:文本编辑器
何为文本?一般指纯文本,没有任何额外元素,如ASCII text;Unicode;不像world文档一样含有颜色字体大小字体格式等等
文本编辑器又可以分俩类:
- 行编辑器:比如
sed - 全屏编辑器: 比如
nanovi
vim模式化编辑器,有以下几种模式
- 编辑模式:即命令模式,增删修改
- 输入模式:即插入模式
- 末行模式:内置命令行接口
那么如何使用vim打开文件?我们照例先man vim看看使用法则
vim - Vi IMproved, a programmers text editor 即Vi增强版,程序员文本编辑器;这就是强者的世界吗.jpg
vim [options] [file ..] 也可以直接vim后面跟文件
+# 打开文件后,光标处于第#行的行首
+/PATERN 打开文件后,直接让光标处于第一个被PATERN匹配到的行的行首
+ 打开后处于末行的行首
上面我们说过vim有三种模式,那么这三种模式相互间是否可以相互转换?如何转换?
模式转换:
1. 编辑模式:默认模式
编辑模式-->输入模式
i insert在光标所在处输入a append在光标所在处后方输入o 在光标所在处的下方打开新行O 在光标所在处的上方输入I 在光标所在行的行首输入A 在光标所在行的行尾输入
2. 输入模式-->编辑模式
Esc
编辑模式-->末行模式
:冒号
3. 末行模式-->编辑模式
Esc或两次Esc
打开了文件就得有关闭文件的方式:
ZZ 保存并退出
:q 退出
:wq 保存并退出
:q! 不保存并强制退出
:x 保存并退出
:w /PATH/TO/FILE另存为
光标跳转:须处于编辑模式
(1)字符间跳转
h向左跳转1个字符l向右跳转1个字符j向下跳转1个字符k向上跳转1个字符#COMMAND跳转由#指定的个数的字符
(2)单词间跳转
w下一个单词的词首b当前或前一个单词的词首e当前或后一个单词的词尾
(3)行首行尾跳转
^跳转至行首的第一个非空白字符0跳转至行首,Tab不算$跳转至行尾
(4)行间跳转
#G跳转至由#指定的行1G或gg跳转至第1行G跳转至最后一行
(5)句间跳转
)下一句(前一句
(6)段间跳转
}下一段{上一段
翻屏操作:
CTRL+f向文件尾部翻一屏CTRL+b向文件首部翻一屏CTRL+d向文件尾部翻半屏CTRL+u向文件首部翻半屏enter向文件尾部翻一行
vim的编辑命令:须处于编辑模式
(1)字符编辑
x删除光标所在处的字符#x删除光标所在处起始往后#个字符xp交换光标所在处的字符及其后面的字符的位置
(2)替换命令replace
rrCHART替换光标所在处的字符
(3)删除命令:可结合光标跳转字符,实现范围删除;非常强大实用
d删除命令;dd删除整行;同样支持组合
(4)粘贴命令
p小写p,表示缓冲区中的内容如为整行则粘贴在当前光标所在行的下方;否则粘贴至当前光标所在处的后方P大写P,表示缓冲区中的内容如为整行则粘贴在当前光标所在行的上方;否则粘贴至当前光标所在处的前方
(5)复制命令y即yank
y复制,类似d命令yy复制整行
(6)改变命令c即change
-
编辑模式-->输入模式,并实现删除操作
- 类似
d命令,同样支持组合
- 类似
(7)其它编辑操作
可视化模式:类似Windows用鼠标选中并拖动来选择大片区域
v小写v,按字符选定-
V大写V,按行选定二者均可组合`d` `p` `y` `c`等命令实现批量范围操作
撤销命令undo
u撤销此前操作,默认最近50次操作#u撤销此前的#个操作
撤销此前撤销recovery
CTRL+r撤销此前撤销的操作
重复执行前一个编辑操作
.点号
vimtutor是vim自带的练习教程,朋友们有空也可以上去练练.
我们再来讲讲vim的末行模式
`vim`末行模式:内嵌命令行接口
列举如下几项常用功能
(1).地址定界
start_post[,end_post]
#特定的第#行,如5即第五行.点号,表示当前行$最后一行#,#指定行范围,左侧为起始行,右侧为结束行,须配合dyc实现各种骚操作-
#,+#指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量,如3,+7,操作同上/PATTERN/从光标所在处起始向文件尾部第一次被模式所匹配到的行.,$-1当前行到最后一行%全文
/first/,$-
/part1/,/part2/从光标所在处起始,由第一次part1匹配到的行开始至第一次由part2匹配到的行结束之间的所有行-
可通编辑命令一同使用,实现编辑操作
dycw/PATH/TO/SOMEFILE将范围内的文本保存至指定的文件中r/PATH/FROM/SOMEFILE将指定的文件中的文本读取并插入至指定位置
-
(2).查找
/PATTERN 从当前光标所在处向文件尾部查找能够被当前模式匹配到的字符串
?PATTERN 从当前光标所在处向文件首部查找能够被当前模式匹配到的字符串
n下一个,与命令方向相同N上一个,与命令方向相同
(3).查找并替换,s末行模式命令;
s/查找内容/替换为的内容/修饰符
- 查找的内容: 可使用正则表达式
-
替换为内容: 不可使用正则表达式,但可引用
- 如要查找内容在模式中使用了分组符号,可在"替换为的内容"中使用后向引用
- 直接引用查找模式匹配到的全部文本,需要使用
&号
-
修饰符:
i忽略大小写g全局替换;意味着一行中如果匹配多次,则全部替换
注意:可以使用其它常用字符代替/,如@ #
实例
:%s@<s([[:alpha:]]+)>@S1@g 将当前文本中所有以s开头的单词全部换成S开头
是不是感觉跟看天书一样?我们来一一解释!
%全文查找 <s锚定词首为s ([[:alpha:]]+)分组引用括号内的"匹配所有字符至少一次"详情请看上一章正则表达式 >锚定词尾 1引用前面括号内匹配到的字符次数1
大写的S是要替换的字符
:%s@<n[[:alpha:]]+>@&er@g 将当前文本中所有以n开头的单词后面全部加上er
参考上面的解释即可,&er表示引用的单词后面加er
:%s@^#@@g 将当前文本中所有以#号开头的行的#号全部删除掉,@@之间没有字符代表为空即删除
经过上面几条命令与解释,相信大家有所了解了吧?没有?请看以下练习题再次熟悉一下!
练习题1.复制/etc/grub2.cfg文件至/tmp目录下,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的空白字符
[sanxi@test-edu ~]$ sudo cp -v /etc/grub2.cfg /tmp/
‘/etc/grub2.cfg’ -> ‘/tmp/grub2.cfg’
[sanxi@test-edu ~]$ vim /tmp/grub2.cfg
:%s@^ +@@g 全文查找行首锚定空白字符且重复次数至少为`1`替换为空即删除空白字符,全局;本人写的空格符最好不用 ,而是`[[:space:]]`
练习题2. 复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/fuctions文件的每个以空白字符开头的行的行首加上#
[sanxi@test-edu ~]$ sudo cp -v /etc/rc.d/init.d/functions /tmp/
‘/etc/rc.d/init.d/functions’ -> ‘/tmp/functions’
[sanxi@test-edu ~]$ vim /tmp/functions
:%s@(^ )@@g 解释同上,建议使用[[:space:]]而不是 空格键打出来的空白字符
%s@^[[:space:]]@#&@g 因此,可以这样
练习题3. 为/tmp/grub2.cfg文件的前三行的行首加上#号
练习题4. 将/etc/yum.repos.d/Centos-Base.repo文件中所有的enable=0替换为enable=1,所有gpgcheck=1
[sanxi@test-edu ~]$ sudo vim /etc/yum.repos.d/CentOS-Base.repo
大家还记不记得在Windows上我们可以非常轻松方便地同时打开多个文档同时显示多个窗口?其实vim也可以做到的,怎么做到呢,请看下面
vim的多文件功能
vim FILE1 FILE2......
vim在文件中切换可使用以下方式
:next下一个:prev上一个:first第一个:last最后一个
退出所有文件:
:wqall保存所有文件并全部退出:qall退出所有文件:wall保存所有文件
vim的多窗口功能
-o水平分割窗口-O垂直分割窗口
在窗口间切换:
CTRL+w下一个CTRL+w+向上箭头
单文件分割窗口
CTRL+w+s水平分割ctrl+w+V垂直分割
定制vim的工作特性
末行模式下的设定,仅对当前vim进程有效
如想实现永久有效,可通过配置以下文件
- 全局 /etc/vimrc
- 用户 ~/.vimrc 该文件一般不存在,需要自行创建添加
1. 行号
set number,简写set nu显示行号set nonumber,简写set nonu取消显示
2. 括号匹配高亮显示
- 匹配
set showmanship,简写set sm,默认全局开启 - 取消
set nosm
3. 自动缩进
- 开启
set ai - 禁用
set noai
4. 高亮搜索,默认开启
- 开启
set hlsearch - 禁用
set nohlsearch
5. 语法高亮,默认开启
- 启动
syntax on - 禁用
syntax off
6. 忽略大小写
- 启用
set ic - 禁用
set noic
获取帮助:末行模式下
:help:help subject
课外作业:如何设置tab键缩进4个字符
[sanxi@test-edu ~]$ vim .vimrc
set ts=4 #ts是tabstop的缩写
set noexpandtab #