vi的基本使用
廖家龙 用心听,不照做

本文目录

  1. 使用vi的原因
  2. 启动、退出、保存vi
  3. vi的三种工作模式
  4. 移动光标
  5. 基本编辑 a.撤销命令 b.删除文本 c.剪切、复制和粘贴文本 d.合并行
  6. 查找和替换 a.行内搜索 b.搜索整个文件 c.全局搜索和替换
  7. 编辑多个文件 a.切换文件 b.载入更多的文件 c.文件之间的内容复制 d.插入整个文件

使用vi的原因:

  1. vi总是可用的,如果用户面前的系统没有图形界面,例如是远程服务器或者是本地系统的X配置不可用,那么vi就会成为救命的稻草。POSIX(一种UNIX系统的程序兼容标准)要求系统必须配备有vi
  2. vi是轻量级的软件,运行速度快。对很多任务来说,启动vi比在菜单中找到一个图形界面编辑器并等待几兆大小的编辑器载入要容易的多。另外,vi的设计还非常利于打字
  3. 用户不想被其他Linux和UNIX用户蔑视

启动、退出、保存vi:

启动vi:vi 新文件名

退出、保存vi:

1
2
3
4
5
6
7
8
9
10
esc
:w 保存文件但不退出vi
:w file 将修改另外保存到file中,不退出vi(另存为)【此命令在以新名称保存文件的同时,并不更改编辑中的原文件的名称,当用户继续编辑时,编辑的还是原文件而不是新文件】
:w! 强制保存,不退出vi
:wq 保存文件并退出vi
:wq! 强制保存文件,并退出vi
:q 不保存文件,退出vi
:q! 不保存文件,强制退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑
命令模式下输入ZZ 保存当前文档并退出vi

vi的三种工作模式:

如果用户阅读vi的说明文档,会困惑的发现命令模式被称为普通模式,而使用ex命令则被称为命令模式


移动光标(命令模式下):

  1. l或右方向键:右移一位
  2. h或左方向键:左移一位
  3. j或下方向键:下移一行
  4. k或上方向键:上移一行
  5. 数字0:至本文开头


基本编辑:

在命令模式下按u键可以撤销用户多步操作

删除文本(命令模式下):

1
2
x:当前字符
3x:当前字符和之后2个字符

剪切(d)、复制(y)和粘贴(p)文本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
命令d不只是删除文本,而是在剪切文本,用户每次使用d命令之后,都会复制删除的内容进缓存(类似剪贴板),然后用户就可以使用p命令将缓存中的内容粘贴到光标之后或使用P命令将内容粘贴到光标之前

dd:当前行
5dd:当前行和之后4行
dW:当前字符到下一单词的起始
d$:当前字符到当前行的末尾
d0:当前字符到当前行的起始
d^:当前字符到当前行下一个非空字符
dG:当前行到文件末尾
d20G:当前行到文件第20行

yy:当前行
5yy:当前行和之后4行
yW:当前字符到下一单词的起始
y$:当前字符到当前行的末尾
Y0:当前字符到当前行的起始
y^:当前字符到当前行下一个非空字符
yG:当前行到文件末尾
y20G:当前行到文件第20行

合并行(J):vi在行的概念上非常严格,通常来说,将光标移动到行的末端并删除行的末尾字符并不能将此行与下一行合并


查找和替换:

行内搜索:命令f在行内进行搜索,并将光标移至搜索到的下一个指定字符。比如命令fa就会将光标移动到本行下一处出现字符a的地方,在执行过一次行内搜索之后,输入分号可以使vi重复上一次搜索

搜索整个文件:命令“/”可以完成对单词或短语的搜索,当用户使用“/”命令后,一个“/”符号会出现在屏幕的底部。接下来,输入需要搜索的单词或短语,以Enter结束,光标就会移动到下一处包含被搜索字符串的地方,使用n命令可以重复此搜索

全局搜素和替换:vi使用ex命令来执行几行之内或者整个文件中的搜索和替换操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
:%s/Line/line/g
:冒号用于启动一条ex命令
%确定了操作作用的范围,%简洁的代表了从文件的第一行到最后一行(还可以用1,2表示从第一行到第二行),如果不明确指出命令的作用范围,那么命令只会在当前行生效
s指定了具体的操作:替换
/Line/line搜索和替换的文本
g代指global(全局),也就是说对搜索到的每一行的每一个实例进行替换,如果g缺失,那么只替换每一行第一个符合条件的实例

在命令末尾添加c,则命令在每次替换之前都会请求用户确认:

:%s/Line/line/gc
y:执行替换
n:跳过此次替换
a:执行此次替换和之后的所有替换
q或者ESC:停止替换
l:执行此次替换并退出替换,是last的缩写
Ctrl-E,Ctrl-Y:分别是向下滚动和向上滚动,能用于查看替换处的上下文

编辑多个文件:

1
vi file1 file2 file3… 打开多个文件

切换文件:

1
:n下一个文件 :N上一个文件

当用户从一个文件切换到另一个的时候,vi要求用户必须先保存对当前文件做出的修改才能切换到其他文件。若要放弃对文件的修改并使vi强制切换到另一个文件,可在命令后添加感叹号!

1
2
:buffers   查看正在编辑的文件列表
:buffer 2 切换到文件2

载入更多的文件:

1
:e 文件名【使用此命令载入的文件不会响应:n或:N命令,而需要使用:buffer加文件编号来切换文件】  

文件之间的内容复制:使用之前的复制粘贴命令即可

插入整个文件:

1
:r text1  将text1文件内容插入到当前文件光标处