vi 常用命令
命令线路图
- 重复次数(先输入数字 n,再跟上一个命令.会让此命令执行 n 次)
- 移动和选择
- 编辑操作(删除,复制,粘贴,替换,缩排)
- 撤销和重复
- 查找替换
- 编辑
工作模式
0.末行模式下的命令
命令 | 功能 |
---|---|
w | 保存 |
q | 退出(没保存不能退出) |
q! | 强行退出(不保存所编辑过的内容) |
wq | 保存并退出 |
x | 保存并退出 |
1.新建\打开文件
$ vi 文件名.后缀
文件存在 , 打开
文件
文件不存在 , 新建
文件
$ vi 文件名.后缀 +(行号)
打开文件并把光标定位到指定行
如果没有指定行号那么就把光标定位到文件末尾
2.移动和选择
命令 | 功能 |
---|---|
h | 向左 |
j | 向下 |
k | 向上 |
l | 向右 |
行内移动
命令 | 功能 |
---|---|
w | 向后移动一个单词 |
b | 向前移动一个单词 |
0 | 行首 |
^ | 行首(第一个非空白字符) |
$ | 行尾 |
跨行移动
命令 | 功能 |
---|---|
gg | 文件顶部 |
G | 文件尾部 |
数字gg | 移动到 数字 对应行 |
数字G | 移动到 数字 对应行 |
:数字 | 移动到 数字 对应行 |
跨屏移动
命令 | 功能 |
---|---|
Ctrl + f | 向下翻页 |
Ctrl + b | 向上翻页 |
H | 屏幕顶部 |
M | 屏幕中部 |
L | 屏幕底部 |
段落移动 (用空行
来区分段落)
命令 | 功能 |
---|---|
{ | 上一段 |
} | 下一段 |
括号切换 (用于成对儿出现的括号()
[]
{}
)
命令 | 功能 |
---|---|
% | 括号间切换 |
标记(某位置需要一会儿还回来,则可以为此位置添加标记)
命令 | 功能 |
---|---|
m字母 | 标记此位置(字母为标记名) |
‘字母 | 回到上次标记名为 字母 标记的位置 |
选中文本(可视模式,可配合移动命令使用)
命令 | 功能 |
---|---|
v | 从光标位置开始选中文本 |
V | 从光标所在行开始按 行 选中文本 |
Ctrl + v | 垂直 方向选中文本 |
3.编辑操作
tips: vi 的文本缓冲区和系统的剪切板不是同一个
撤销和恢复撤销
命令 | 功能 |
---|---|
u | 撤销命令 |
ctrl + r | 恢复撤销 |
删除(本质是剪切)
命令 | 功能 |
---|---|
x | 删除光标所在的 字符 或者 选中的文字 |
d | 结合移动命令,删除到移动命令对应的内容 |
dd | 删除一行文字,数字dd 可删除多行 |
D | 从光标位置删除至行尾 |
tips: d’字母 从光标所在行删除到标记行
之间的所有代码
复制\粘贴
命令 | 功能 |
---|---|
y | 复制(结合移动命令使用) |
yy | 复制一行 |
p | 粘贴 |
替换(会进入替换模式 esc 退出此模式)
命令 | 功能 |
---|---|
r | 替换当前字符 |
R | 替换当前光标后的字符 |
缩排(对代码增加缩进)
命令 | 功能 |
---|---|
>> | 向右增加缩进 |
<< | 向左增加缩进 |
. | 重复命令 |
4.查找和替换
常规查找
命令 | 功能 |
---|---|
/str | 查找str |
n | 查找下一个 |
N | 查找上一个 |
* | 查找光标所在单词 ,从当前位置向后 查找 |
# | 查找光标所在单词 ,从当前位置向前 查找 |
tips:查找到的内容会一直高亮显示,如需要取消高亮显示,则查找一个文件不存在字符即可
替换
tips:通用格式:%s///g
全局替换
命令 | 功能 |
---|---|
:%s/旧文本/新文本/g | 会一次性替换文件中出现的所有旧文本 |
可视区域替换
命令 | 功能 |
---|---|
:s/旧文本/新文本/g | 替换所选内容中的旧文本 |
确认替换(替换之前要先确认)
命令 | 功能 |
---|---|
:%s/旧文本/新文本/gc | 替换所选内容中的旧文本 |
y | yes 替换 |
n | no 不替换 |
a | all 替换所有 |
q | quit 退出替换 |
l | last 最后一个替换,并把光标移动到行首 |
ctrl + E | 向下滚屏 |
ctrl + Y | 向上滚屏 |
5.编辑
从命令模式
快速进入编辑模式
命令 | 功能 |
---|---|
o | 当前行下方插入一空行,并定位到此空行 |
O | 当前行上方插入一空行,并定位到此空行 |
i | 当前光标所在字符位置插入文本 |
I | 当前行首位置插入文本 |
a | 当前字符后添加文本 |
A | 当前行末添加文本 |
编辑命令和数字的连用
eg: 输入10个#
- 命令模式下输入
10
- 输入
i
进入编辑模式 - 输入
*
(即要重复的内容) - 通过
esc
返回到命令模式之后就会重复执行第2和第3步达到10个#的目的
tips: 正常情况下,进入编辑模式前,不要按数字
eg:利用可视块给多行代码增加注释
- 利用
^
移动光标到需要注释的第一行的行首 - 通过
Ctrl + v
进入可视块 - 使用
j
向下连续选中要注释的行 - 输入
I
进入编辑模式(可视模式下无法通过 i 来进入编辑模式),并在行首插入字符#(Python中) - 通过
esc
返回命令模式,则会为刚才所有选中行行首增加#
6.末行命令扩展
命令 | 功能 |
---|---|
:e 文件名 | 会在当前窗口切换大此文件 |
:e . | 通过 vi 内置浏览器,显示当前目录下的文件 |
:n 文件名 | 新建文件 |
:w 文件名 | 另存为文件(当前编辑的文件并不会切换到新保存的文件内) |
tips: 切换文件时,必须要保证当前文件已经保存
6.分屏命令
命令 | 功能 |
---|---|
:sp | 横向分屏(两个屏幕一上一下),同时显示当前正在编辑的文件 |
:sp 文件名 | 横向分屏,上方显示分屏之前的文件,下方显示新打开的文件 |
:vsp [文件名] | 纵向分屏(两个屏幕一左一右),加不加文件名效果同上 |
操作多个屏幕之前必须先通过ctrl + w
然后再执行下面的命令
命令 | 功能 |
---|---|
w | 切换到下一个窗口 |
r | 互换窗口 |
c | 关闭当前窗口(但不能关闭最后一个) |
q | 退出当前窗口(如果是最后一个则退出 vi) |
o | 关闭其他窗口 |