原创作品,允许转载,转载时请务必以超链接形式标明文章 、作者信息和本声明。否则将追究法律责任。            

                   

1. 简介

vim编辑器是功能强大的跨平台文本文件编辑工具,继承自Unix系统的vi编辑器,支持Linux/Mac OS X/Windows系统,利用它可以建立、修改文本文件。

打开文件方式如下:

1
2
3
4
5
6
7
# vim [options] [file ..]
        
选项      文件
        
+
#:打开文件后,直接让光标处于第#行的行首;
        
+
/PATTERN
:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;
FOR EXAMPLE:
[root@app1 ~]
# vim +10 /tmp/my.cnf   #打开my.cnf文件并且光标处于第10行
[root@app1 ~]
# vim +/basedir /tmp/my.cnf  #打开my.cnf文件并且光标处于第一个被basedir匹配到的行的行首;

也可以使用如下方式直接打开:

1
#vim [file]

其中[file]是要编辑器的文件的路径名。如果文件不存在,它将创建一个新文件。vim有三种操作模式,分别称为:

编辑模式输入模式末行模式,当运行vim时,首先进入编辑模式。

编辑模式(打开文件后默认的格式):移动光标,剪切/ 粘贴文本 输入模式:修改编辑文本 末行模式 :保存,退出,内建命令操作等

三种模式之间的转换需要输入的键:

编辑模式 --> 输入模式:

    i:insert, 在光标所在处输入;

    a: append,在光标在处后方输入;

    o:在光标所在处的下方打开一个新行;

    I:在光标所在行的行首输入;

    A:在光标所在行的行尾输入;

    O:在光标所在处的上方打开一个新行;

输入模式 --> 编辑模式

    ESC

编辑模式 --> 末行模式

    :

末行模式 --> 编辑模式

    ESC

2. 编辑模式

vim编辑模式下可以移动光标的位置,并可以对正文进行进行复制、粘贴、删除、插入等操作。当完成所有的编辑工作后,需要保存编辑结果,退出编辑界面,可以发出ZZ命令,连续按两次大写的Z键。

2.1 光标的跳转

可以用上、下、左、右键移动光标,实现字符间的跳转。也可以用下面的键完成同样的字符移动功能:

1
2
3
4
h:左
j:下
k:上
l:右

单词间跳转

1
2
3
w:下一个单词的词首;
e:当前或后一个单词的词尾;
b:当前或前一个单词的词首;

行首行尾跳转

1
2
3
^:跳转至行首的第一个非空白字符;
0:跳转至行首;
$:跳转至行尾;

行间跳转

1
2
3
#G:跳转至由#指定的行;
1G, gg:第一行;
G:最后一行;

2.2 翻屏:

1
2
3
4
5
Ctrl+f:向文件尾翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
Enter:按行向后翻

2.3 搜索匹配

搜索是文件编辑器的必备功能,vim可以在编辑模式下,直接使用搜索功能。

搜索的使用方法是:

1
2
3
4
/PATTERN
:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串
?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串
n:下一个,与命令方向相同
N:上一个,与命令方向相反

2.4 编辑命令

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
30
31
32
33
34
35
36
37
38
39
40
字符编辑:
    
x:删除光标所在处的字符;
    
#x:删除光标所在处起始的#个字符;         
    
xp:交换光标所在处的字符与其后面的字符的位置;
 
替换命令(replace):
    
r:替换光标所在处的字符,使用方法为在光标所在字符按r键,然后输入要替换的字符
删除命令:
    
:删除命令,可结合光标跳转字符,实现范围删除;
    
d$:删除光标所在位置到行尾这一段的字符;
    
d^:删除光标所在位置到行首这一段的字符;      
    
dw:删除光标后的一个单词;
    
db:删除光标前的一个单词;                 
    
dd
:删除光标所在处的行;
    
#dd:删除光标所处的行起始的共#行;
    
特别说明:删除操作也是剪切操作,上一次的删除内容会复制到粘贴板        
粘贴命令(p, put, 
paste
):
    
p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方;
    
P:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方;           
复制命令(yank, y):
    
y:复制,工作行为相似于d命令;
    
y$:复制光标所在位置到行尾这一段的字符
    
y^:复制光标所在位置到行首这一段的字符                   
    
yy:复制一整行
    
#yy:复制#行                       
改变命令(change, c):
    
编辑模式 --> 输入模式,实现删除操作;
    
c$
    
c^
    
cc:删除光标所在的行,并转换为输出模式;
    
#cc:删除#行并且转换为输出模式
 
撤销(undo)操作:
    
u:撤销此前的操作;
    
#u:撤销此前的#个操作;
撤销此前的撤销:
    
Ctrl+r
关闭文件:
    
ZZ:保存并退出;
输入.会执行上一个命令

3. 输入模式

只能从编辑模式进入输入模式,进入方式如下:

1
2
3
4
5
6
7
从编辑模式定位光标后,摁以下键以不同的方式进入输入模式:
    
i:insert, 在光标所在处输入;
    
a: append,在光标在处后方输入;
    
o:在光标所在处的下方打开一个新行;
    
I:在光标所在行的行首输入;
    
