1、vi
-
vi是Linux系统中最经典的文本编辑器。 -
vi的核心设计思想:让程序员的手指始终保持在键盘的核心区域,就能完成所有的编辑操作。
键盘核心区域示意图
-
没有图形界面的环境下,要编辑文件,
vi是最佳的选择。 -
vi编辑器在系统管理、服务器管理编辑文件时,其功能永远不是图形界面的编辑器所能比拟的。 -
在实际应用中,对
服务器上的文件进行简单的修改可使用ssh命令远程登录到服务器,并使用vi编辑器进行快速的编辑。
常见需要修改的文件
-
源程序。 -
配置文件。如:ssh的配置文件~/.ssh/config。
vi的特点
-
没有图形界面的功能强大的编辑器。 - 只能是编辑
文本内容,不能对字体、段落进行排版。 -
不支持鼠标操作。 -
没有菜单。 -
只有命令。
2、vi和vim
-
vim是从vi发展出来的一个文本编辑器,它支持代码补全、编译及错误跳转等方便编程的功能,在程序员中被广泛使用,被称为编辑器之神。 - 在很多
Linux发行版中,直接把vi做成了vim的软链接。也就是说在终端中输入vi命令打开的是vim文本编辑器。
3、打开和新建文件
vi 文件名
- 文件
已存在,就会打开这个文件。 - 文件
不存在,将会新建一个文件。
打开文件并定位到指定行
在实际应用中,有时候我们需要打开一个文件并定位到指定行。比如,在编译运行某个程序时,发现某行代码有错误,就可以使用下面的命令快速定位到出错代码的位置。
vi 文件名 +行号
- 只有
+而不指定行号,就会定位到文件的末尾。 - 只有
vi 文件名,则会定位到文件的开头。
4、异常处理
- 如果
vi异常退出,在磁盘上可能会保存有交换文件。 - 再次使用
vi编辑该文件时,将会看到如下图所示的提示信息。这时只需按下键盘上的d键删除交换文件即可。
异常处理示意图
5、vi的三种工作模式
1) 命令模式
- 使用
vi打开文件首先进入的是命令模式。命令模式是vi的入口。 - 通过
命令对文件进行常规的编辑操作。包括定位、翻页、复制、粘贴、删除等等。 - 其他图形界面的编辑器中,通过
快捷键或鼠标实现的操作,在终端中都用命令模式来实现。
2) 末行模式
- 退出
vi返回控制台,需要在末行模式下输入命令。 - 末行模式是
vi的出口。
末行模式命令。
| 命令 | 作用 |
|---|---|
:w |
保存 |
:q |
退出。如果没有保存,不允许退出 |
:q! |
强制退出,即不保存退出 |
:wq |
保存并退出 |
:x |
保存并退出 |
3) 编辑模式
- 编辑文字。
三种工作模式之间的切换示意图
6、常用命令
- 重复次数
命令模式下,先输入一个数字,再跟上一个命令(可以是移动选择命令,也可以是编辑操作命令),可以让该命令重复执行指定次数。
- 移动和选择
vi之所以快,关键在于能够快速定位到要编辑的代码行。
移动命令可以和编辑操作命令组合使用。
- 编辑操作
删除、复制、粘贴、替换、缩排。
-
撤销和重复
-
查找替换
-
编辑
7、移动命令
-
上、下、左、右
| 命令 | 作用 |
|---|---|
h |
向左 |
j |
向下 |
k |
向上 |
l |
向右 |
-
行内移动
| 命令 | 作用 |
|---|---|
w |
向后移动一个单词 |
b |
向前移动一个单词 |
0 |
行首 |
^ |
行内的第一个非空字符 |
$ |
行尾 |
-
行数移动
| 命令 | 作用 |
|---|---|
gg |
文件顶部 |
G |
文件末尾 |
ngg |
移动到指定数字的行(其中n为数字) |
nG |
移动到指定数字的行(其中n为数字) |
:n |
移动到指定数字的行(其中n为数字) |
-
屏幕移动
| 命令 | 作用 |
|---|---|
Ctrl + b |
向上翻页 |
Ctrl + f |
向下翻页 |
H |
屏幕顶部 |
M |
屏幕中间 |
L |
屏幕底部 |
-
段落移动(程序)
在程序开发过程中,一段功能相关的代码通常会写在一起,并且这段代码之间没有空行,这就是段落。vi中使用空行来区分段落。
| 命令 | 作用 |
|---|---|
{ |
上一段 |
} |
下一段 |
-
括号切换(程序)
在程序中开发过程中,()、[]和{}的使用频率很高,并且都是成对出现的。
| 命令 | 作用 |
|---|---|
% |
括号匹配及切换 |
-
标记(程序)
| 命令 | 作用 |
|---|---|
mx |
添加标记x,其中x为标记名称 |
'x |
直接定位到标记x所在的位置 |
说明
- 在程序开发过程中,若某一行代码需要
作稍后处理,就可以对这行代码进行标记。这样就可以在需要时快速跳转回来或执行其他的编辑操作。 - 标记并
不会高亮显示字体,只是一个隐藏的标记。 - 标记名称只能是
a~z或A~Z之间的任意一个字母。 - 添加了标记的
行如果被删除,则标记也同时被删除。 - 在
其他行中添加了相同名称的标记,则之前添加的标记会被替换。
8、选中文本
-
vi选中文本,需要先用Visual命令切换到可视模式。 -
vi提供了三种可视模式。
| 命令 | 模式 | 作用 |
|---|---|---|
v |
可视模式 | 从光标位置开始选择文本 |
V |
可视行模式 | 选中光标经过的完整行 |
Ctrl + v |
可视块模式 | 选中垂直方向的文本 |
-
可视模式下可以与移动命令组合使用。如:ggVG命令能够选中所有文本。 -
Esc键可撤销选中,返回命令模式。
9、撤销和恢复撤销
| 命令 | 作用 |
|---|---|
u |
撤销上一步操作 |
Ctrl + r |
恢复上一步操作 |
10、 删除文本
| 命令 | 作用 |
|---|---|
x |
删除光标所在字符,或删除选中文本 |
d + 移动命令 |
删除移动命令对应的内容 |
dd |
删除光标所在行 |
D |
删除光标所在位置到行尾之间的内容 |
说明
-
可视模式选中的文本,无论用x命令还是d命令,都可以删除选中的文本。
删除命令和移动命令常见的组合
| 组合 | 作用 |
|---|---|
dw |
删除从光标所在位置到单词末尾的内容 |
d0 |
删除从光标所在位置到行首的内容 |
d} |
删除从光标所在位置到段落结尾的内容 |
ndd |
删除从光标所在行开始往下的(n-1)行(其中n为数字) |
dnG |
删除从光标所在行到指定行号的内容(其中n为行号) |
d'x |
删除从光标所在行到标记x所在行的内容(其中x为标记名称) |
注意
- 删除的内容包括
光标所在的位置以及光标所在的行。
11、复制和粘贴
-
vi提供了一个被复制文本的缓冲区。 -
复制命令将选中的文本保存在缓冲区。 -
删除命令删除的文本也被保存在缓冲区。 -
粘贴命令可以将缓冲区的文本插入到光标所在的位置。
| 命令 | 作用 |
|---|---|
y + 移动命令 |
复制 |
yy |
复制一行。nyy可复制多行(其中n为数字) |
p |
粘贴。np可粘贴多次(其中n为数字) |
说明
-
d、x命令类似于图形界面的剪切操作(Ctrl + X)。 -
y命令类似于图形界面的复制操作(Ctrl + C)。 -
p命令类似于图形界面的粘贴操作(Ctrl + V)。
注意
-
vi的文本缓冲区只有一个。所以进行多次的复制、剪切操作,之前缓冲区的内容会被覆盖。 -
vi的文本缓冲区与系统的剪贴板并不是同一个。所以在其他软件中使用Ctrl + C复制的内容,在vi中不能通过p命令粘贴,只能在编辑模式下使用鼠标右键粘贴。
12、替换
| 命令 | 作用 | 工作模式 |
|---|---|---|
r |
替换当前字符 | 命令模式 |
R |
替换光标所在位置及往后的字符 | 替换模式 |
说明
-
R命令可进入替换模式,替换完成后按Esc键可返回命令模式。 -
替换命令的作用是不进入编辑模式,对文件进行轻量级修改。
13、缩排和重复执行
- 在程序开发过程中,
缩排命令对于统一增加代码的缩进非常有用。 - 在程序中,
缩进通常用来表示代码的归属关系。代码前面的空格越少,级别越高;代码前面的空格越多,级别越低。 -
增加缩进:一次性在选中的代码前增加4个空格。 -
减少缩进:一次性在选中的代码前删除4个空格。
| 命令 | 作用 |
|---|---|
>> |
增加缩进 |
<< |
减少缩进 |
. |
重复上次命令 |
说明
- 在
可视模式中,缩排命令只需用一个>或<。
14、查找
-
常规查找
| 命令 | 作用 |
|---|---|
/str |
查找str |
查找到指定内容后,使用Next命令查找下一个出现的位置。
| 命令 | 作用 |
|---|---|
n |
查找下一个 |
N |
查找上一个 |
-
单词快速匹配
| 命令 | 作用 |
|---|---|
* |
往后查找当前光标所在的单词 |
# |
往前查找当前光标所在的单词 |
说明
- 查找到的指定内容会以
高亮的方式显示。 - 如果不想看到
高亮显示,查找一个文件中不存在的内容即可。
15、查找并替换
-
vi中查找和替换命令需要在末行模式下执行。
1) 全局替换
一次性替换文件中出现的所有旧文本。
:%s/旧文本/新文本/g
2) 可视区域替换
可视模式下选中要替换文本,使用下面的命令替换选中文本中出现的所有旧文本。
:s/旧文本/新文本/g
3) 确认替换(推荐使用)
全局替换命令末尾的g改成gc,则在替换时会有提示,这就是确认替换。
:%s/旧文本/新文本/gc
提示之后可能要输入的命令:
| 命令 | 作用 |
|---|---|
y |
替换。如果有多个,则一次只替换一个 |
n |
不替换。如果有多个,则一次只取消替换一个 |
a |
替换所有 |
q |
退出替换 |
l |
替换最后一个,并把光标移动到行首 |
Ctrl + E |
向下滚屏 |
Ctrl + Y |
向上滚屏 |
16、插入
插入命令可以从命令模式切换到编辑模式 。
| 命令 | 作用 |
|---|---|
i |
在当前字符前插入文本 |
I |
在行首插入文本 |
a |
在当前字符后插入文本 |
A |
在行尾插入文本 |
o |
在当前行下面插入一空行,并把光标移动到空行行首 |
O |
在当前行上面插入一空行,并把光标移动到空行行首 |
1) 插入命令与数字的组合使用
-
在程序开发过程中,可能会遇到需要
重复N次的情况。如:需要在
vi中输入N行Hello World。可按如下操作进行:① 首先在命令模式中输入数字
N,表示要重复N次。
② 紧接着输入i进入编辑模式。
③ 在编辑模式中输入要重复的内容,即Hello World。
④ 最后按Esc键从编辑模式返回到命令模式,返回之后vi就会把②、③两步的操作重复执行(N - 1)次。
注意
- 正常开发时,进入编辑模式前
不要输入数字。
2) 利用可视块给多行代码添加注释
-
在程序开发过程中,可能会遇到需要
一次性给多行代码添加注释的情况。如:需要给
C语言的某一块代码添加注释。可按如下操作进行:① 首先在命令模式中把光标移动到需要添加注释的
第1行代码,并按数字0来到行首。
② 紧接着按Ctrl + v进入可视块模式。
③ 在可视块模式中按j键向下选中要添加注释的代码。
④ 再接着输入I进入编辑模式,并在行首插入注释符,即//。
⑤ 最后按Esc键从编辑模式返回到命令模式,返回之后vi就会在之前选中的每一行代码前插入注释符//。
注意
- 在
可视块模式中使用i不能进入编辑模式,需要使用I进入编辑模式。
17、末行命令扩展
末行命令主要针对文件进行操作,包括保存、退出、保存并退出、搜索并替换、另存为、浏览文件、新建文件等等。
| 命令 | 作用 |
|---|---|
:e . |
打开内置的文件浏览器,浏览当前目录下的文件。使用j、k、Enter键可浏览或打开文件 |
:e 文件名 |
切换到当前目录下指定的文件。不需要退出vi
|
:n 文件名 |
新建文件 |
:w 文件名 |
另存为。编辑的仍然是当前文件,不会切换文件 |
:%s///gc |
确认搜索并替换 |
说明
- 切换文件之前,必须保证当前文件
已保存。 - 在程序开发过程中,可以使用
w命令进行阶段性备份。
18、分屏
分屏命令属于vi的高级命令,使用它可以同时编辑和查看多个文件。
| 命令 | 作用 |
|---|---|
:sp [文件名] |
横向分屏 |
:vsp [文件名] |
纵向分屏 |
说明
-
文件名不知道的情况下,可以使用:sp .命令(或:vsp .命令)。此命令打开的是内置的文件浏览器,可浏览当前目录下的文件。
切换分屏窗口
分屏窗口基于window,在实际操作时表现为基于Ctrl + W这个快捷键。也就是说,使用下面的命令之前需要先按Ctrl + W。
| 命令 | 作用 |
|---|---|
w |
切换到一个窗口 |
r |
互换窗口 |
c |
关闭当前窗口 |
q |
退出当前窗口。如果是最后一个窗口,则关闭vi
|
o |
关闭其他窗口 |














网友评论