简介
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有三种基本工作模式
- 命令模式:通过命令进行文本操作
- 编辑模式:编辑文本
- 末行模式:保存和退出
末行模式命令
命令 |
英文 |
功能 |
w |
write |
保存 |
q |
quit |
退出,如果没有保存,不允许退出 |
q! |
quit |
强行退出,不保存退出 |
wq |
write & quite |
保存并退出 |
x |
|
保存并退出 |
重复次数
先输入一个数字,再跟上一个命令,可以让该命令重复执行指定次数。
移动
上下左右
行内移动
命令 |
英文 |
功能 |
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 |
替换当前行光标后的字符 |
替换模式 |
缩排与重复执行
命令 |
功能 |
>> |
右缩进 |
<< |
减少缩进 |
. |
重复上次命令 |
查找
常规查找
按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退出编辑模式。
- 可以看到所有选中的行都注释了。