本文适用于AIX系统的vi编辑器,不兼容vim
测试环境: 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 |
显示控制字符/取消显示控制字符 |
命令 |
|