目录
1. 命令状态和文本状态
vi/vim编辑器有命令状态和文本状态
按Esc进入命令状态
按i或a进入文本状态
按i是在当前字符前插入正文
按a是在当前字符后插入正文
在命令状态下可以输入相关命令
例如:set
查看偏好设置,:set number
每行左边显示行号
需要说明的是像这种临时设置,在下次进入终端时会被清除
2. 光标移动
1)按字符移动
在命令状态下通过hjkl移动光标,类比方向键的左h 下j 上k 右l,当然现在一般都可以用方向键来代替。
在命令状态下在hjkl前加一个整数表示将该命令执行多少次。
例如20h,表示光标左移20列
2)快速移动
移动到行首 :^
(在某些版本下会显示E492:不是编辑器的命令)可以用来0替代
移动到行尾 :$
移动一个单词
向左移动一个单词 b
向右移动一个单词 w
同样可以在命令前加整数,表示移动x个单词
3. 翻页
ctrl-b
向后翻页(向上翻页)
ctrl-f
向前翻页(向下翻页)
可以用Pg-Up
和Pg-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
在屏幕最下面一行显示当前文件名,总行数,当前行号,光标所在的第几个字符,文件是否被修改过等信息。
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 ……
来顺序替代圆括号对包含的内容
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号进程恢复
13. Backspace无效的问题
是因为当前终端的行律设置不正确
用stty -a
可以查看当前行律设置
Backspace按键对于的ACII码是控制字符Ctrl-H
若想设置可以用stty erase ^H
将Ctrl-H设为删除符,那么之后Ctrl-H和Backspace都可以作为删除符。
14. 屏幕乱码
Linux默认处理的是文本文件,如果不小心在终端打开了非文本信息,会导致屏幕乱码,这种情况只有重新登录了。