认识vi
vi打开和新建文件
- 在终端中输入 vi 在后面跟上文件名即可
$ vi 文件名
如果文件已经存在,会直接打开该文件
如果文件不存在,会新建一个文件
vi-打开文件并且定位行
- 有可能会遇到打开一个文件,并定位到指定行的情况
例如,知道某一行代码有错误,可以快速定位到出错代码的位置 - 可以使用以下命令打开文件
$ vi 文件名 +行数
提示:如果只带上+而不指定行号,会直接定位到文件末尾
vi-异常情况的处理
- 如果vi异常退出(比如没保存就关闭了终端窗口),磁盘上可能会保存有
交换文件 - 下次再使用vi编辑文件时,会看到以下屏幕信息,按下字母d删除交换文件即可
vi的三种模式及切换
三种模式
-
命令行模式
- 打开文件首先进入命令行模式。这是使用vi的入口
- 可以通过命令,可以进行复制、粘贴、删除、定位等操作
-
插入模式(编辑模式)正常的编辑文字。
-
底行模式
- 光标位于屏幕的底行。
- 底行模式可以输入命令,进行文件的保存、查找、替换等
- 要退出vi,返回到控制台,也是在底行模式下输入退出命令
- 底行模式是vi的出口
vi三种模式的切换
vi底行模式下相关命令
命令 | 功能 |
---|---|
:q | 退出没有修改的文件(若文件被修改了而没有保存,则此命令无效) |
:q! | 强制退出,且不保存修改过的部分 |
:w | 保存文件,但不退出 |
:x | 保存文件并退出wq等价命令 |
:w File | 另存为File给出的文件名,不退出 |
:r File | 读入File指定的文件内容插入到光标位置 |
vi模式切换命令
命令 | 功能 |
---|---|
A a | 进入编辑状态,从当前光标之后的位置开始插入键盘输入的字符 |
I i | 进入编辑状态,从当前光标之后的位置开始插入键盘输入的字符 |
O o | 进入编辑状态,并插入一新行,光标移到该新行的行首,以后键盘输入的字符将插入到光标位置 |
ESC | 进入命令状态 |
:!Command | 在vi中执行外部命令Command,按回车键可以返回vi继续工作 |
vi光标命令
- 熟练使用vi命令,要学会在命令行模式下,快速移动光标
- h:向左👈
- j:向下👇
- k:向上👆
- l:向右👉
-
行内移动:
- w:向后移动一个单词(word)
- b:向前移动一个单词(back)
- 0:行首
- ^:行首,第一个不是空白字符的位置
- $:行尾
-
行数移动:
- gg:文件顶部
- G:文件末尾
- 数字gg移动到数字对应行数
- 数字G移动到数字对应行数
- :setnu设置显示行号
- :setnonu取消显示行号
-
屏幕移动(浏览代码)
- ctrl+b:向上翻页
- ctrl+f:向下翻页
- H:屏幕顶部
- M:屏幕中间
- L:屏幕底部
vi复制、剪辑、粘贴
vi选中文本
命令 | 模式 | 功能 |
---|---|---|
v | 可视模式 | 从光标位置开始按照正常模式选择文本 |
V | 可视行模式 | 选中光标经过的完整行 |
- esc可以放弃选中,回到命令模式
vi删除/剪切文本
命令 | 功能 |
---|---|
[n]x | 删除光标所在字符 |
[n]dd | 删除光标所在行,可以ndd删除多行 |
- 如果使用可视模式已选中了一段文本,d和x都可以删除选中文本
- 命令d、x类似图形界面的剪切操作(ctrl+x)
vi复制粘贴
命令 | 功能 |
---|---|
y | 复制 |
[n]yy | 复制一行,nyy复制多行 |
p | 粘贴 |
vi复制剪切
- y0-将光标至行首的字符拷入剪贴板
- y$-将光标至行尾的字符拷入剪贴板
- d0-将光标至行首的字符剪切入剪贴板
- d$-将光标至行尾的字符剪切入剪贴板
- range y-块复制
- range d-块剪切
vi撤销和恢复撤销
命令 | 功能 |
---|---|
u | 撤销上次命令 |
ctrl+r | 恢复撤销的命令 |
vi查找/替换/分屏
vi替换命令
命令 | 功能 | 工作模式 |
---|---|---|
r | 替换当前字符 | 命令模式 |
R | 替换当前行光标后的字符 | 替换模式 |
-
R可以进入替换模式,替换完成后,按Esc可以返回命令模式
-
替换命令的作用就是不用进入编辑模式,对文件进行轻量级的修改
vi查找命令
命令 | 功能 |
---|---|
/str | 查找str |
n | 查找下一个 |
N | 查找上一个 |
- 如果不想看到高亮显示,可以随便查找一个文件中不存在的内容即可
vi查找并替换
- 需要在末行模式下执行:范围s/旧文本/新文本/g
- s代表替换
- g全部替换(默认换一行中的第1个)
举例:
10,20s/hello/HELLO/g 第10行到第20行
.,20s/hello/HELLO/g 当前行到第20行
5,$s/hello/HELLO/g 第5行到最后一行
%s/旧文本/新文本/g 全文替换
-
确认替换:
-
%s/旧文本/新文本/gc会
出现提示:
y-yes替换
n-no不替换
a-all替换所有
q-quit退出替换
-
vi分屏命令
命令 | 功能 |
---|---|
:sp[文件名] | 横向增加分屏 |
:vsp[文件名] | 竖向增加分屏 |
- ctrl + h光标到左边窗口
- ctrl + l光标到右边窗口
- ctrl + j光标到下面窗口
- ctrl + k光标到上面窗口