目录

linux 纯文本编辑器 vi

前言

vi 编辑器是所有 Unix 及 Linux 系统下标准的文本编辑器,相当于 windows 系统中的记事本一样,它是我们使用 Linux 系统不能缺少的工具。而 vim 视为 vi 的升级版本,基础功能完全一样,只是一些功能的增强以及可用不同的颜色对文本关键字进行加亮,所以其更适合编写程序使用。

简介

vi 工作模式

vi 编辑器是所有 Unix 及 Linux 系统下标准的纯文本编辑器。对 Unix 及 Linux 系统的任何版本,vi 编辑器是完全相同的。
官方网站:https://www.vim.org/

vi 分为三种工作状态:
1、命令模式(command mode);
2、插入模式(insert mode);
3、底行模式(last line mode)。

工作模式
应用情景
命令模式 控制屏幕光标的移动,对字符/字段/行的删除/复制/粘贴操作
插入模式 纯文本输入
底行模式 文件保存/退出 vi,设置编辑环境,查找/替换字符串操作
工作模式
切换方法
命令模式 i 进入【插入模式】;
: 进入【底行模式】。
插入模式 ESC进入【命令模式】
底行模式 ESC进入【命令模式】

使用

vi 编辑文本

在终端机上输入vi命令即可进入 vi 编辑器编辑对应的文件,具体操作如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
sudo vi /home/root/read.txt     # 使用 vi 编辑 read.txt 文档

   #【命令模式】--------------------------------------
   #『光标』+++++++
   # [h  ] 光标左移
   # [j  ] 光标下移
   # [k  ] 光标上移
   # [l  ] 光标右移
   # [^  ] 光标移到行首
   # [$  ] 光标移到行尾
   # [5- ] 光标向上移动5行
   # [5+ ] 光标向下移动5行
   # [5G ] 光标移动到第5行
   #『插入』+++++++
   # [i  ] 在光标前面插入【进入插入模式】
   # [I  ] 所在行最前插入【进入插入模式】
   # [a  ] 在光标后面插入【进入插入模式】
   # [A  ] 所在行最后插入【进入插入模式】
   #『删除』+++++++
   # [x  ] 删除光标后[一个字符]
   # [X  ] 删除光标前[一个字符]
   # [6x ] 删除光标后[六个字符]
   # [8X ] 删除光标前[八个字符]
   # [dd ] 删除光标所在的[一行]
   # [9dd] 删除光标所在行开始的[九行]
   #『复制』+++++++
   # [yw ] 复制光标后[一段字段] (以空格或符号分隔开的字段!!)
   # [yy ] 复制光标所在的[一行]
   # [5yw] 复制光标后[五段字段] (以空格或符号分隔开的字段!!)
   # [9yy] 复制光标所在行开始的[九行]
   #『粘贴』+++++++
   # [p  ] 粘贴
   #『撤消』+++++++
   # [u  ] 最后一次修改[撤消&重做]
   # [Ctrl + r]  可多次[撤消]
   # 
   #【底行模式】--------------------------------------
   #『光标』+++++++
   # [:5       ] 光标移动到第5行(要按回车执行,下面操作都一样)
   # [:set nu  ] 显示行号
   # [:set nonu] 不显示行号
   #『查找』+++++++
   # [/ab] 向下查找"ab"字符串,[n]继续查找下一个
   # [?ab] 向上查找"ab"字符串,[n]继续查找上一个
   #『替换』+++++++
   # [:      s/str1/str2/g] 所在行中所有 str1 字符串替换为 str2
   # [:%     s/str1/str2/g] 从[首行]到[最尾]行中所有"str1"字符串替换为"str2"
   # [:1,$   s/str1/str2/g] 第[01]行到[最尾]行中所有"str1"字符串替换为"str2"
   # [:6,20  s/str1/str2/g] 第[06]行到第[20]行中所有"str1"字符串替换为"str2"
   # [:.,20  s/str1/str2/g] [光标]行到第[20]行中所有"str1"字符串替换为"str2"
   # [:.,$-5 s/str1/str2/g] [光标]行到尾[05]行中所有"str1"字符串替换为"str2"
   #『退出』+++++++      └→g表示替换所有匹配项
   # [:q!] 不保存退出
   # [:wq] 保存退出
   # [:w ] 保存文档(但不退出)
   # [:w filename] 另存为叫filename的文件(但不退出)

补充说明
vi 的查找与替换操作支持正则表达式,但是不支持限定操作(主要包括:{}、?、+、|),没能很好体现正则表达式优势。关于正则表达式相关语法知识,请移步《正则表达式语法》!