vi / vim
所有的 Unix Like 系统都会内建 Vi 文本编辑器,其他的文本编辑器则不一定会存在。但是目前使用比较多的是 Vim 编辑器。
Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动地以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富。
下述快捷键的表述约定:
Space
为 空格键;命令模式下为命令。- Num:代表输入数字
- String:代表字符串
- +:代表同时按键
- 紧邻:代表依次按
1. 模式
基本上 Vi 、Vim 共分为四种模式,分别是正常模式(Normal mode),插入模式(Insert mode)、命令模式(Command-line mode) 和 可视模式(Visual mode) 。
1.1. 正常模式
- 作用:浏览文件,也包括一些复制、粘贴、删除等操作。
- 进入此模式的方式:当使用 Vim 打开一个文本文件时,便默认进入此模式。打开文本文件的命令:
vim 文件路径
1.2. 可视模式
- 作用:批量选取文本。进入可视模式后,终端左下角会有VISUAL 或者 VISUAL LINE 提示,出现提示便可以移动光标选取文本内容。
- 从正常模式进入到此模式:
v
、V
、Ctrl + V
- 从此模式退出到正常模式:
ESC
键
1.3. 插入模式
- 作用:插入文本。进入插入模式后,终端左下角会有 INSERT 或 REPLACE 提示,只有出现这两种提示时才可以输入字符。
- 从正常模式进入到此模式:按下
i
,I
,o
,O
,a
,A
,r
,R
中的任何一个字母之后会进入插入模式,每个键的作用在细节上有些许区别,见下表:
按键 | 作用 |
---|---|
i | 在目前光标处输入 |
I | 在目前光标所在行的第一个非空格符处开始输入 |
a | 从目前光标处的下一个字符处开始输入 |
A | 从目前光标所在行的最后一个字符处开始输入 |
o | 为在目前光标所在行的下一行处输入新的一行 |
O | 为在目前光标所在行的上一行处输入新的一行 |
r | 只会取代光标所在的那一个字符一次 |
R | 会一直取代光标所在的字符,直到按下 ESC 为止 |
- 从此模式退出到正常模式:
ESC
键
1.4. 命令模式
- 作用:执行一些输入并执行一些 Vim 或插件提供的指令,就像在shell里一样。这些指令包括设置环境、文件操作、调用某个功能、离开Vim等等。
- 从正常模式进入到此模式:
:
键 或/
键 - 从此模式退出到正常模式:
ESC
键
1.5. 模式转换
2. 快捷键
2.1. 正常模式
2.1.1. 移动光标
按键 | 作用 |
---|---|
h 或 向左箭头键(← ) | 光标向左移动一个字符 |
j 或 向下箭头键(↓ ) | 光标向下移动一个字符 |
k 或 向上箭头键(↑ ) | 光标向上移动一个字符 |
l 或 向右箭头键(→ ) | 光标向右移动一个字符 |
Ctrl + f | 屏幕『向下』移动一页,相当于 Page Down 按键 |
Ctrl + b | 屏幕『向上』移动一页,相当于 Page Up 按键 |
Ctrl + d | 屏幕『向下』移动半页 |
Ctrl + u | 屏幕『向上』移动半页 |
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
Num Space | 光标在当前行向右移动的 Num 个字符 |
0 或 Home | 移动到这一行的最前面字符处 |
$ 或 End | 移动到这一行的最后面字符处 |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到此文档的末行 |
Num G | 移动到此文档的第 Num 行 |
g g | 移动到此文档的首行,相当于1G |
Num Enter | 光标向下移动 Num 行 |
2.1.2. 简单编辑
动词代表了我们打算对文本进行什么操作。例如:
d
:删除(delete)y
:复制(yank)p
:粘贴(paste)r
:替换(replace)c
:修改(change)v
:选取(visual select)
介词界定了待编辑文本的范围或者位置。例如:
i
:在…之内(inside)a
:环绕…(around)t
:到…位置前(to)f
:到…位置上(forward)
名词代表了我们即将处理的文本。Vim 中有一个专门的术语叫做文本对象(text object),示例:
w
:单词(word)s
:句子(sentence)p
:段落(paragraph)t
:标签(tag)- 文本块:成对的分隔符包括 小、中、大括号,双引号,单引号,反引号,以及HTML中的标签所包含的文本
文本编辑命令的基本语法如下:
- 动词+介词+名词
- 动词+介词/数词+名词
- 数词+动词+名词
按键 | 作用 |
---|---|
x | 向后删除一个字符(相当于 del 键) |
X | 向前删除一个字符(相当于 backspace 键) |
Num x | 执行“向后删除一个字符”Num次 |
d d | 删除光标所在行 |
Num d d | 执行“删除光标所在行”Num次 |
d g g | 删除光标所在行到首行的所有字符 |
d G | 删除光标所在行到末行的所有字符 |
d 0 | 删除游标所在处到该行首的所有字符 |
d $ | 删除游标所在处到该行尾的所有字符 |
y y | 复制光标所在行 |
Num y y | 执行“复制光标所在行”Num次 |
y g g | 复制光标所在行到首行的所有字符 |
y G | 复制光标所在行到末行的所有字符 |
y 0 | 复制游标所在处到该行首的所有字符 |
y $ | 复制游标所在处到该行尾的所有字符 |
c | 修改,选择完毕修改目标后,会进入插入模式 |
c c | 修改此行。其余选择见上删除、复制。 |
p | p 为将已复制的数据从光标所在行的下一行开始粘贴 |
P | P 为将已复制的数据从光标所在行的上一行开始粘贴 |
J | 将光标所在行与其下一行的字符结合成同一行 |
u | 复原前一个动作 |
Ctrl + r | 重做上一个动作 |
. | 重复前一个动作 |
Z Z | 若修改过,保存当前文件,然后退出。效果等同于:wq 。 |
Z Q | 不保存,强制退出。效果等同于:q! 。 |
可视模式
进入可视模式后可以使用正常模式下移动光标的操作以及操作文本对象的方式选取文本。除此之外可以使用快捷键 o
将光标移动到已选取文本的开头或结尾。
选取文本后可以进行正常模式下删除、复制、替换等操作。
2.2. 插入模式
ENTER
:换行BACKSPACE
:删除光标前一个字符DELETE
:删除光标后一个字符- 方向键:在文本中移动光标
HOME
:移动光标到行首END
:移动光标到行尾Page Up
:上翻页Page Down
:下翻页Insert
:切换光标为输入/替换模式,光标将变成竖线/下划线
2.3. 命令模式
2.3.1. 搜索替换
按键 | 作用 |
---|---|
/ String | 向光标之下寻找一个符合条件的字符串。 |
? String | 向光标之上寻找一个符合条件的字符串。 |
n | 重复前一个搜寻的动作。 |
N | 『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。 |
: Num1 , Num2 s / String1 / String2 / g | 在第 Num1 与 Num2 行之间寻找 String1 这个字符串,并将该字符串替换为 String2。 |
: 1 , $ s / String1 / String2 / g | 在 首行 与 末行 之间寻找 String1 这个字符串,并将该字符串替换为 String2。 |
: % s / String1 / String2/ g | 同上 |
: 1 , $ s / String1 / String2 / g c | 在 首行 与 末行 之间寻找 String1 这个字符串,并将该字符串替换为 String2,且在取代前显示提示字符给用户确认 (confirm) 是否需要取代。 |
: % s / String1 / String2 / g c | 同上 |
2.3.2. 储存、离开等指令
按键 | 作用 |
---|---|
:w | 保存文件,将文件写入硬盘。 |
:w! | 若文件属性为“只读”时,强制将文件写入硬盘,但最终能否能否写入,取决于用户权限。 |
:q | 离开 vim。 |
:q! | 不保存修改,强制离开 vim。 |
:wq | 保存后离开,若为 :wq! 则为强制保存后离开。注意:! 在 vi 当中,常常具有“强制”的意思。 |
:w [filename] | 另存为新文件。 |
:Num1,Num2 w [filename] | 将 n1 行到 n2 行的内容保存成 filename 文件。 |
:r [filename] | 将 filename 这个文档内容追加到光标所在行后面。 |
:! [command] | 暂时离开 vi 到指令行模式下执行 command 的显示结果。 |
例如::! ls /home ,在 vi 当中察看 /home 底下以 ls 输出的目录信息。 |
2.3.3. Vim 环境的变更
按键 | 作用 |
---|---|
:set nu | 显示行号 |
:set nonu | 不显示行号 |
3. 其它快捷键
在终端下执行 vim
,即进入官方文档,如下所示。