Vim 基础
Vim 基础
指令图
Vim(ViImproved)编辑器是vi的扩展版,比vi功能更加强大,是功能强大的跨平台文本文件编辑工具,可以利用它可以建立、修改文本文件等。Vim有三种操作模式,分别称为 编辑模式、插入模式 和 命令模式,当运行Vim时,首会进入命令模式。
命令模式
Vim命令模式下可以进行很多操作,例如光标跳动到指定的单词、行;复制、删除某行甚至很多行以及全文都可以,反正功能真的太强大了,以下就作出详解:
小范围
- 如果键盘上有上、下、左、右箭头的导航键,就由这些键来完成光标的移动。另外,可以用下面的键完成同样的 按字符移动 功能:
命令 | 说明 |
---|---|
k | 向上移动 |
j | 向下移动 |
h | 向左移动 |
l | 向右移动 |
30j | 向下移动30行 |
0 | 到行首 |
^ | 到行首第一个字符,如果前面有空格的话 |
$ | 到行尾 |
gg | 快速到文件头 |
G | 快速到文件尾 |
100G | 跳转到第100行 |
稍大范围移动光标的命令
命令 | 说明 |
---|---|
ctrl+f | 向文件尾部翻一屏 |
ctrl+b | 向文件首部翻一屏 |
ctrl+d | 向文件尾部翻半屏 |
ctrl+u | 向文件首部翻半屏 |
指定某行大范围移动
命令 | 说明 |
---|---|
G | 光标跳到文件尾行 |
gg | 光标跳到文件首行 |
#G | “#”指数字,输入随意一个数字就会调到指定的行数 |
跳转字母
命令 | 说明 |
---|---|
H | 光标跳到当前一页的首行的第一个字母 |
M | 光标跳到当前一页的中间行的第一个字母 |
L | 光标跳到当前一页的尾行的第一个字母 |
H M L 命令还可以加数字。如2H
表示将光标移到屏幕的第2行;3M 表示将光标移动到中间行的上面第三行;3L 表示将光标移到屏幕的倒数第3行。
行内移动
命令 | 说明 |
---|---|
w | 右移光标到下一个字的开头 |
e | 右移光标到一个字的末尾 |
b | 左移光标到前一个字的开头 |
^ | 移动光标,到本行的第一个非空字符 |
$ | 右移光标,到本行的末尾 |
0 | 数字0,左移光标到本行的开始 |
搜索匹配
vim除了在命令模式下进行光标移动外,还提供了强大的字符串搜索功能。要查找文件中指定字或短语出现的位置,可以用Vim直接进行搜索,而不必以手工方式进行。
搜索方法
键入字符 /
后面跟以要搜索的字符串,然后按回车键。编辑程序执行正向搜索(即朝文件末尾方向),并在找到指定字符串后,将光标停到该字符串的开头;键入 n 命令可以继续执行搜索,找出这一字符串下次出现的位置。用字符 ?
取代 /
,可以实现反向搜索(朝文件开头方向)例如:
命令 | 说明 |
---|---|
/root | 正向搜索字符串root |
n | 继续搜索,找出root下次出现在的位置 |
N | 继续搜索,找出root上次出现在的位置 |
?root | 反向搜索字符串root |
字符编辑、替换
Vim常规的删除命令是d、x(前者删除行后者删除字符),结合Vim的其他特性可以实现基础的删除功能。将光标定位于文件内指定位置后,可以用其他字符来替换光标所指向的字符,或从当前光标位置删除一个或多个字符或一行、多行。例如:
命令 | 说明 |
---|---|
x | 删除光标处的字符 |
#x | 删除光标处起始的#个字符 |
xp | 交换光标所在处的字符及其后面字符的位置 |
~ | 转换大小写 |
J | 删除当前行后的换行符 |
r | 替换光标所在处的字符 |
R | 切换成REPLACE模式 |
复制、粘贴、剪切、删除
黏贴
从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个内存缓冲区中。用户可将其粘贴到正文中的指定位置。完成这一操作的命令是:
命令 | 说明 |
---|---|
p | 粘贴复制或剪切的内容 |
p | 小写字母 p,将缓冲区的内容粘贴到光标的后面 |
P | 大写字母 P,将缓冲区的内容粘贴到光标的前面 |
3p | 将复制或剪切的内容粘贴三次 |
复制
有时需要复制一段正文到新位置,同时保留原有位置的内容。这种情况下,首先应当把指定内容复制(而不是剪切)到内存缓冲区。完成这一操作的命令是:
命令 | 说明 |
---|---|
y | 复制整行;同时y后面还可以和w,e,b,$,^,等符号连用,例如:yw表示复制光标所在处的一个单词 |
10yy | 向下复制10行 |
yw | 复制光标开始的一个单词 |
y$ | 复制光标到行尾 |
yfB | 复制光标到第一个大写B中间的内容 |
y2fB | 复制光标到第二个大写B中间的内容 |
yy | 复制行 |
#yy | “#”表示数字也就是复制几行 |
#”tyy | “#”表示任何数,“t“表示T这个寄容器,linux中有36个剪寄容器,即a-z,0-9;复制行数可以选择放到任何这36个寄容器上;粘贴的话”tp表示将t寄存器内容粘贴到文件中。 |
剪切
命令 | 说明 |
---|---|
x | 向剪切一个一个字符,如果是在行尾,则为向前剪切 |
3x | 剪切三个 |
xp | 非行尾交换两个字符,如从bs变成sb |
删除
删除的内容会放到剪贴板,按 p 即可粘贴到其他地方
命令 | 说明 |
---|---|
dd | 删除一行 |
%d | 删除全文 |
200dd | 删除200行 |
dw | 删除一个单词 (最喜欢啦) |
df” | 删除到出现的第一个双引 |
撤销和重复
在编辑文档的过程中,为消除某个错误的编辑命令造成的后果,可以用撤消命令。另外,如果用户希望在新的光标位置重复前面执行过的编辑命令,可用重复命令。
命令 | 说明 |
---|---|
u | 撤消前一条命令的结果,可以和数字连用 |
. | 重复最后一条修改正文的命令 |
插入模式(Insert)(编辑模式)
- 进入插入模式
在编辑模式下正确定位光标之后,可用以下命令切换到插入模式:
命令 | 说明 |
---|---|
i | 在光标左侧插入正文 |
a | 在光标右侧插入正文 |
o | 在光标所在行的下一行增添新行 |
I | 在光标所在行的末尾插入 |
A | 在光标所在行的末尾插入 |
O | 在光标所在行的上一行增添新行 |
- 退出插入模式
退出插入模式的方法是,按ESC
退出插入模式之后,将会进入编辑模式 。
扩展命令模式(extended command )
在 Vim 的命令模式下,可以使用复杂的命令。在命令模式下按 shift+ :
并显示冒号,此时已进入命令模式。命令模式又称末行模式,用户输入的内容均显示在屏幕的最后一行,按回车键,Vim 执行命令。
打开、保存、退出
命令 | 说明 |
---|---|
:!file | 在打开的vim中,如果想看一个文件可以:!后面跟文件 |
:r!file | 将打开的文件读入到vim中 |
:w | file将当前文件另存为 |
字符串搜索
如果希望进行正向搜索,将待搜索的字符串置于两个 / 之间;如果希望反向搜索,则将字符串放在两个 ? 之间。
命令 | 说明 |
---|---|
n | 查找下一个匹配 |
N | 查找上一个匹配 |
2n | 查找下面第二个匹配 |
:/root/ | 正向搜索,将光标移到下一个包含字符串 root 的行 |
:?root? | 反向搜索,将光标移到上一个包含字符串 root 的行 |
:/root/w file | 正向搜索,并将第一个包含字符串 root的行写入 file 文件 |
/str1/,str2/w file | 正向搜索,并将包含字符串 str1 的行至包含字符串 str2 的行写 |
正文替换
利用 :s
命令可以实现字符串的替换。具体的用法包括:
命令 | 说明 |
---|---|
:%s/str1/str2/ | 用字符串 str2 替换行中首次出现的字符串 str1 |
:s/str1/str2/ | 用字符串 str2 替换行中所有出现的字符串 str1 |
:.,$ s/str1/str2/g | 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1 |
:1,$ s/str1/str2/g | 用字符串 str2 替换正文中所有出现的字符串 str1 |
:g/str1/s//str2/g | 功能同上 |
:m,ns/str1/str2/g | 将从m行到n行的str1替换成str2 |
- 从上述例子中可以总结这些:
g
放在命令末尾,表示对搜索字符串的每次出现进行替换,不止匹配每行中的第一次出现;不加g
,表示只对搜索字符串的首次出现进行替换;g
放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作- 表示后面跟着一串替换的命令
- 表示替换范围是所有行,即全文
分屏管理
普通的Vim模式,打开一个Vim程序只能查看一个文件,如果想同时查看多个文件,就需要用到Vim分屏与标签页功能。
多文件分割
- vim -o|-O FILE1 FILE2 …
- -o:水平分割
- -O:垂直分割
单文件窗口分割:
命令 | 说明 |
---|---|
Ctrl+w,s | 水平分割 |
Ctrl+w,v | 垂直分割 |
Ctrl+w,q | 取消相邻窗口 |
Ctrl+w,o | 取消全部相邻窗口 |
wqall | 退出 |
Via