简介
vi和vim
在很多Linux发行版中,直接把vi
做成vim
的软链接。
vi
- vi是Visual interface的简称,Linux中最经典的文本编辑器。
- vi的核心设计思想,是让程序员的手指始终保持在键盘核心区域,就能完成所有操作。
vim
vim = vi improved
vim是从vi发展出来的文本编辑器,支持代码补全、编译及错误跳转等方便编程的功能。
打开/新建文件
打开vi
vi 文件名
打开的同时定位到行
在程序debug时,快速打开并且定位到行
# vi 文件名 +行号
vi hellp.py +16
# vi 文件名 +
# +号后面不接数字,定位到末尾
vi hello.py +
异常处理
如果vi被异常退出了,比如没有保存时,会话被关闭了,vi就创建一个交换文件.xxx.swp
。
再用vi打开上次文件时,会提示文件的已存在,此时可删除它或恢复到上次。
工作模式
vi有三种基本工作模式
- 命令模式:通过命令进行文本操作
- 编辑模式:编辑文本
- 末行模式:保存和退出
vi的模式.png
末行模式命令
命令 | 英文 | 功能 |
---|---|---|
w | write | 保存 |
q | quit | 退出,如果没有保存,不允许退出 |
q! | quit | 强行退出,不保存退出 |
wq | write & quite | 保存并退出 |
x | 保存并退出 |
重复次数
先输入一个数字,再跟上一个命令,可以让该命令重复执行指定次数。
移动
上下左右
命令 | 功能 |
---|---|
左 | h |
右 | l |
上 | j |
下 | k |
行内移动
命令 | 英文 | 功能 |
---|---|---|
w | word | (前进)右移一个单词 |
b | back | (后退)左移一个单词 |
0 | 行首 | |
^ | 第一个非空字符 | |
$ | 行尾 |
行数移动
命令 | 英文 | 功能 |
---|---|---|
gg | go | 文件顶部 |
G | go | 文件末尾 |
数字gg | go | 移动到数字对应行数 |
数字G | go | 移动到数字对应行数 |
:数字 | go | 移动到数字对应行数 |
屏幕移动
命令 | 英文 | 功能 |
---|---|---|
ctrl + b | back | 向上翻页 |
ctrl + f | forward | 向下翻页 |
H | Head | 屏幕顶部 |
M | Middle | 屏幕中间 |
L | Low | 屏幕底部 |
段落移动
段落以空行为区分
命令 | 功能 |
---|---|
{ | 上一段 |
} | 下一段 |
括号切换
可以在括号的开头末尾来回切换
命令 | 功能 |
---|---|
% | 括号匹配及切换 |
标记
命令 | 英文 | 功能 |
---|---|---|
mx | mark | 添加标记x,标记可以是a-z或A-Z之间任意一个字母 |
'x | 直接定位到标记x的行 |
选中文件(可视模式)
命令 | 模式 | 功能 |
---|---|---|
v | 可视模式 | 正常选择 |
V | 可视行模式 | 选中光标经过的完整行 |
ctrl + v | 可视块模式 | 垂直方向选中文本 |
撤销和恢复撤销
命令 | 模式 | 功能 |
---|---|---|
u | undo | 撤销 |
ctrl + r | redo | 恢复撤销 |
删除文本
命令 | 英文 | 功能 |
---|---|---|
x | cut | 删除光标所在字符,或可视模式选中的文字 |
d(接移动命令) | delete | 删除移动命令对应的内容 |
dd | delete | 删除光标所在行,可以ndd删除多行,n为数字 |
D | delete | 删除至行尾 |
复制、粘贴
命令 | 英文 | 功能 |
---|---|---|
y(接移动命令) | copy | 复制 |
yy | copy | 复制一行,可以nyy向下复制多行 |
p | paste | 粘贴 |
- 命令
d
和x
类似于剪切,剪切后不粘贴,就相当于删除。 - 在编辑模式中,可以使用鼠标右键粘贴文本。
替换
命令 | 英文 | 功能 | 工作模式 |
---|---|---|---|
r | replace | 替换光标所在字符 | 命令模式 |
R | replace | 替换当前行光标后的字符 | 替换模式 |
缩排与重复执行
命令 | 功能 |
---|---|
>> | 右缩进 |
<< | 减少缩进 |
. | 重复上次命令 |
查找
常规查找
命令 | 功能 |
---|---|
/str | 查找 str |
按
n
查找下一个,按N
查找上一个
查找并替换
需要在末行模式下执行。
固定格式:
:%s///g
全局替换
:%s/旧文本/新文本/g
可视区域内替换
先选中要替换文字的范围,再执行替换
# 先选中,然后进入末行模式,不需要写%号
:s/旧文本/新文本/g
确认替换
把末尾的g改成gc,在替换时就会有提示。
:%s/旧文本/新文本/gc
vi提示的可选项:
选项 | 英文 | 含义 |
---|---|---|
y | yes | 替换当前定位的文本 |
n | no | 不替换 |
q | quit | 退出替换 |
l | last | 替换,然后退出替换 |
^E | 向下滚屏 | |
^Y | 向上滚屏 |
编辑命令
进入编辑模式有这些:
命令 | 英文 | 功能 | 常用 |
---|---|---|---|
i | insert | 在当前字符前插入文本 | 常用 |
a | append | 在当前字符后插入 | 不常用 |
I | insert | 在行首插入 | 较常用 |
A | append | 在行尾插入 | 较常用 |
o | 在当前行下方插入空行 | 常用 | |
O | 在当前行上方插入空行 | 常用 |
编辑命令和数字的连用
比如需要输入20个号,则首先在命令模式中输入20,然后按i进入编辑模式,输入,再按esc退出编辑模式,会把在编辑模式下的输入重复20次。
编辑命令和可视化连用
比如要注释掉多行代码,可以这样做:
- 移动到需要注释的代码的行首
- 进入可视化模式选中需要注释的代码
- 按大写I进入编辑模式,注意在可视化模式下按小写i是进不了编辑模式的
- 在行首输入
#
,按esc退出编辑模式。 - 可以看到所有选中的行都注释了。