本文适用于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 |
显示控制字符/取消显示控制字符 |
命令 |
|