vi使用教程

目录

1. vi和vim词源

  • vi 取自 “visual” 的前两个字母
  • vim= vi improved
  • 是从vi发展出来的文本编辑器

2. 打开或新建文件

  • vim 文件名存在就打开,不存在就新建
  • vim 文件名 +行数会打开文件并将光标定位到指定行数
    • 注意光标要和加号紧贴,不能有空格,有空格是将光标定位到文件最后一行
    • 对不存在的文件(新建文件)无效

3. 异常文件处理

  • 当对未保存的文件直接关闭,会产生文件名.swp的交换文件,下次再次打开文件,会产生以下提示:
    报错信息

  • 当 Vim 打开一个文件时,如果检测到一个交换文件(.swp 文件),它会提示用户以避免潜在的数据丢失或冲突。以下是每个选项的作用:

    1. [O]pen Read-Only:

      • 只读模式打开文件。你可以查看文件内容但无法进行编辑。这适用于你想要查看文件内容而不希望影响任何潜在的编辑冲突。
    2. [E]dit anyway:

      • 无视交换文件并继续编辑。这意味着你将忽略潜在的警告,直接对文件进行修改。适用于你确定没有其他程序正在编辑该文件,并且你不担心可能的数据丢失。
    3. [R]ecover:

      • 使用交换文件恢复上次未保存的编辑。这适用于上次编辑会话崩溃或异常关闭时,你希望恢复未保存的更改。
    4. [D]elete it:

      • 删除交换文件并继续编辑。这适用于你确定不需要恢复未保存的更改,并且确认没有其他实例正在编辑该文件。
    5. [Q]uit:

      • 退出 Vim,不进行任何操作。这适用于你不确定如何处理当前情况,并希望退出以进行进一步调查。
    6. [A]bort:

      • 取消当前操作,通常等同于退出 Vim。这也是一种退出方式,适用于你希望中止当前操作。
    • 选择合适的选项取决于你对文件状态的了解以及你希望如何处理可能存在的编辑冲突。一般情况下,如果不确定,选择 [Q]uit[A]bort 可以让你有时间进一步检查情况再做决定。

4. vi三种工作模式

4.1 命令模式

  • 打开文件的默认模式
  • 是使用vi的入口

