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