vi简介
0.前言
vi出自单词“visual”,含义是能够在视频终端上用移动光标来进行编辑。
在图形界面编辑器出现之前是行编辑器的天下,用户每天只能在一行文本上进行编辑。使用行编辑器的时候,用户需要告知编辑器是在哪一行进行操作
比如添加或者删除。由于vi融合了强大的恒编辑器ex,vi用户也可以同时使用行编辑器的命令。
大多数Linux发行版配备的并不是真正的vi,而是vi的加强版–vim(Vi
Improved的编写).Vim是传统的Unix系统vi的实质性改良版。通常,vim的硬连接指向Linux系统的vi名称。
对于vi或者vim的使用还是遵循顺能生巧的硬道理。本文只是一些简单操作教程。
1.基本操作
1.1 启动和退出vi
在终端中输入vi
启动编辑,界面如下:
输入以下命令退出vi
:q
:q! # 如果因为某些原因vi不能退出,通过此命令强制退出
如果用户不能确定vi所处的状态,可以按两次Esc返回初始状态。
1.2 编辑模式
在vi下创建文件vi test.txt
,正常情况下屏幕显示如下所示:
开头的波浪线代表来了该行没有任何内容,此时的test.txt为空文件,在左下角可以发现New File
的字样。需要注意的是vi分为命令以及插入两种模式,在自动进入vi,编辑器处于的是命令模式,此时每个 键盘按键都是一个命令。
1.3 插入模式
如果需要对文件添加内容,首先需要按i/I
进入插入模式,界面左下角所示:
1.4 文件保存
&emisp;修改文件之后,需从插入模式切换到命令模式,输入ex命令(也就是按下’:’),这样就会有一个冒号出现在屏幕的最底部。
要将文件写入硬盘,在冒号后输入w,命令如下:
:w # 保存
:wq # 保存并退出
:wq! # 保存并强制退出
1.5 光标操作
在命令模式下,为了使用操作者只在键盘上就可以完成操作,
vi提供了很多光标的操作方式(为了方便进行行操作以及定位代码位置,在命令模式下输入:set number
,即可显示行号)其中一些与less命令共用,其中部分操作方式如下表:
键 | 光标操作 |
---|---|
右方向键 | 右移一位 |
左方向键 | 左移一位 |
下方向键 | 下移一位 |
上方向键 | 上移一位 |
0 | 回归本行开头 |
H | 移动到屏幕顶部行首 |
M | 移动到屏幕中间行首 |
L | 移动到屏幕底部行首 |
nM | 移动到屏幕顶端往下的第n行 |
nL | 移动到屏幕底部往上的第n行 |
Ctrl+G | 显示目前行信息 |
nG | 跳到第n行 |
1.6 基本编辑
插入、删除、剪切、复制等构成基本的文本编辑操作,vi也以其特殊的方式支持这些操作。
同时vi还可支持有限形式操作撤销操作,在命令模式下按U
就可以撤销用户最后一步操作。
1.6.1 添加文本
除了上文中使用i
进入插入模式。但是光标不能跳出行末,所以单纯使用i
并不能完成在文本
末尾添加内容的任务。为此vi提供了在行末添加文本的a命令,末尾并使用a命令时,光标就会越过文本的末尾,同时vi进入插入模式。
这样用户就可以在行末添加文本。
1.6.2 插入一行
插入文本的另一种方式就是在文本中重开一行,即在两行现存的文字中间插入空白行并进入插入模式,如下表所示:
命令 | 开行 |
---|---|
o | 当前行的上方插入 |
O | 当前行的下方插入 |
在下图中在"word"后使用O命令在下面插入空白行。
1.6.3 删除文本
vi中使用到的删除命令主要如下:
命令 | 删除内容 |
---|---|
x | 当前字符 |
nx | 当前字符和之前n-1个字符 |
dd | 删除当前行 |
ndd | 删除当前行和之后的n-1行 |
dW | 当前字符到下一个单词的起始 |
d$ | 当前字符到当前行的末尾 |
d0 | 当前字符到当前行的起始 |
d^ | 当前字符到当前行下一个非空字符 |
dG | 当前字符到文件末尾 |
dnG | 当前行到文件的第20行 |
1.6.4 剪切、复制和粘贴文本
命令d
不只是删除文本,而是在"剪切"文本,使用p
将内容粘贴到光标之后
;使用P
命令将内容粘贴到光标之前.
采用y
命令实现对内容的复制,命令的范例基本与d
命令类似。
1.7 查找和替换
vi还提供了在一行内或者整个文件中,根据条件进行搜索。vi还可以执行
文本替换工作
1.7.1 行内搜索
命令f
在行内进行搜索,并将光标移动到搜索的下一个指定字符
1.7.2 文件内搜索
命令/
可以完成对单词或者短语的搜索。在命令模式下,输入/
后
在
屏幕的底部会出现"/"符号,接下来只需要输入想要输入的字符即可,搜索到的目标短语如下图:
输入Enter已结束,光表会移动到目标短语之前,接下来,输入n,光标将继续输入到
下一个目标短语,对于采用正则表达式的方式此处不作介绍。
1.7.3 全局搜索和替换
vi使用ex命令来执行几行之内或者整个文件中的搜索和替换操作。采用下面命令可进行
短语替换。
:/s/hello/hi/gc
上述的命令解释如下表:
组成 | 含义 |
---|---|
: | 冒号用于启动一条ex命令 |
% | 确定操作范围,%简介代表了从文件第1行到最后一行。还可以使用1,3这种数字确定范围 |
s | 指定具体操作–替换 |
Line/line | 搜索和替换文本 |
g | 代表全局,如果缺失,那么只替换每一行第一个符合条件的实例 |
c | 替换之前请求用户确定,缺失的话直接替换 |
使用c
后,vi在编辑器中会出现确认选择:
功能键 | 含义 |
---|---|
y | 执行操作 |
n | 跳过操作 |
a | 执行此次替换后的所有替换 |
q或者Esc | 停止替换 |
l | last的缩写,执行此次替换并退出替换 |