4.2 末行模式

  • 执行保存,退出等操作
  • 是使用vi的出口
  • 输入英文字符:便可以进入末行模式
  • ESC便可以退出到命令模式
  • 末行模式命令:
    命令 英文 功能
    :w write 保存文件
    :q quit 退出 Vim
    :q! quit 强制退出,不保存退出
    :wq write and quit 保存并退出 Vim
    :x save and exit 保存并退出(等同于 :wq
    :e edit 编辑文件
    :r recover 恢复未保存的更改
    :d delete 删除文本
    :i insert 进入插入模式
    :v visual 进入可视模式

4.3 编辑模式

  • 输入英文字符i(input)便可以进入编辑模式
  • ESC便可以退出到命令模式

5. 常用命令

5.1 重复次数

  • 在命令模式下,先出入数字,在输入一个命令,可以让该命令重复执行指定次数

5.2 移动和选择

5.2.1 移动

1. 上,下,左,右
命令 功能
h 👈
j 👇
k 👆
l 👉
2. 行内移动
命令 英文 功能
w word 向后移动一个单词
b back 向前移动一个单词
0 行首
^ 行首,第一个不是空白字符的位置
$ 行尾
3. 行外移动
命令 英文 功能
{ 移动到段首
} 移动到段尾
gg go 文件顶部
G go 文件末尾
数字gg go 移动到 数字 对应行数
数字G go 移动到 数字 对应行数
:数字回车 go 移动到 数字 对应行数

最后三条指令效果相同。

4. 屏幕移动
命令 英文 功能
Ctrl + b back 向上翻页
Ctrl + f forward 向下翻页
H Head 屏幕顶部
M Middle 屏幕中间
L Low 屏幕底部
5. 括号切换
命令 功能
% 括号匹配及切换
6. 标记
  • 在开发时,某一块代码可能需要稍后处理,此时使用m增加一个标记,这样可以在需要时快速跳转回来
  • 标记名称可以是a~z或者A~Z之间的任意一个字母
  • 添加标记的行被删除,那么标记同时被删除
  • 如果在其他行添加了和之前相同的标记,之前添加的标记也会被替换掉
命令 英文 功能
mx mark 添加标记x,x可为a~z或者A~Z之间的任意一个字母
`x 直接定位到标记x的所在位置

5.2.2 选择

  • vim中要选择文本,要先使用visual命令切换到可视模式
  • ESC可以放弃选中,返回命令模式
  • vim中提供了三种可视模式:
    命令 模式 功能
    v+移动命令 可视模式 从光标位置开始按照正常模式选择文本
    V+移动命令 可视行模式 选中光标经过的完整行
    Ctrl+q 可视块模式 垂直方向选中文本
  • 进入相应的可视模式后,之前的移动指令依然适用
  • 可视块模式视为对多行同时进行操作,具体参见添加多行注释案例

5.3 删除和剪贴

命令 英文 功能
x cut 剪贴光标所在字符,可用p命令进行粘贴
nx cut n代表数字,nx表示剪贴光标后的n个字符
d+移动命令 delete 删除移动命令对应的内容
dd delete 删除光标所在行
ndd delete n代表数字,ndd表示删除光标后的n行,包括光标所在行
D delete 删除至行尾
  • e.g.
    • 当前光标在10行,想删除10到12行内容,用d12Gd12gg3dd这些指令可以实现,也可以通过可视模式选中后再按d实现
    • d0即删除光标到行首的字符,不包括光标选中的字符本身
    • d`a删除当前字符到标记`a之间的字符
  • 注意,vim中删除的内容也会放到缓冲区,也就是说可以通过p来粘贴刚刚删除的内容
  • x只是剪贴单个字符,nx剪贴多个字符,而d可以配合更加复杂的移动操作,xd功能上略有不同,但本质上两者都为剪贴操作

5.4 撤销

命令 英文 功能
u undo 撤销上次的命令操作
Crtl+r undo 用来恢复撤销的命令

5.5 复制和粘贴

命令 英文 功能
y+移动命令 copy 复制
yy copy 复制光标所在行
nyy copy n代表数字,nyy表示复制光标后的n行,包括光标所在行
p paste 粘贴

5.6 替换和查找

5.6.1 替换

命令 英文 功能 工作模式
r replace 替换当前字符 命令模式
R replace 替换当前光标后的字符 替换模式
  • R命令可以进入替换模式, 替换完成后,按下ESC可以回到命令模式
  • 替换命令的作用就是不用进入编辑模式就可以对文件进行轻量级的修改

5.6.2 常规查找

命令 功能
/str 查找str
  • 当查找到指定内容后,使用Nest查找下一个匹配字符出现的位置:
    • n:查找下一个匹配字符
    • N:查找上一个匹配字符

5.6.3 单词快速匹配

命令 功能
* 向后查找当前光标所在单词
# 向前查找当前光标所在单词

5.6.4 查找并替换

  • 在vim中查找和替换命令需要在末行模式下执行
  • 记忆固定的命令格式::%s///g
1. 全局替换
  • 命令格式::%s/新文本/旧文本/g
  • 用来一次性替换所有的文本
2. 可视区域替换
  • 命令格式::s/新文本/旧文本/g
  • 无百分号%
  • 使用时先进入可视模式进行区域选择,选定要替换的区域后再使用上述替换命令
3. 确认替换
  • 命令格式::%s/新文本/旧文本/gc
  • g后加了个字符c
  • 可以在输入替换指令后给出更详细的提示指令,来提高替换操作的安全性
  • 替换提示词列表:
    含义 说明
    y yes 替换
    n no 不替换
    a all 替换所有
    q quit 退出替换
    l last 最后一个,并把光标移动到行首
    ^E 向下滚屏
    ^Y 向上滚屏

5.7 缩排和重复执行

命令 功能
>(<)+移动命令 对范围内容进行缩排
>> 向右增加缩进
<< 向左增加缩进
n>>(n<<) n代表数字,n>>( n<<)表示缩排n行,而不是一行缩排n次
. 重复上次命令
  • 可视模式下,缩排命令只需要一个<>符号就可以
  • .命令可以重复上次的缩排操作,同样也可以重复之前的删除粘贴等操作

5.8 插入命令

  • 在vim中, 除了常用的i进入编辑模式外,还提供了以下命令同样可以进入编辑模式
    命令 英文 功能 常用
    i insert 在当字符前插入文本 常用
    I insert 行首插入文本 较常用
    a append 在当前字符后添加文本 常用
    A append 行末添加文本 较常用
    o 在当前行后面插入一空行 常用
    O 在当前行前面插入一空行 常用
  • 一旦使用上述指令,vim便会进入编辑模式,再次使用指令只会输入相关字符,而不会再次产生命令模式的作用
  • 输入也可以应用重复次数的方式键入:
    • e.g.要在文件中连续输入10个hello
      • 先在命令模式输入10
      • 输入i进入编辑模式
      • 在要输入的地方输入hello
      • 按下ESC返回到命令模式,返回后vim将进入编辑模式到退出看作一个整体,并重复10次(但逻辑上应该不是进入退出10次)
    • 此操作也可以用.命令进行重复执行
  • 注意编写文件的时候进入编辑模式前不要按任何数字
  • 可以通过插入命令给多行代码添加注释
    • 首先找到要添加注释的第一行代码,利用^命令来到行首
    • 利用Ctrl+q的命令进入可视块模式,把将要添加注释的几行代码选中
    • 再利用I命令进入编辑模式,在行首键入#
    • 按下ESC退出,vim自动将所有选中的行首添加# ,进而实现添加多行注释操作

5.9 文件处理和分屏命令

5.9.1 文件处理命令

命令 英文 功能
:e . edit 会打开内置的文件浏览器,.表示浏览要当前目录下的文件
:e [文件名] edit 会打开相应的文件,但必须保存当前的文件
:n [文件名] new 快速新建文件
:w [文件名] write 另存为,但是仍然编辑当前文件,并不会切换文件,用于阶段性备份
  • 在切换文件之前,必须保证当前文件已经被保存

5.9.2 分屏命令

  • 使用分屏命令,可以同时编辑和查看多个文件

    命令 英文 功能
    :sp [文件名] split 横向增加分屏
    :vsp [文件名] vertical split 纵向增加分屏
    • 也可以不添加文件名,而利用.替代,会打开内置的文件浏览器,来查看有哪些文件
  • 切换分屏窗口有以下操作,注意都是基于Ctrl+w这个快捷键的,w对应window,即Ctrl+w+命令字符才是完整的功能命令

    命令 英文 功能
    w window 切换到下一个窗口
    r reverse 互换窗口
    c close 关闭当前窗口,但是不能关闭最后一个窗口
    q quit 退出当前窗口,如果是最后一个窗口,则关闭vim
    o other 关闭其他窗口