文章目录
一. vi简介
1. 为什么要学习vi?
- 在工作中,要对服务器上的文件进行简单的修改,可以使用
ssh
远程登录到服务器上,并且使用vi进行快速的编辑即可。 - 在远程终端中,没有图形界面,要编辑文件,
vi
是最佳选择! - 所以,我们要学会使用一些
vi
常用的命令。
常见需要修改的文件内容包括:
- 源程序
- 配置文件,例如
ssh
的配置文件~/.ssh/config
2. vi和vim
vi
- 在很多
linux
发行版中,直接把vi
做成vim
的软链接 vi
是linux
中最经典的文本编辑器vi
的核心思想–>让程序员手指始终保持在键盘的核心区域就能完成所有的编辑操作
vi的特点
- 没有图形界面的功能强大的编辑器
- 只能是编辑文本内容,不能对字体、段落进行排版
- 不支持鼠标操作
- 没有菜单,只有
命令
vi
编辑器在系统管理、服务器管理编辑文件时,其功能永远不是图形界面的编辑器所能比拟的
vim
vim
是vi
发展出来的一个文本编辑器,支持代码补全、编译及错误跳转等方便编程的功能特别丰富- 在程序员中被广泛使用,被称为编辑器之神
(二). vi的基本使用
一. vi的打开方式
- 打开和新建文件
vi 文件名
- 在终端中输入
vi
在后面跟上文件名
即可 - 如果文件已经存在,会直接打开
- 如果文件不存在,则会新建一个文件
# vi 文件名
vi a.py
2.打开文件并且定位行
- 在开发时,如果知道某行代码有错,就可以快速定位
到文件末尾处:
# vi 文件名 +
vi a.py +
到文件第6行:
# vi 文件名 +6
vi a.py +6
二. vi的三种工作模式
vi
有三种基本工作模式:命令模式
、末行模式
、编辑模式
。
- 命令模式: 打开文件首先进入命令模式,是使用
vi
的入口,通过命令对文件进行常规的编辑操作:定位
、翻页
、粘贴
、删除
等。 - 末行模式: 执行
保存
、退出
等操作。 - 编辑模式: 正常的编辑文字。
1. 末行模式
-
在命令模式下,按下
:
键即可进入末行模式下,此时vi
会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个:
作为末行模式的说明符,等待用户输入命令。 -
多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)
1.常用命令
命令 | 描述 |
---|---|
w | 保存 |
q | 退出,若没有保存,不允许退出 |
q! | 强制退出 |
wq | 保存并退出 |
x | 保存并退出 |
2.末行命令扩展
- 在vi编辑环境下切换到其他文件的操作
命令 | 描述 |
---|---|
e . | 打开内置的文件浏览 |
n 文件名 | 新建文件 |
w 文件名 | 文件另存为 |
-
切换文件之前必须保证当前这个文件已经被保存
-
w另存为仍然编辑的是当前文件,并不会马上切换文件
-
在实际开发中,w命令可做阶段性的备份代码
2. 命令模式
- 进入
vi
编辑器后的默认模式。任何时候,不管用户处于何种模式,按下Esc
键即可进入命令模式。 - 在命令模式下,我们可以输入
vi
命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释。若输入的字符是合法的vi
命令,则vi
在接受用户命令之后完成相应的动作。
1. 移动和选择
- 行数移动
命令 | 描述 |
---|---|
gg | 回到文件顶部 |
G | 去到文件底部 |
# 回到文件顶部
gg
# 去到文件底部
G
# 去到第五行
5gg
# 去到第五行
: 5
2.屏幕移动
命令 | 描述 |
---|---|
ctrl + b | 向上翻页 |
ctrl + f | 向下翻页 |
H | 屏幕顶部 |
M | 屏幕中间 |
L | 屏幕底部 |
# 向上翻页
ctrl + b
# 向下翻页
ctrl + f
# 屏幕顶部
H
# 屏幕中间
M
# 屏幕底部
L
3.段落移动
命令 | 描述 |
---|---|
[]、{}、() | 从当前段落直接移动到下一段落 |
% | 在一对 " () "间移动 |
vi
中使用空行来区分段落- 在程序开发时,通常一段功能相关的代码会写在一起(之间没有空行)
- 代码中,
()
、[]
、{}
使用频率很高,而且都是成对出现的
4.标记
命令 | 描述 |
---|---|
m | 添加一个标记 |
x | 标记名称: a ~ z |
-
使用
m
增加一个标记,这样下次就可以快速的挑战回来或者执行其他编辑操作 -
在开发时,某一段代码可能需要稍后再处理,例如我们会而要编辑、查看其他位置的代码,这时可以使用标记
-
标记名称可以是
a~z
-
如果在其他行添加了同名的标记,之前添加的标记被替换掉
-
标记完后,使用
'x
定位到标记x的所在位置
# 在某行标记上a标记
ma
# 跳转到标记a的位置
'a
5.选中文本(可视模式)
vi
中提供了三种可视模式: 可视模式(v
)、可视行模式(V
)、可视块模式( Ctrl+v
)。
命令 | 描述 |
---|---|
v | 可视模式: 从光标位置开始按照正常模式选择文本 |
V | 可视行模式: 选中光标经过的完整行 |
Ctrl + v | 可视块模式 : 垂直方向选中文本 |
# 可视模式
v
# 可视行模式
V
# 可视块模式
Ctrl + v
- 可视模式下,可以和移动命令连用,例如:
ggVG
选中所有内容
2. 撤销和恢复撤销
命令 | 描述 |
---|---|
u | 撤销之前一次错误的编辑操作 |
Ctrl + r | 恢复撤销的命令 |
# 撤销之前一次错误的编辑操作
u
# 恢复撤销的命令
Ctrl + r
删除文本
命令 | 描述 |
---|---|
x | 删除光标所在字符 |
d | 删除移动命令对应的内容 |
# 删除光标所在字符
x
# 或者删除选中文字
5x
# 从光标到单词末尾
dw
# 从光标到一行的起始位置
d0
# 从光标删除到段落结尾
d}
# 从光标到连续后的5行
5dd
# 从光标所在行删除到指定代码行之间的所有代码
dG
# 从光标所在行删除到标记a之间的所有代码
d'a
3. 编辑模式
- 在命令模式下输入相关的命令都可以进入到文本的编辑模式。
1. 复制、粘贴
vi
中提供有一个被复制文本的缓冲区。
- 复制命令会将选中的文字保存在缓冲区
- 删除命令删除的文字会被保存在缓冲区
- 在需要的位置,使用粘贴命令可以将缓冲区的文字插入到光标所在的位置
命令 | 描述 |
---|---|
y | 复制 |
p | 粘贴 |
# 复制1行
yy
# 复制5行
5yy
# 复制一段
y}
# 复制到末尾
yG
- 复制完再
p
d
和x
本质上也是剪切操作,如果是d
或者x
后,也可以P
2. 替换
命令 | 描述 |
---|---|
r | 替换当前字符 |
R | 替换当前行光标后的字符 |
R
命令可以进入到替换模式,按下ESC
可以回到命令模式- 替换命令的作用就是不用进入编辑模式
3. 缩排命令和重复执行
命令 | 描述 |
---|---|
<< | 向左减少缩进 |
>> | 向右增加缩进 |
V< V> | 多行缩进 |
. | 重复上次命令 |
# 代码向右缩进(4各空格)
>>
# 重复上次命令
.
多行缩进
V> <V
4. 查找替换
1.查找
/str 回车
/hello 回车
- 找到指定内容后,n查找下一个,N查找上一个
- *向后查找当前光标所在单词
- #向前查找当前光标所在单词
2.查找并替换
: %s///g
(vi中的末行模式下执行)
# 格式:
:%s///g
3.全局替换
- 一次性替换文件中出现的旧内容
:%s/旧内容/新内容/g
:%s/world/python/g
4.范围替换
:s/旧/新/g
:s/world/python/g
5.确认替换(推荐使用)
全局:
:%s/旧/新/gc
:%s/world/python/gc
局部:
:s/旧/新/gc
:s/world/python/gc
5. 插入命令
命令 | 描述 |
---|---|
i | 当前字符前插入 |
a | 当前字符后插入 |
o | 当前行的下一行插入空行 |
I | 行首插入 |
A | 行尾插入 |
O | 当前行的上一行插入空行 |
6. 分屏命令
- 使用分屏命令,可以同时编辑和查看多个文件
命令 | 描述 |
---|---|
w | 切换到另一个窗口 |
r | 互换窗口 |
c | 关闭当前窗口 |
q | 退出当前窗口 |
o | 关闭其他窗口 |
- 分屏窗口都是基于
ctrl + w
,每次操作屏幕前都要按一下
1.横向分屏
:sp
2.纵向分屏
:vsp 文件名
或 :vsp .
# 横向
:sp
#纵向
:vsp hello.py
:vsp .
vi使用的注意事项
1.在开发时,在进入编辑模式之前,尽量避免按数字
2.利用可视块给多行代码增加注释:
-
命令行模式:
ctrl + v
-
大写I (编辑模式): 添加
#
-
ESC
回到命令模式
文件
命令 | 描述 |
---|---|
w | 切换到另一个窗口 |
r | 互换窗口 |
c | 关闭当前窗口 |
q | 退出当前窗口 |
o | 关闭其他窗口 |
- 分屏窗口都是基于
ctrl + w
,每次操作屏幕前都要按一下
1.横向分屏
:sp
2.纵向分屏
:vsp 文件名
或 :vsp .
# 横向
:sp
#纵向
:vsp hello.py
:vsp .
vi使用的注意事项
1.在开发时,在进入编辑模式之前,尽量避免按数字
2.利用可视块给多行代码增加注释:
-
命令行模式:
ctrl + v
-
大写I (编辑模式): 添加
#
-
ESC
回到命令模式