建议大家参考网上的文章:正则表达式
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
当前行到最后一行%
全文/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进程有效
如想实现永久有效,可通过配置以下文件
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 #
原文:https://www.cnblogs.com/struggle-1216/p/11874384.html