vim编辑器使用详解
1、VIM简介
- Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是纯粹的自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了SlashdotBeanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线,总的来看,Vim和Emacs同样都是非常优秀的文本编辑器。全屏幕的编辑器:VIM,又称,visual interface,是一款文本编辑器,vi, vi iMproved
2、打开文件
1 | vim [options] [file ..] |
3、VIM模式
提示:默认为 编辑模式
- 模式间转换
- 编辑模式–>输入模式:
i
:insert, 在当前光标所在处,转换为输入模式
I
:在当前光标所在行行首,转换为输入模式
a
: append, 在当前光标所在处字符后方,转换为输入模式
A
:在当前光标所在行行尾,转换为输入模式
o
: 在当前光标所在行的下方新建一个空白行,并转换为输入模式
O
:在当前光标所在行的上方新建一个空白行,并转换为输入模式 - 输入模式–>编辑模式:
ESC
- 编辑模式–>末行模式:
:
- 末行模式–>编辑模式:
ESC
4、关闭VIM
末行模式:
:q!
强制退出,不保存编辑的内容退出;:wq
保存退出:x
保存退出:wq!
,:x!
强制保存退出编辑模式:
ZZ
:保存退出
5、编辑命令
5.1、光标跳转
字符间移动:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29#{h|j|k|l}:一次移动#个字符间距
k
h<-- -->l
j
#{w|e|b}:
单词间移动:
w:下一个单词的词首
e:当前或下一个单词的词尾
b:当前或前一个单词的词首
行首行尾间跳转:
0: 跳转至绝对行首
^: 行首的第一个非空白字符
$: 跳转至绝对行尾
#句子间跳转:
)
(
#段落间跳转:
}
{
#行间快速移动:
#G:
#: 目标行编号
G: 文尾
1G:文首末行模式:
:#
跳转至第#行
5.2、编辑操作
x:删除光标所在处的字符
1
#x: 删除光标所在处及向后的共#个字符
r: replace,替换光标所在处的字符
d: 删除命令
1
2
3
4
5
6
7
8
9
10
11dd: 删除光标所在行
#dd: 删除光村所在行及下行的共#行;
与跳转命令一同使用:
d$: 删除光标所在处至行尾的内容;同D命令
d^: 删除光标所在处至行首的内容;
dw
db
de
上述三个命令支持前面使用#来指明涵盖的单词的个数;
#COMMAND:#代表数字p: 粘贴,put, paste
1
2
3
4
5
6行级别:
p: 粘贴在光标所在当前行下方
P: 粘贴在光标所在当前行上方
小于行级别:
p: 粘贴在光村所在处的后方
p: 粘贴在光村所在处的前方y: yank,复制
1
2
3
4
5
6
7
8
9
10
11yy: 复制光标所在行,相当于Y命令
#yy: 复制光标所在行及下行的共#行;
与跳转命令一同使用:
y$: 复制光标所在处至行尾的内容;
y^: 复制光标所在处至行首的内容;
yw
yb
ye
上述三个命令支持前面使用#来指明涵盖的单词的个数;
#COMMAND:5yy(复制5行)c: change, 修改
1
2
3
4
5
6
7cc: 删除光标所在行整行内容,并立即转为输入模式
#cc:
c$, C:
c^, c0
cw, cb, ce
#COMMAND:5cc(删除光标以下5行,并开启输入模式)撤消操作:
1
2
3
4
5
6
7
8u: undo
#u: 一次撤消最近的共#次编辑操作;
撤消此前的撤消操作:
Ctrl+r
重复前一条命令:
.
6、VIM内建教程
1 | [root@localhost ~]# vimtutor |
7、VIM可视化模式
v
: 字符可视化,选择光标所在行的光标左侧的内容V
:行可视化,光标所在行整行都会被选定ctrl+v
:进入的块可视化模式,可以选择一个矩形内的文本1
2
3
4
5
6
7
8
9
10
11#进入可视化模式后常用操作指令:
d:删除选中文本
c:修改选中文本,删除选中的文本,然后输入想要的内容
r:替换选中文本,将选中的文本替换成单个字符
I:在选中文本前插入
A:在选中文本后插入
gu:选中区域转为小写
gU:选中区域转为大写
g~:大小写互调
>:向右缩进一个单位
<:向左缩进一个单位
注意:注意:操作完成之后,‘esc’结束操作或退出可视化
- 三种模式之间可以输入相关命令切换,例如:
v(进入字符可视化) — v或esc(退出)
v(进入字符可视化) — V(进入行可视化)
8、编辑模式下的翻屏命令
Ctrl+f
: 向文件尾部翻一屏Ctrl+b
:向文件首部翻一屏Ctrl+d
: 向文件尾部翻半屏Ctrl+u
: 向文件首部翻半屏
9、文本查找
/PATTERN
:向尾部进行?PATTERN
:向首部进行
n
: 与命令同方向N
:与命令反方向
10、文本替换
10.1、末行模式:内置命令行接口,有命令历史记录功能
- 有部分内置命令用于编辑操作,此时可使用地址定界法进行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#地址定界:
startline[,endline]:
#: 第#行
.: 当前行
$: 最后一行
%: 全文
#相对定界:
+#: 从指定位置向下#个行
-#:从指定位置向上#个行
/pat1/:第一次被此模式所匹配到的行;
#,/pat1/
/pat1/,/pat2/
#后可跟编辑命令:
d, y
w, r
10.2、文本替换命令:s
- s/要查找的内容/要替换为的内容/修饰符
1
2
3
4
5
6
7
8
9
10
11/: 分隔符,用于分隔“查找的内容”和“替换为的内容”;此分隔符可使用其它字符,如@,#等;
要查找的内容:可使用正则表达式;此部分可以后面“替换为的内容”部分中使用“&”全部引用;
替换为的内容:不可使用正则表达式,一般为正常文本,但可以使用正则表达式中的\1, \2, ...保存的内容;
修饰符:
i: 查找时不区分字符大小写
g: global,全局替换;
注意:引用
11、文本读取
- 在vi中执行命令和导入文件
提示:在末行模式下
导入文件: :r FILENAME
执行命令: :!COMMAND
导入执行命令的结果: :r!COMMAND
11、多文件模式
打开文件
1
2
3vim [OPTION]... [FILE]...
+#: 快速定位至第#行;
+/PATTERN: 快速定位至被模式第一次匹配至行;多文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18vim FILE1 FILE2 FILE3 ...
#末行模式:
:next 下一个
:prev 前一个
:first 第一个
:last 最后一个
#退出所有文件
:wqall
:wall
:qall
#多窗口:
-o: 水平分隔窗口
-O: 垂直分隔窗口
#Ctrl+w, ARROW
注意:单个文件也可以分隔为多个窗口进行查看
Ctrl+w, s: 水平分隔
Ctrl+w, v: 垂直分隔
12、VIM界面显示特性
开户或关闭行号显示
:set number,:set nu
:set nonumber,:set nonu
语法高亮的开启和关闭
:syntax on
:syntax off
搜索高亮的开启和关闭
:set hlsearch
:set nohlsearch
自动缩进的开启和关闭
:set autoindent,:set ai
:set noautoindent,:set noai
区分字符大小写的开启和关闭
:set ignorecase,:set ic
:set noignorecase,:set noic
高亮显示匹配的符号对儿:
:set showmatch,:set sm
:set noshowmatch,:set nosm
13、vim的配置文件
- 全局配置:
/etc/vimrc
- 指定用户配置:
~/.vimrc
14、练习
复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;
答::%s@^[[:space:]]@#&@
复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;
答::%s@^[[:space:]]\{1,\}@@
删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符
答::%s@^#[[:space:]]\+@@
为/tmp/grub.conf文件中前三行的行首加#号;
答::1,3s@^@#@
将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;
答::%s@\(gpgcheck\|enabled\)=0@\1=1@