测试环境: AIX 7.1
模式
vi编辑器包括三种模式:
- 普通模式:浏览、复制、粘贴、删除
- 编辑模式:插入、替换
- 命令模式:搜索、设置、执行命令
在编辑模式/命令模式下,通过ESC返回普通模式
文件管理
命令 | 功能 | 模式 | |
---|
vi | 打开vi | 普通 | |
vi file | 打开文件 | 普通 | ★ |
view file | 打开文件(只读) | 普通 | ★ |
:q | 退出 | 命令 | ★ |
:q! | 强制退出(不保存) | 命令 | ★ |
:wq | 保存并退出 | 命令 | ★ |
:w | 保存 | 命令 | |
:w file | 另存为 | 命令 | |
m,n w file | m-n行另存为 | 命令 | |
:e | 重新打开(当前文件) | 命令 | |
:e file | 重新打开 | 命令 | |
Ctrl-g | 显示文件信息 | 普通 | |
光标移动
单元移动
命令 | 功能 | 模式 | |
---|
h | 左移一列 | 普通 | ★ |
j | 下移一行 | 普通 | ★ |
k | 上移一行 | 普通 | ★ |
l | 右移一列 | 普通 | ★ |
行内移动
命令 | 功能 | 模式 | |
---|
(n)h | 左移n列 | 普通 | |
(n)l | 右移n列 | 普通 | |
0 | 行首 | 普通 | |
^ | 行首 | 普通 | ★ |
$ | 行尾 | 普通 | ★ |
如,右移20列写作20l
单词移动
命令 | 功能 | 模式 | |
---|
w | 下一单词词首 | 普通 | ★ |
W | 下一单词词首(长单词) | 普通 | |
e | 下一单词词尾 | 普通 | |
E | 下一单词词尾(长单词) | 普通 | |
b | 上一单词词首 | 普通 | |
B | 上一单词词首(长单词) | 普通 | |
长单词:以空格(space)、制表符(tab)、回车(enter)作为分隔符
短单词:包括*()-等均视为分隔符
例如:if(a > 0)
中,长单词包括if(a
、>
、0)
3个,短单词包括if
、(
、a
、>
、0
、)
6个
跨行移动
命令 | 功能 | 模式 | |
---|
:0 | 首行 | 命令 | ★ |
G | 尾行 | 普通 | ★ |
:$ | 尾行 | 命令 | |
:n | 第n行 | 命令 | ★ |
屏幕移动
命令 | 功能 | 模式 | |
---|
ctrl-f | 向下一屏 | 普通 | ★ |
ctrl-b | 向上一屏 | 普通 | ★ |
ctrl-u | 向下半屏 | 普通 | |
ctrl-d | 向上半屏 | 普通 | |
f=forward,b=backward,u=up,d=down
%适用于大中小三种括号
搜索
命令 | 功能 | 模式 | |
---|
/keyword | 搜索关键字 | 命令 | ★ |
?keyword | 搜索关键字(逆向) | 命令 | ★ |
n | 重复上一次查询 | 普通 | ★ |
N | 重复上一次查询(逆向) | 普通 | |
%(光标至于括号上) | 跳转到反括号 | 普通 | |
/+n
:正向搜索
/+N
:逆向搜索
?+n
:逆向搜索
?+N
:正向搜索
编辑文本
插入文本
命令 | 功能 | 模式 | |
---|
i | 光标位置插入 | 普通->编辑 | ★ |
I | 行首位置插入 | 普通->编辑 | |
o | 在当前行下插入一行 | 普通->编辑 | ★ |
O | 在当前行上插入一行 | 普通->编辑 | ★ |
a | 光标位置后插入 | 普通->编辑 | ★ |
A | 行尾位置插入 | 普通->编辑 | |
$a | 行尾位置插入 | 普通->编辑 | |
s | 删除当前字符并插入 | 普通->编辑 | |
S | 删除整行并插入 | 普通->编辑 | |
替换文本
命令 | 功能 | 模式 | |
---|
r | 替换一个字符 | 普通->编辑 | ★ |
nr | 替换n个字符 | 普通->编辑 | |
R | 从光标位置开始替换,直到按ESC | 普通->编辑 | |
cw | 修改一个单词 | 普通->编辑 | ★ |
cc | 修改整行 | 普通->编辑 | |
c0 | 修改行首到光标位置 | 普通->编辑 | |
c^ | 修改行首到光标位置 | 普通->编辑 | |
c$ | 修改光标位置到行尾 | 普通->编辑 | |
~ | 大小写字母切换 | 普通 | |
对于组合命令,可以通过ESC取消
删除、复制和粘贴
命令 | 功能 | 模式 | |
---|
x | 删除光标所在字符 | 普通 | ★ |
nx | 删除从光标位置开始的n个字符 | 普通 | |
X | 删除光标前一字符 | 普通 | |
dw | 删除一个单词 | 普通 | |
dd | 删除整行 | 普通 | ★ |
ndd | 删除n行 | 普通 | |
yw | 复制一个单词 | 普通 | |
yy | 复制整行 | 普通 | ★ |
nyy | 复制n行 | 普通 | |
p | 粘贴 | 普通 | ★ |
P | 粘贴(光标上一行) | 普通 | |
杂项
命令 | 功能 | 模式 | |
---|
J | 合并两行 | 普通 | ★ |
u | 撤销 | 普通 | ★ |
ctrl-h | 删除字符 | 编辑 | |
. | 重复最后一次操作 | 普通 | |
示例:逐词替换
步骤 | 命令 | 说明 |
---|
step1 | /str1 | 搜索单词str1 |
step2 | cw str2 | 替换str1为str2 |
step3 | n | 继续查询str1 |
step4 | . | 重复替换操作 |
step5 | 重复step3-4 | |
输入控制字符
控制字符指ASCII码中0x01-0x1F区间的不可见字符,主要用于程序控制。
在编辑模式下,输入:crtl-v
,ctrl-控制字符
例如回车(0x0D)输入:ctrl-v
,ctrl-m
,在vi中显示为^M
命令模式
命令 | 功能 | 模式 | |
---|
m,n !sort | 将m-n行排序 | 命令 | |
m,n d | 将m-n行删除 | 命令 | |
m,n s/a/b/g/ | 将m-n行中的a替换为b | 命令 | |
- g表示每次匹配均进行替换;无此参数时只替换第一个匹配项
- 范围为全文件时,行号可以写为1,$或%
- 被替换词如果包括/,可以使用其他符号代替,如 :m,n s,a,b,g
- 在行尾追加信息时可以使用 :m,n s/$/b/g
- 被替换词使用正则表达式匹配
命令 | 功能 | 模式 | |
---|
:! cmd | 执行外部命令 | 命令 | |
:set all | 查看全部配置项 | 命令 | |
:set nu/nonu | 显示/取消行号 | 命令 | |
:set ic/noic | 搜索时忽略/取消忽略大小写 | 命令 | |
:set ai/noai | 自动缩进/取消自动缩进 | 命令 | |
:set list/nolist | 显示控制字符/取消显示控制字符 | 命令 | |
作者:烧瓶君
链接:https://www.jianshu.com/p/a41bb480478c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。