Week 4 vi编辑器基本操作及终端命令

1. 命令状态和文本状态

vi/vim编辑器有命令状态和文本状态
按Esc进入命令状态
按i或a进入文本状态

按i是在当前字符前插入正文
按a是在当前字符后插入正文
在命令状态下可以输入相关命令
例如:set查看偏好设置,:set number每行左边显示行号
需要说明的是像这种临时设置,在下次进入终端时会被清除
Week 4 vi编辑器基本操作及终端命令

2. 光标移动

1)按字符移动

在命令状态下通过hjkl移动光标,类比方向键的左h 下j 上k 右l,当然现在一般都可以用方向键来代替。
在命令状态下在hjkl前加一个整数表示将该命令执行多少次。

例如20h,表示光标左移20列

2)快速移动

移动到行首 :^
(在某些版本下会显示E492:不是编辑器的命令)可以用来0替代

移动到行尾 :$

移动一个单词
向左移动一个单词 b
向右移动一个单词 w
同样可以在命令前加整数,表示移动x个单词

3. 翻页

ctrl-b 向后翻页(向上翻页)
ctrl-f 向前翻页(向下翻页)
可以用Pg-UpPg-Dn代替
当然同样可以在命令前加整数,表示翻x页

4. 光标移动到指定行

移动到指定第2行 :2

5. 括号配对

%把光标移动到任一括号上,按%,光标会自动移动到与之配对的括号处。

6. 删除字符命令

删除字符
删除当前字符x
删除当前光标及之后3个字符3x

删除行
删除当前行dd
删除当前行及之后的3行3dd

7. 字符替换

替换光标处的字符r
一次只能替换一个字符

8. 撤回和重复

撤回上一个编辑操作u
重复上一次的编辑操作.(圆点)

9. 文件操作

<CR>表示回车

1)存盘

存盘退出

Shift-ZZ
:wq<CR>

存盘不退出

:w<CR>

不存盘退出

:q!<CR>

2)文件写入

读入其他文件file2并写入当前文件file1

:r file2

写文件,将指定行的内容写入指定文件中

比如将当前文件的第20行至第30行的内容写入到file2
:20,30w file2
如果file2没有创建 那么会直接写入;
如果已存在file2,会提示是否强制覆盖(在w后加感叹号!)
:20,30w! file2

3)剪贴板

剪切

:10,50d剪切第10-50行的内容
:1,.d剪切第一行至当前行的内容(圆点.表示当前行)
:.,$d剪切当前行至文件最后一行的内容

拷贝

:10,50y拷贝第10-50行的内容

粘贴

p

4)块操作

复制

:10,20co30<CR>复制第10-20行到第30行(不含)以下

移动

:10,20m30<CR>移动第10-20行到第30行(不含)以下

5)行合并、刷屏、状态显示

两行合并

J当前行和下一行合并为同一行

刷新屏幕显示

Ctrl-l

状态显示

Ctrl-g
在屏幕最下面一行显示当前文件名,总行数,当前行号,光标所在的第几个字符,文件是否被修改过等信息。
Week 4 vi编辑器基本操作及终端命令

10. 模式查找、替换

用正则表达式来描述一个字符串模式

1)查找命令

/pattern
例如/[0-9][0-9]*

继续查找
n向下查找查找下一个
N向上查找
是循环式搜索

2)替换命令

:n1,n2s/pattern/string/g
将当前文件第n1至n2行中含pattern的内容替换成string
g表示有重复内容则全部替换,不加g则默认替换每行第一处

因为替换命令中的分隔符默认为/,但有时候我们要替换的正则表达式内含/,就会导致混乱,虽然一般可以用转义字符\/来表示,但是会比较影响阅读;
这种情况下分隔符还可以选择:^

更灵活的替换

在模式描述中增加\(\)
:47,49s/\(da\)s\([cs]\)/\0ttt/g
\0 \1 \2 ……来顺序替代圆括号对包含的内容
Week 4 vi编辑器基本操作及终端命令
Week 4 vi编辑器基本操作及终端命令

11. 死机问题Ctrl-S和Ctrl-Q

vi编辑状态时按Ctrl-S会进入流量控制状态,这种情况下按其他按键屏幕都没有反应,只有按Ctrl-Q才能解除流量控制

流量控制的必要性:
1.终端显示速度跟不上主机发送速度
2.主机送来的数据终端需要打印出来,但是打印速度慢
3.暂停显示,对终端接收的数据进行分析

有两种流量控制方法
1.硬件方式
RS232接口的CTS(Clear To Send)信号线

2.软件方式
利用流控字符Xon和Xoff
对应于ASCII码表中的码值为17和19的控制字符
对应于键盘上的Ctrl-S和Ctrl-Q

12. 意外中止(进程被挂起suspend)

vi存盘命令是Shift-ZZ,误按Ctrl-Z会导致当前运行进程被挂起,暂停运行,但进程还在,只是处于stopped状态。

jobs可以查看当前被stopped的进程有哪些
fg %2%2都可以将被stopped的2号进程恢复
Week 4 vi编辑器基本操作及终端命令

13. Backspace无效的问题

是因为当前终端的行律设置不正确
stty -a可以查看当前行律设置
Week 4 vi编辑器基本操作及终端命令
Backspace按键对于的ACII码是控制字符Ctrl-H
若想设置可以用stty erase ^H将Ctrl-H设为删除符,那么之后Ctrl-H和Backspace都可以作为删除符。

14. 屏幕乱码

Linux默认处理的是文本文件,如果不小心在终端打开了非文本信息,会导致屏幕乱码,这种情况只有重新登录了。