Vi的使用
索引:
1.启动vi命令
| 命令 | 描述 |
|---|---|
| vi filename | 从第一行开始编辑文件 |
| vi +n filename | 从第n行开始编辑文件 |
| vi +filename | 从最后行开始编辑文件 |
| vi +/pattern filename | 从包含pattern的第一行开始编辑文件 |
| vi -r filename | 在系统崩溃之后恢复文件 |
| vi -R filename | 以只读方式编辑文件 |
| vedit filename | 在初学者模式下编辑文件 |
2.按测量单位移动光标
以下命令之前都可以加上一个数字表示重复因子:
| 命令 | 描述 |
|---|---|
| 空格、l、右箭头键 | 以字符为单位向右移动 |
| h或左箭头键 | 以字符为单位向左移动 |
| w | 以词为单位向右移动 |
| W | 以词为单位(单词以空格分隔)向右移动 |
| b | 以词为单位向左移动 |
| B | 以词为单位(单词以空格分隔)向左移动 |
| $ | 移动到行尾 |
| e | 移动到右边单词的结尾 |
| E | 移动到右边单词的结尾(单词以空格分隔) |
| 0 | 移动到行开始(不能用重复因子) |
| RETURN | 移动到下一行的开始 |
| j或下箭头键 | 移动到下一行 |
| - | 移动到前一行的开始 |
| k或上箭头键 | 移动到上面一行 |
| ) | 移动到语句结尾 |
| ( | 移动到语句开始 |
| } | 移动到段落结尾 |
| { | 移动到段落开始 |
| % | 移动到位于同一嵌套层次的同类型匹配括号 |
3.查看工作缓存的不同部分
| 命令 | 描述 |
|---|---|
| Ctrl-d | 向前移动半个屏幕 |
| Ctrl-u | 向后移动半个屏幕 |
| Ctrl-f | 向前移动1个屏幕 |
| Ctrl-b | 向后移动1个屏幕 |
| nG | 到第n行(不指定n则到最后一行) |
| H | 到屏幕顶部 |
| M | 到屏幕中部 |
| L | 到屏幕底部 |
4.添加文本命令
| 命令 | 描述 |
|---|---|
| i | 在光标前插入 |
| I | 在该行的第一个非空白字符前插入 |
| a | 在光标后插入 |
| A | 在行尾插入 |
| o | 在当前行之下开辟一个新行 |
| O | 在当前行之上开辟一个新行 |
| r | 替换当前字符 |
| R | 替换从当前字符所开始的字符(直到按下escape为止) |
5.取消修改命令
| 命令 | 描述 |
|---|---|
| u | 取消最近一次操作 |
| U | 恢复当前行为开始修改之前的状态 |
6.删除和修改文本
下表中M是测量单位,n表示重复因子,c为任意字符。
| 命令 | 描述 |
|---|---|
| nx | 从当前字符开始删除,n指定数目 |
| nX | 从当前字符前一个字符开始删除n个字符 |
| dM | 删除由M所制定的文本 |
| ndd | 删除由n指定数目的行 |
| dtc | 删除到位于当前行的下一个字符c |
| D | 删除到行尾 |
| n~ | 改变n个字符的大小写 |
7.替换和修改命令
| 命令 | 描述 |
|---|---|
| ns | 替换由n指定数目的字符 |
| S | 替换整行 |
| cM | 修改由M指定的文本 |
| ncc | 修改由n指定数目的行 |
| ctc | 修改到位于当前行的下一个字符c |
| C | 修改到行尾 |
8.搜索字符串
| 命令 | 描述 |
|---|---|
| /rexp RETURN | 向前搜索rexp |
| ?rexp RETURN | 向后搜索rexp |
| n | 重复最初的搜索 |
| N | 重复最初的搜索,但方向相反 |
| /RETURN | 向前重复最初的搜索 |
| ?RETURN | 向后重复最初的搜索 |
| fc | 把光标移动到当前行的下一个字符c |
| Fc | 把光标移动到当前行的前一个字符c |
| tc | 把光标移动到当前行的下一个字符c的前面(位于它左边) |
| Tc | 把光标移动到当前行的前一个字符c之后的字符(位于它右边) |
| ; | 重复最近一次的f、F、t、T命令 |
9.替换字符串
命令格式:
:[address]s/search-string/replacement-string[/g]
其中:
address:一个搜索字符串、一个行编号或者是由一个逗号所分隔的两个行编号。(.)表示当前行,($)表示最后行。
search-string:可以是单个字符的正则表达式。
replacement-string:替换字符串。
g:制定一个全局替换(每行不止替换一处)。
10.移出和放置文本
M是测量单位,n是重复因子,用户可以“x(其中x是缓冲区名称a~z)的形式将某个缓冲区名称加在这些命令之前。
| 命令 | 描述 |
|---|---|
| yM | 移出由M所指定的文本 |
| nyy | 移出由n所指定数目的行 |
| Y | 移出到行尾 |
| p | 放置文本中某个位置之后或之下的位置 |
| P | 放置文本中某个位置之前或之上的位置 |
11.其它命令
| 命令 | 描述 |
|---|---|
| J | 将当前行和前一行连接起来 |
| . | 重复上一次的有效命令 |
| :w filename | 将工作缓冲区内容写入filename文件 |
| :q | 退出vi |
| ZZ | 将工作缓冲区内容写入当前文件并退出vi |
| :f或ctrl-g | 显示当前状态 |
| Ctrl-v | 逐字插入下一个字符,即使它是一个vi命令(用于输入模式) |
| mx | 设置标记x,其中x是a到z的字母 |
| “ | 将光标移回到其前一个位置 |
| ‘x | 将光标移回到标记x所在行 |
| `x | 将光标移回到标记x所在字符 |
| :e filename | 编辑filename文件 |
| :n | 当vi以多个文件名参数启动时编辑下一个文件 |
| :rev | 当vi以多个文件名参数启动时,重新调整文件名列表,编辑第一个文件 |
| sh | 启动一个shell |
| :!command | 启动一个shell并执行一个命令 |
| :!!command | 启动一个shell并执行一个命令,将命令输出替换当前行 |
12.设置参数set
13.映射命令map