建议大家参考网上的文章:正则表达式
30
分钟入门教程 其中W3Cschool
版本是经作者授权后整理并转载;因为vim
也支持正则表达式!
vim
编辑器:文本编辑器
何为文本?一般指纯文本,没有任何额外元素,如ASCII text;Unicode;不像world文档一样含有颜色字体大小字体格式等等
文本编辑器又可以分俩类:
- 行编辑器:比如
sed
- 全屏编辑器: 比如
nano
vi
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
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
当前行到最后一行%
全文
/first/,$-
/part1/
,/part2/
从光标所在处起始,由第一次part1
匹配到的行开始至第一次由part2
匹配到的行结束之间的所有行-
可通编辑命令一同使用,实现编辑操作
d
y
c
w
/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进程有效
如想实现永久有效,可通过配置以下文件
- 全局 /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 #