建议大家参考网上的文章:正则表达式
30分钟入门教程 其中W3Cschool版本是经作者授权后整理并转载;因为vim也支持正则表达式!
vim编辑器:文本编辑器
何为文本?一般指纯文本,没有任何额外元素,如ASCII text;Unicode;不像world文档一样含有颜色字体大小字体格式等等
文本编辑器又可以分俩类:
sednano vivim模式化编辑器,有以下几种模式
那么如何使用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
r rCHART替换光标所在处的字符(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即第五行. 点号,表示当前行$ 最后一行#,# 指定行范围,左侧为起始行,右侧为结束行,须配合d y c实现各种骚操作#,+# 指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量,如3,+7,操作同上
/PATTERN/ 从光标所在处起始向文件尾部第一次被模式所匹配到的行
.,$-1 当前行到最后一行% 全文/part1/,/part2/ 从光标所在处起始,由第一次part1匹配到的行开始至第一次由part2匹配到的行结束之间的所有行
可通编辑命令一同使用,实现编辑操作
d y cw /PATH/TO/SOMEFILE 将范围内的文本保存至指定的文件中r /PATH/FROM/SOMEFILE 将指定的文件中的文本读取并插入至指定位置(2).查找
/PATTERN 从当前光标所在处向文件尾部查找能够被当前模式匹配到的字符串
?PATTERN 从当前光标所在处向文件首部查找能够被当前模式匹配到的字符串
n 下一个,与命令方向相同N 上一个,与命令方向相同(3).查找并替换,s末行模式命令;
s/查找内容/替换为的内容/修饰符
替换为内容: 不可使用正则表达式,但可引用
&号修饰符:
i 忽略大小写g 全局替换;意味着一行中如果匹配多次,则全部替换注意:可以使用其它常用字符代替/,如@ #
实例
:%s@\<s\([[:alpha:]]\+\)\>@S\1@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@\(^ \)@&#\1@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进程有效
如想实现永久有效,可通过配置以下文件
1. 行号
set number,简写set nu 显示行号set nonumber,简写set nonu 取消显示2. 括号匹配高亮显示
set showmanship,简写set sm,默认全局开启set nosm3. 自动缩进
set aiset noai4. 高亮搜索,默认开启
set hlsearchset nohlsearch5. 语法高亮,默认开启
syntax onsyntax off6. 忽略大小写
set icset noic获取帮助:末行模式下
:help:help subject课外作业:如何设置tab键缩进4个字符
[sanxi@test-edu ~]$ vim .vimrc
set ts=4 #ts是tabstop的缩写
set noexpandtab #原文:https://www.cnblogs.com/struggle-1216/p/11874384.html