vim使用手册
一. vim简介
Vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。
Vim的第一个版本由布莱姆·米勒在1991年发布。最初的简称是Vi IMitation,随着功能的不断增加,正式名称改成了Vi IMproved。现在是在开放源代码方式下发行的自由软件。
布莱姆·米勒在80年代末购入他的Amiga计算机时,Amiga上还没有他最常用的编辑器vi。Bram从一个开源的vi复制Stevie开始,开发了Vim的1.0版本。最初的目标只是完全复制vi的功能,那个时候的Vim是Vi IMitation(模拟)的简称。1991年Vim 1.14版被"Fred Fish Disk #591"这个Amiga用的免费软体集所收录了。1992年1.22版本的Vim被移植到了UNIX和MS-DOS上。从那个时候开始,Vim的全名就变成Vi IMproved(改良)了。
在这之后,Vim加入了不计其数的新功能。做为第一个里程碑的是1994年的3.0版本加入了多视窗编辑模式(分区视窗)。从那之后,同一萤幕可以显示的Vim编辑文件数可以不止一个了。1996年发布的Vim 4.0是第一个利用GUI(图形用户界面)的版本。1998年5.0版本的Vim加入了highlight(语法高亮)功能。2001年的Vim 6.0版本加入了代码折叠、插件、多国语言支持、垂直分区视窗等功能。2006 年5月发布的Vim 7.0版更加入了拼字检查、上下文相关补全,标签页编辑等新功能。2008年8月发布的Vim 7.2,合并了Vim 7.1以来的所有修正补丁,并且加入了脚本的浮点数支持。现在最新的版本是2013年8月发布的Vim 7.4,这个版本除了包含最新修正的补丁之外,还加入了“永久撤销”、“Blowfish算法加密”、“文本隐藏”和“Lua以及Python3的接口”等新功能。
二. vim的使用方法
1. 打开文件
vim是以vim命令后加文件名的方式来打开文件的,但vim功能强大,在打开文件时还可以加入参数实现更多的功能。用法:vim [OPTION]... FILE...
vim命令的选项及作用:
选项 |
含义 |
+ |
打开文件后光标默认在尾行行首。 |
+# |
打开文件后光标处于第#行的行首。 |
+/PATTERN |
打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首 |
-b file |
以二进制方式打开文件 |
-d file1 file2… |
比较多个文件 |
-m file |
以只读方式打开文件,打开后对文件的修改无法保存。 |
ex file或vim –e |
直接进入扩展命令模式 |
补充:
- 如果该文件存在,文件被打开并显示内容
- 如果该文件不存在,当编辑后第一次存盘时创建它
- 如果目录不存在,将无法保存编辑内容
2. vim的三种模式
vim是一款模式编辑器,对vim的操作进行在vim的三种模式之上。所谓三种模式分别是:1.命令(Normal)模式 ,默认模式,主要作用是移动光标,剪切/粘贴文本。2.插入(Insert)或编辑模式 ,主要作用是修改文本。3.扩展命令(extended command )模式 ,主要作用是保存,退出等。所以想要娴熟操作vim,在三种模式之间的切换是必不可少的。vim的模式切换是以命令模式为基础的,也就是打开文件时的第一个界面,vim打开文件默认是在命令模式界面。所以无论你是要进入扩展模式还是插入模式,都需要在命令模式进行切换,扩展模式和插入模式之间是不能直接切换的。
vim三种主要模式之间的切换:
按键 |
作用 |
Esc键 |
退出当前模式 |
2Esc键 |
总是返回到命令模式 |
ESC |
插入模式转到命令模式 |
: |
命令模式转到扩展命令模式 |
2ESC,enter |
扩展命令模式转到命令模式 |
3.命令模式
1.命令模式进入插入模式
按键 |
作用 |
i |
insert, 在光标所在处输入 |
I |
在当前光标所在行的行首输入 |
a |
append, 在光标所在处后面输入 |
A |
在当前光标所在行的行尾输入 |
o |
在当前光标所在行的下方打开一个新行 |
O |
在当前光标所在行的上方打开一个新行 |
2.命令模式光标间跳转
2.1字符间跳转:
按键 |
作用 |
h |
左 |
l |
右 |
j |
下 |
k |
上 |
#command |
跳转由#指定的个数的字符 |
2.2单词间跳转:
按键 |
作用 |
w |
下一个单词的词首 |
e |
当前或下一单词的词尾 |
b |
当前或前一个单词的词首 |
#COMMAND |
由#指定一次跳转的单词数 |
2.3当前页跳转:
2.4行首行尾跳转:
按键 |
作用 |
^ |
跳转至行首的第一个非空白字符 |
|
跳转至行首 |
$ |
跳转至行尾 |
2.5行间移动:
按键 |
作用 |
#G |
跳转至由#指定行 |
G |
最后一行 |
1G,gg |
第一行 |
2.6句间移动
2.7 段落间移动:
3.命令模式翻屏操作
按键 |
作用 |
Ctrl+f |
向文件尾部翻一屏 |
Ctrl+b |
向文件首部翻一屏 |
Ctrl+d |
向文件尾部翻半屏 |
Ctrl+u |
向文件首部翻半屏 |
4.命令模式编辑操作
4.1字符编辑:
按键 |
作用 |
x |
删除光标处的字符 |
#x |
删除光标处起始的#个字符 |
xp |
交换光标所在处的字符及其后面字符的位置 |
~ |
转换大小写 |
J |
删除当前行后的换行符 |
gU |
变大写 |
gu |
变小写 |
100 i sun [ESC] |
粘贴“sun”100次 |
4.2替换命令(r, replace)
按键 |
作用 |
r |
替换光标所在处的字符 |
R |
切换成REPLACE模式,可进行选择替换 |
4.3删除命令(d,delete)
按键 |
作用 |
d |
删除命令,可结合光标跳转字符,实现范围删除 |
d$ |
删除到行尾 |
d^ |
删除到非空行首 |
d0 |
删除到行首 |
dw |
删除到下一个单词的词首 |
de |
删除到当前或下一单词的词尾 |
db |
删除到当前或前一个单词的词首 |
#COMMAND |
删除到由#指定一次跳转的单词数 |
dd |
删除光标所在的行 |
#dd |
删除光标所在处由#指定的多行 |
D |
从当前光标位置一直删除到行尾,留空行,等同于d$ |
4.4复制命令(y, yank):
按键 |
作用 |
y |
复制,行为相似于d命令 |
y$ |
复制到行尾 |
y0 |
复制到行首 |
y^ |
复制到非空行首 |
ye |
复制到当前或下一单词的词尾 |
yw |
复制到下一个单词的词首 |
yb |
复制到当前或前一个单词的词首 |
#COMMAND |
复制到由#指定一次跳转的单词数 |
yy |
复制整行 |
#yy |
复制光标所在处由#指定的多行 |
Y |
从当前光标位置一直复制到行尾,留空行,等同于d$ |
4.5粘贴命令(p, paste):
按键 |
作用 |
p |
缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面 |
P |
缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面 |
4.6改变命令(c, change)
按键 |
作用 |
c |
修改后切换成插入模式 |
c$ |
删除到行尾,并切换成插入模式 |
c^ |
删除到非空行首,并切换成插入模式 |
c0 |
删除到行首,并切换成插入模式 |
cb |
删除到当前或前一个单词的词首,并切换成插入模式 |
ce |
删除到当前或下一单词的词尾,并切换成插入模式 |
cw |
删除到下一个单词的词首,并切换成插入模式 |
#COMMAND |
删除到由#指定一次跳转的单词数,并切换成插入模式 |
cc |
删除当前行,并切换成插入模式 |
#cc |
删除#指定的多行,并切换成插入模式 |
C |
删除当前光标到行尾,并切换成插入模式 |
4.7撤销更改
按键 |
作用 |
u |
撤销最近的更改 |
#u |
撤销之前多次更改 |
U |
撤消光标落在这行后所有此行的更改 |
Ctrl-r |
重做最后的“撤消”更改 |
. |
重复前一个操作 |
n. |
重复前一个操作n次 |
4. 扩展命令模式
4.1扩展命令模式下的简单命令用法:
在命令模式下按“:”进入扩展命令模式,进入后,编辑器的底部左下角会出现一个命令提示符,在这个命令提示符后面输入命令,可以进行扩展命令模式下的操作。
命令 |
作用 |
w |
写(存)磁盘文件 |
wq |
写入并退出 |
x |
写入并退出 |
q |
退出 |
q! |
不存盘退出,即使更改都将丢失 |
r filename |
读文件内容到当前文件中 |
w filename |
将当前文件内容写入另一个文件 |
!command |
执行命令 |
r!command |
读入命令的输出 |
4.2扩展命令模式:地址定界
在扩展命令模式下进行地址定界方法一:利用行数进行定界
格式|:开始#,结束#
用法 |
含义 |
# |
具体第#行,例如2表示第2行 |
#,# |
从左侧#表示起始行,到右侧#表示结尾行 |
#,+# |
从左侧#表示的起始行,加上右侧#表示的行数 |
2,+3 |
表示2到5行 |
. |
表示当前行 |
$ |
表示最后一行 |
. 或$-1 |
当前行到倒数第二行 |
% |
全文, 相当于1,$ |
在扩展命令模式下进行地址定界方法二:利用正则进行定界,从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束。
格式| :/正则1/,/正则2/
#,/pat/ -------->从第#行开始,一直到第一次被pat匹配到的行结束。
/pat/,$ --------->从第一次被pat模式匹配到的行开始,到行尾结束。
使用方式:后跟一个编辑命令
用法 |
含义 |
d |
删除匹配到的内容 |
y |
复制匹配到的内容 |
w file |
将范围内的行另存至指定文件中 |
r file |
在指定位置插入指定文件中的所有内容 |
4.3扩展命令模式:查找
查找命令:
按键 |
作用 |
/PATTERN |
从当前光标所在处向文件尾部查找 |
?PATTERN |
从当前光标所在处向文件首部查找 |
n |
与命令同方向 |
N |
与命令反方向 |
4.4扩展命令模式:查找并替换
扩展命令模式下,在命令提示符后面输入字母“s”,然后按格式输入要查找和替换的内容,便可进行查找替换。
格式:s/要查找的内容/替换为的内容/修饰符
格式项 |
作用 |
要查找的内容 |
分割符后输入要查找的内容,可使用模式,也就是正则表达式。 |
替换为的内容 |
不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容 |
修饰符: |
|
i |
忽略大小写 |
g |
全局替换;默认情况下,每一行只替换第一次出现 |
gc |
全局替换,每次替换前询问 |
如果查找和替换的内容中包含路径,再使用"/"作为分割符就不方便了,这时可以使用@、#等特殊符号来做分割符。
例如:
s@/etc@/var@g
s#/boot#/#i
5.vim的寄存器
-
有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享
-
寄存器名称a,b,…,z,格式:“寄存器放在数字和命令之间
如:3"tyy 表示复制3行到t寄存器中
"tp 表示将t寄存器内容粘贴
-
未指定,将使用无命名寄存器
-
有10个数字寄存器,用0,1,…,9表示,0存放最近复制内容,1存放最近删除内容。当新的文本变更和删除时,1转存到2,2转存到3,以此类推。数字寄存器不能在不同会话间共享
6.编辑二进制文件
以二进制方式打开文件,例如:vim –b binaryfile
扩展命令模式下,利用xxd命令转换为可读的十六进制
:%!xxd
扩展命令模式下,利用xxd命令转换回二进制,进行二进制文件的编辑。
:%!xxd –r
7.可视化模式
在可视化模式下允许移动光标选择文本块,选中的文字可被删除,复制,变更,过滤,搜索,替换等 。
按键 |
作用 |
v |
命令模式下,进入面向字符的可视化模式 |
V |
命令模式下,进入面向行的可视化模式 |
ctrl-v |
命令模式下,进入面向块的可视化模式 |
w |
选择一个单词 |
) |
选择一句 |
} |
选择一段 |
箭头 |
字符间移动 |
8.多文件模式
多文件模式可以同时打开多个文件,
用法:vim FILE1 FILE2 FILE3 ...
|:next| 下一个
| :prev|前一个
| :first| 第一个
|:last |最后一个
| :wall| 保存所有
| :qall|退出所有
| :wqall|保存退出所有
9.使用多个“窗口”
多窗口模式可以同时打开多个窗口进行编辑,
用法:vim -o|-O FILE1 FILE2 ...
-o: 水平分割
-O: 垂直分割
在窗口间切换:Ctrl+w
单文件窗口分割方法:
按键 |
作用 |
Ctrl+w,s或 :split, |
水平分割 |
Ctrl+w,v或:vertical, |
垂直分割 |
ctrl+w,q |
取消相邻窗口 |
ctrl+w,o |
取消全部窗口 |
:wqall |
退出 |
10.关闭文件
10.1扩展模式退出编辑器:
选项 |
含义 |
:q |
退出 |
:q! |
强制退出,丢弃做出的修改 |
:wq |
保存退出 |
:x |
保存退出 |
10.2命令模式下退出编辑器:
三. 定制vim的工作特性
定义vim的工作特性可以为使用带来许多便利,增加使用乐趣。定制vim的工作特性有两种方法,一种是将设置写入配置文件,这样可以永久有效。另一种方法是在vim的扩展模式下直接设置,只对当前vim进程有效。
扩展模式:当前vim进程有效
配置文件:永久有效
全局:/etc/vimrc ----->将配置写入此文件将对所有用户有效。
个人:~/.vimrc ------->将配置写入此文件只对个人有效。
常用工作特性设置参数:
特性 |
参数 |
行号显示 |
set number, 简写为set nu |
行号取消显示 |
set nonumber, 简写为set nonu |
括号成对匹配 |
set showmatch, 简写为set sm |
括号取消成对匹配 |
set nosm |
自动缩进启用 |
set ai |
自动缩进禁用 |
set noai |
高亮搜索启用 |
set hlsearch |
高亮搜索禁用 |
set nohlsearch |
语法高亮启用 |
syntax on |
语法高亮禁用 |
syntax off |
忽略字符的大小写启用 |
set ic |
忽略字符的大小写不忽略 |
set noic |
文件格式启用windows格式 |
set fileformat=dos |
文件格式启用unix格式 |
set fileformat=unix |
设置文本宽度 |
set textwidth=65 (vimonly) |
设置文本宽度 |
set wrapmargin=15 |
四. vi/vim内置帮助
vimtutor 命令是以vim编辑器打开vim帮助文档,在里面可以边看帮助文档边练习操作,非常便捷,是学习vim的必备工具。而且在里面做的修改不会保存。
在扩展命令模式下输入以下命令可以查看vim内置帮助:
- help
- helptopic
- help option-list
- setor:set all