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当前页跳转:
按键 作用
H 页首
M 页中间行
L 页底
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命令模式下退出编辑器:
选项 含义
ZZ 保存退出
ZQ 不保存退出

三. 定制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