A:在光标所在行的行尾输入;
    
O:在光标所在处的上方打开一个新行;

通过摁Esc键,返回编辑模式。

4. 末行模式

命令模式是vim内建命令行的接口,可以使用复杂的命令来编辑文件。在编辑模式下键入:,光标就跳到屏幕最后一行,并在那里显示冒号,此时已进入末行模式。命令模式又称 命令模式 ,用户输入的内容均显示在屏幕的最后一行,按回车键,执行命令。

4.1地址定界

在末行的:后输入特定的字符实现地址定界

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#:特定的第#行,例如5即第5行;        
        
.:当前行;
        
$:最后一行;
        
#,#:指定行范围,左侧为起始行,右侧为结束行;
        
#,+#:指定行范围,左侧为超始行绝对编号,右侧为相对左侧行号的偏移量;
               
例如:3,+7 代表第三行到第十行;
        
.,$-1:当前行到倒数第二行
        
1,$:第一行到最后一行
        
%:全文 
        
/pattern/
:从光标所在处起始向文件尾部第一次被模式所匹配到的行;
        
/pat1/
,
/pat2/
:从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到                        的行结束之间的所有行;
        
可同编辑命令一同使用,实现编辑操作:
            
28d:删除28行
             
3y:拷贝第三行
            
/PATH/TO/SOMEFILE
:将范围内的文本保存至指定的文件中;
            
r  
/PATH/FROM/SOMEFILE
:将指定的文件中的文本读取并插入至指定位置;

4.2查找

末行模式下的查找等同于编辑模式下的/查找

1
2
3
4
/PATTERN
:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串;       
?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串;
            
n:下一个,与命令方向相同;
            
N:上一个,与命令方向相反;

4.3查找并替换

此处要与正则表达式配合使用,正则表达式的说明讲解见我另外一篇文章:

http://afterdawn.blog.51cto.com/7503144/1855128

s:末行模式的命令;

           使用格式:

s/要查找的内容/替换为的内容/修饰符

要查找的内容:可使用正则表达式;

替换为的内容:不能使用下则表达式,但可以引用;

如果“要查找的内容”部分在模式中使用分组符号:在“替换为的内容”中使用后向引用;

直接引用查找模式匹配到的全部文本,要使用&符号;

    修饰符:

i:忽略大小写;

g:全局替换,意味着一行中如果匹配到多次,则均替换;

可把分隔符替换为其它非常用字符:

    s@@@

    s###

    示例:

1
2
%s@\<t\([[:alpha:]]\+\)\>@T\1@g
%s@\<t[[:alpha:]]\+\>@&er@g

使用练习:

1
2
3
4
5
6
7
8
1)复制
/etc/grub2
.cfg文件至
/tmp
目录中,用查找替换命令删除
/tmp/grub2
.cfg文件中以空白字符开头的行的行首的空白字符;
    
%s@^[[:space:]]\+@@
2)复制
/etc/rc
.d
/init
.d
/functions
文件至
/tmp
目录中,用查找替换命令为
/tmp/functions
文件的每个以空白字符开头的行的行首加上
#;
    
%s@^[[:space:]]\+[^[:space:]]@
#&@g
3)为
/tmp/grub2
.cfg文件的最后四行的行首加上
#号;
    
$-3,$s@.*@
#&@                  
4)将
/etc/yum
.repos.d
/CentOS-Base
.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck=0替换为gpgcheck=1;
    
%s@\(enabled\|gpgcheck\)=0@\1=1@g

5. vim的多文件功能:

多文件打开:

1
vim FILE1 FILE2 ...

在文件间切换:

1
2
3
4
:next  下一个
:prev  上一个
:first   第一个 
:last   最后一个

退出所有文件:

1
2
3
:wqall 保存所有文件并退出;
:wall
:qall

多窗口:

1
2
-o:水平分割窗口
-O:垂直分割窗口

在窗口间切换:

1
2
3
4
Ctrl+w, ARROW
注意:单个文件也可以分割为多个窗口进行查看:
Ctrl+w, s:水平分割窗口
Ctrl+w, 
v
:垂直分割窗口

6.定制vim的工作特性:

注意:在末行模式下的设定,仅对当前vim进程有效;

永久有效:

1
2
全局:
/etc/vimrc
用户个人:~/.vimrc

行号

1
2
显示:
set 
number, 简写为
set 
nu
取消显示:
set 
nomber, 
set 
nonu

括号匹配高亮

1
2
匹配:
set 
showmatch, 
set 
sm
取消:
set 
nosm

自动缩进

1
2
启用:
set 
ai
禁用:
set 
noai

高亮搜索

1
2
启用:
set  
hlsearch
禁用:
set 
nohlsearch

语法高亮

1
2
启用:syntax on
禁用:syntax off

忽略字符大小写

1
2
启用:
set 
ic
禁用:
set 
noic

7. 保存和退出

退出不保存

1
2
: q  在未作修改的情况下退出;
: q! 放弃所有修改,退出编辑程序;

保存退出

1

保存到其他文件

1
/PATH/TO/SOMEFILE
:将范围内的文本保存至指定的文件中;