Vim编辑器
vim(Vi IMproved)是vi文本编辑器的一个扩展的程序,Vim可以在命令行接口上使用,也可以在图形用户接口上作为一个独立的应用程序使用。Vim是由Bram Moolenaar根据Stevie editor在Amiga计算机上的一个接口的源程序编写,在1991年首次公开发行。
Vim是一个跨多种平台的文本编辑器,在2015年,Stack Overflow调查得出Vim成为排名第三的主流的文本编辑器;在2016年,Stack Overflow调查得出Vim成为排名第四的开发环境;
Vim的使用
1、Vim的基本模式
Vim是一个模式化的编辑器,其有三种模式:编辑模式,也称命令模式;输入模式(可以进行文本的编辑);末行模式(内置的命令行接口)
三种模式的转换
编辑模式为默认模式
编辑模式-->输入模式
i: insert,在光标所在处输入;
a: append,在光标所在处后方输入;
o: 在光标所在处下方打开一个新行;
I: 在光标所在行的行首输入;
A: 在光标所在行的行尾输入;
O: 在光标所在处的上方打开一个新行;
输入模式-->编辑模式
ESC键;
编辑模式-->末行模式
:;
末行模式-->编辑模式
ESC键;
2、打开文件
# vim [optins] [file...]
+#: 打开文件后,直接让光标定位到第#行行首位置;
+PATTERN: 打开文件,直接让光标定位到第一次匹配到PATTERN的行的行首;
3、关闭文件
ZZ: 保存并退出;
以下操作在末行模式下
:q 退出;
:q! 强制退出,不保存此前的编辑操作;
:wq 保存并退出;
:x 保存并退出;
:w /PATH/TO/SOMEWHERE 将文件另存至其他的文件中
4、光标(cursor)跳转
(1) 字符间跳转
^
k
<h l>
j
v
#DIRECTION: 向指定方向跳转#个字符
(2) 单词间跳转
w: 光标跳转至下一个单词的词首;
b: 当前或前一个单词的词首;
e: 当前或后一个单词的词尾;
#COMMAND: 向COMMAND跳转#个单词
(3) 行首行尾跳转
^: 跳转至行首的第一个非空白字符;
0: 跳转至行首;
$: 跳转至行尾;
(4) 行间跳转
#G: 跳转至由#指定的行;
1G, gg: 跳转至第一行;
G: 跳转至末行;
(5) 句间跳转
): 跳转至下一句;
(: 跳转至上一句;
#COMMAND: 向COMMAND跳转#句
(6) 段间跳转
}: 跳转至下一段;
{: 跳转至上一段;
#COMMAND: 向COMMAND跳转#个段;
5、翻屏
Ctrl+f: 向文件尾部翻一屏
Ctrl+b: 向文件首部翻一屏
Ctrl+d: 向文件尾部翻半屏
Ctrl+u: 向文件首部翻半屏
Enter: 按行向后翻
6、vim的编辑命令
(1) 字符编辑
x: 删除光标所在处的字符;
#x: 删除光标所在处起始的#个字符;
xp: 交换光标所在处的字符与其后面的字符的位置;
(2) 替换命令(replace)
r: 替换光标所在处的字符;
rCHAR: 替换光标所在处的字符为CHAR;
(3) 删除命令
d: 删除命令,可结合光标跳转字符,实现范围删除;
d$: 删除当前光标所在的字符到行尾的内容;
d^: 删除当前光标之前的字符到行首非空白的内容;
d0: 删除当前光标之前的字符到行首的内容;
dd: 删除光标所在处的行;
#dd: 删除光标所在行起始的共#行;
(4) 粘贴命令(p,put,paste)
p: 缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,粘贴至当前光标所在处的后方;
P: 缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,粘贴至当前光标所在处的前方;
(5) 复制命令(yank, y)
y: 复制,工作行为相似于d命令;
(6) 改变命令(change, c)
编辑模式 --> 输入模式,实现删除操作;
和d命令行为相似,只是,在执行c相关的命令后会转换至输入模式;
7、其他编辑操作:
(1) 可视化模式:
v: 按字符选定;
V: 按行选定;
结合编辑命令使用: d, c, y
(2) 撤销操作(undo):
u: 撤销此前的操作;
#u: 撤销此前#个操作;
撤销此前的撤销操作:
Ctrl+r
(3) 重复执行前一个编辑操作:
.
vim自带教程,vimtutor
8、vim的末行模式
内建的命令行接口
(1) 地址定界
:start_pos[,end_pos]
#: 特定的第#行,例如5即第五行;
.: 光标所在的当前行;
$: 最后一行;
#,#: 指定行范围,左侧为起始行,右侧为结束行;
#,+#: 指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量;例如:3,+7
%: 全文,相当于(1,$)
/pattern/: 从光标所在处起始向文件尾部第一次被模式所匹配的行;
/pattern/,$: 从第一次被模式匹配到的行到行尾;
/pat1/,/pat2/: 从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行;
可同编辑命令一同使用,实现编辑操作:d, y, c, w /PATH/TO/SOMEFILE: 将范围内的文本保存至指定的文件中;r /PATH/FROM/SOMEFILE: 将指定的文件中 的文本读取并插入至指定位置;
(2) 查找:
/PATTERN: 从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串;
?PATTERN: 从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串;
n: 下一个,与命令方向相同;
N: 上一个,与命令方向相反;
(3) 查找并替换
s: 末行模式的命令;使用格式
s/要查找的内容/替换为的内容/修饰符
要查找的内容: 可使用正则表达式;
替换为的内容: 不能使用正则表达式,但可以引用;
如果“要查找的内容”部分在模式中使用分组符号: 在“替换为的内容”中使用后向引用;
直接引用查找模式匹配到的全部文本,使用&符号;
修饰符:
i: 查找时忽略大小写;
g: 全局替换,意味着一行中如果匹配到多次,则均替换;默认替换每一行第一次匹配到的内容;
示例:
%s@\<t\([[:alpha:]]\+\)\>@T\1@g
%s@\<t\([[:alpha:]]\+\)\>@&er@g
9、vim的多文件功能
(1) 多文件:
vim FILE1 FILE2 …
切换文件:末行模式输入
next下一个文件;
prev 上一个文件;
first 第一个文件
last 最后一个
退出所有文件:
wqall: 保存所有文件并退出;
wall: 保存所有文件;
qall: 退出所有文件
(2) 多窗口:
-o: 水平分割窗口;
-O: 垂直分割窗口;
在窗口间切换:Ctrl+w, ARROW: 切换下一个文件
注意:单个文件也可以分割为多个窗口进行查看:
Ctrl+w, s: 水平分割窗口;
Ctrl+w, v: 垂直分割窗口;
10、定制vim的工作特性:
注意:在末行模式下的设定,仅对当前vim有效;
永久有效:
- 全局:/etc/vimrc
- 用户个人:~/.vimrc
(1) 行号:
显示:set number,简写:set num
取消:set nonum
(2) 括号匹配高亮
匹配:set showmatch, set sm
取消:set nosm
(3) 自动缩进
启用:set autoindent set ai
禁用:set noai
(4) 高亮搜索
启用:set hlsearch
禁用:set nohlsearch
(5) 语法高亮
启用:syntax on
禁用:syntax off
(6) 忽略字符大小写
启用:set ic
禁用:set noic
练习
1、复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符;
:%s@^[[:space:]]\+@@g
2、复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件的每个以空白字符开头的行的行首加上#;
:%s@^[[:space:]]\+[^[:space:]]@#&@g
3、为/tmp/grub2.cfg文件的前三行的行首加#号;
:1,3s@^.*@#&@
4、将/etc/yum.repos/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck替换为gpgcheck=1;
:%s@\(enabled\|gpgcheck\)=1@\1=1@g