# 第五章 文本编辑
## 5.1 进入和退出vi
vi是visual interface的简称。在Linux系统中,还提供了vim(Vi IMproved)编辑器,它是vi的增强版本,与vi向上兼容。
### 5.1.1 进入
**一般格式**
```
vi [文件名]
```
**说明**
```
在系统提示符(设为$ )下
输入命令vi和想要编辑
(建立)的文件名,便可进入
vi。
```
## 5.1.2 退出
**一般格式**
```
:wq
:ZZ
:x
:q!
```
## 5.2 vi的工作方式
**命令方式**
```
输入命令vi进入编辑器时,就处于vi的命令方式。从键盘上输入的任何字符都被当作编辑命令来解释 ,在命令方式下输入的表示命令的字符并不在屏幕上显示出来。
```
**插入方式**
```
输入插入命令( i )、附加命令( a )、打开命令(o )、替换命令( s )、修改命令( c )或取代命令( r )可以从命令方式进入到插入方式。
```
**ex转义字符**
```
在命令方式下输入一个冒号(:)就进入 ex转义方式。
```
## 5.3 文本输入
### 5.3.1 插入命令
**插入字符**
```
i 插在光标位置之前
I 在光标所在行的行首插入新增文本
```
### 5.3.2 附加命令
**附加字符**
```
a 在该命令之后输入的字符都插到光标之后。
A 在光标所在行的行尾添加文本。
```
### 5.3.3 打开命令
**打开字符**
```
o 在光标所在行的下面新开辟一行,随后输入的文本就插入在这一行上。
O 在光标所在行的上面新开辟一行,随后输入的文本就插入在这一行上。
```
### 5.3.4 插入方式下光标移动
利用键盘上的四个方向可以在插入方式下移动光标。
利用<Backspace>可将光标从当前行上回退一个字符,并且删除光标之前的一个字符。
## 5.4 光标移动命令
> 注:如果在相应命令的前面加上一个数字n ,那么,就把光标相应移动n个字符。例:
>
> 6l,则向右移6个字符(但不能跨行); 4h ,则向左移动4个字符 (但不能跨行);
>
> 3+,则向下移3行,光标位于行首; 6k ,则光标上移6行,列数不变。
**向右(向前)移动一个字符**
```
使用命令(键)l(小写字母)、<Space> 、右向键将光标向右移动一个字符。
```
**向左(向后)移动一个字符**
```
使用命令(键)h (小写字母)、<Backspace>、左向键将光标向左移动一个字符。
```
**移到下一行**
```
使用命令(键)+、<Enter>将光标移到下一行的开头。命令(键)j、<Ctrl>n和下向键分别将光标向下移一行,但所在列不变。
```
**移到上一行**
```
使用命令(键)-、k(小写字母)、<Ctrl>P 、上向键将光标上移一行。
```

**移动至首行**
```
使用命令(键)^ 或0(数字0)将光标移到当前行的开头。
```
**移动至行尾**
```
使用命令(键)$将光标移至当前行的行尾,停在最后一个字符上。
```
**移至指定行**
```
使用命令(键)[行号]G将光标移至由行号所指定的行的开头。
```
**移至指定列**
```
使用命令(键)[列号]| 将光标移至当前行指定的列上。
```
## 5.5 文本修改
### 5.5.1 删除
**删除字符**
```
命令x(小写字母)删除光标所在的字符。
命令X(大写字母)删除光标前面的那个字符。
```
**删除文本对象**
```
命令dd删除光标所在的整行。
命令D从光标位置开始删除到行尾。
组合命令d+<光标移动命令>删除从光标位置开始至光标移动命令限定的位置之间的所有字符。
```
### 5.5.2 复制
**复制字符**
```
u 取消前面刚执行的插入或删除命令的效果,恢复到此前的情况。
U 总是把当前行恢复成它被编辑之前的状态。
```
### 5.5.3 重复
**重复字符**
**·**
```
·(圆点)在命令方式下,重复执行前面最近一次插入命令或删除命令。
```
### 5.5.4 修改
**修改字符**
**c**
```
c后面紧随光标移动命令(用来限定删除文本的范围),之后是新输入的文本,最后单击 < Esc >键。
```
**C**
```
C后面紧接新输入的文本,最后单击< Esc >键。它等价于:c$
```
**cc**
```
命令cc删除光标所在行整行(不是行的一部分),用随后输入字符串替代。其余作用与C命令相同。
```
### 5.5.5 取代
**取代字符**
**r**
```
命令r用随后输入的单个字符取代光标所在的字符
```
**R**
```
命令R用随后输入的文本取代光标所在字符及其右面的若干字符。
```
### 5.5.6 替换
**替换字符**
**s**
```
命令s(小写)用随后输入的的正文替换光标所在的字符。
```
**S**
```
命令S(大写)用新输入的正文替换整个当前一行
```
## 5.6 字符串检索
### **向前检索**
**一般格式**
```
命令基本格式是: /模式〈Enter〉
```
### 向后检索
**一般格式**
```
命令基本格式是:?模式 〈Enter〉
```
