vi有三种基本工作模式:命令模式、末行模式和编辑模式。
打开文件时首先进入的是命令模式,各种模式之间的切换如下图:
末行模式命令有:
命令 | 功能 |
---|---|
w | 保存 |
q | 退出(如果没有保存,不允许退出) |
q! | 不保存,强行退出 |
wq | 保存并退出 |
x | 保存并退出 |
:e. | 会打开内置的文件浏览器,浏览当前目录下的文件 |
:n 文件名 | 新建文件 |
:w 文件名 | 另存为,但是仍然编辑当前文件 |
基本移动
(1)上、下、左、右移动
命令 | 功能 |
---|---|
h | 向左 |
j | 向下 |
k | 向上 |
l | 向右 |
(2)行内移动
命令 | 功能 |
---|---|
w | 向后移动一个单词 |
b | 向前移动一个单词 |
数字0 | 回到行首 |
^ | 回到行首,第一个不是空白字符的位置 |
$ | 移动到行尾 |
(3)行数移动
命令 | 功能 |
---|---|
gg | 文件顶部 |
G | 文件末尾 |
数字gg(数字G) | 移动到数字对应的行数 |
ps:如果控制台上不显示行数,可以在命令模式下输入:set nu 来显示所有的行号
(4)屏幕移动
命令 | 英文 | 功能 |
---|---|---|
Ctrl+b | back | 向上翻页 |
Ctrl+f | forward | 向下翻页 |
H | Head | 屏幕顶部 |
M | Middle | 屏幕中间 |
L | Low | 屏幕底部 |
程序代码的常用移动
(1)段落移动
在vi中使用空行来区分段落,段落移动使用花括号{ }来实现
命令 | 功能 |
---|---|
{ | 上一段 |
} | 下一段 |
(2)括号切换
【使用 % 来实现括号匹配以及切换操作】
(3)标记
在开发时,某一块代码可能需要稍后处理,这时可以先做一个标记,后面需要的时候再快速地跳转回来
ps:【1】如果添加了标记的行被删除,标记会同时被删除
【2】如果在其他行添加了相同名称的标记,之前添加的标记会被替换掉
命令 | 功能 |
---|---|
mx | 添加标记x,x是a-z或者A~Z 之间的任意一个字母 |
'x | 直接定位到标记x所在的位置 |
选中文本(可视模式)
在可视模式下可以直观地看到选中了哪些文本,如图:
命令 | 功能 |
---|---|
v | 从光标位置开始按照正常模式选择文本 |
V | 选中光标经过的完整行 |
Ctrl+v | 垂直方向选中文本 |
在可视模式下,和移动命令连用可以更快地操作文本,例如:ggVG可以选中所有的内容
撤消和恢复撤消
命令 | 功能 |
---|---|
u | 撤消上次命令 |
Ctrl+r | 恢复撤消的命令 |
删除文本
命令 | 功能 |
---|---|
x | 删除光标所在字符,或者删除选中文字 |
d(移动命令) | 删除移动命令对应的内容 |
dd | 删除光标所在行, ndd 可以删除 n 行 |
D | 删除至行尾 |
数字n+x:可以删除光标开始往右的n个字符
复制、粘贴
命令 | 功能 |
---|---|
y(移动命令) | 复制 |
yy | 复制一行,nyy 可以复制 n 行 |
p | 粘贴 |
ps:vi中的文本缓冲区和系统的剪贴板不是同一个,因此在其他软件中使用Ctrl+c复制的内容,不能通过p命令粘贴,但是可以在编辑模式下使用鼠标右键粘贴
替换
命令 | 功能 | 工作模式 |
---|---|---|
r | 替换当前字符 | 命令模式 |
R | 替换当前行光标后的字符 | 替换模式 |
替换模式要记得返回命令模式
缩进和重复执行
命令 | 功能 |
---|---|
>> | 向右增加缩进4个空格 |
<< | 向左缩进4个空格 |
. | 重复上次命令 |
在可视模式下,缩进只需要一个 < 或者 >
查找
(1)常规查找
命令 | 功能 |
---|---|
/str | 查找str |
查找到指定内容之后,使用 next来查找下一个出现的位置:
- n :查找下一个
- N :查找上一个
(2)单词快速匹配
命令 | 功能 |
---|---|
* | 向后查找当前光标所在的单词 |
# | 向前查找当前光标所在的单词 |
查到的内容都会高亮显示,如果想取消高亮,可以查找一个文档中不存在的内容
查找并替换
在vi中查找和替换命令需要在末行模式下执行
(1)全局替换
(2)可视区域替换
*先选中要替换的文字范围
(3)确认替换
把末尾的 g 改成 gc ,在替换的时候会有提示
【1】y —(yes) 替换
【2】n --(no) 不替换
【3】a --(all) 替换所有
【4】q --(quit) 退出替换
【5】^E 向下滚屏
【6】^Y 向上滚屏
进入编辑模式的6个命令
命令 | 功能 | 常用程度 |
---|---|---|
i | 在当前字符前插入文本 | 常用 |
I | 在行首插入文本 | 较常用 |
a | 在当前字符后添加文本 | |
A | 在行末添加文本 | 较常用 |
o | 在当前行后面插入一空行 | 常用 |
O | 在当前行前面插入一空行 | 常用 |
分屏命令
使用分屏命令,可以同时查看和编辑多个文件
命令 | 功能 |
---|---|
:sp[文件名] | 横向增加分屏 |
:vsp[文件名] | 纵向增加分屏 |
(1)切换分屏
*先按下 Ctrl+w
*再按以下命令
命令 | 功能 |
---|---|
w | 切换到下一个窗口 |
r | 互换窗口 |
c | 关闭当前窗口,但是不能关闭最后一个窗口 |
q | 退出当前窗口,如果是最后一个窗口,则关闭vi |
o | 关闭其他窗口 |