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行首行尾跳转:
按键 | 作用 |
---|
^ | 跳转至行首的第一个非空白字符 |
0 | 跳转至行首 |
$ | 跳转至行尾 |
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
5.vim的寄存器
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