Skip to content

Vim 的基本用法

约 2016 字大约 7 分钟

2025-04-29

Vi 和 vim 简单介绍

在 Windows 系统中,记事本 是一个内置的文本编辑工具。虽然它可以满足基本需求,但功能相对有限,显示效果也不够理想,且不支持扩展。因此,许多人会选择安装功能更强大的 Notepad++ 作为替代工具。Notepad++ 提供了清晰的界面、代码高亮以及其他实用功能,为用户带来了更好的编辑体验。

与 Windows 中的记事本类似,Linux 系统(包括其他类 Unix 系统)也自带了一个基础的文本编辑器——viVim 可以看作是 vi 的增强版,类似于 Windows 系统中的 Notepad++。vim 是一个功能强大的高级编辑器,支持代码高亮、语法检查、搜索替换、编程等功能,极大地提升了文本编辑效率。

Vi 和 vim 的操作方式和命令体系基本一致,因此本文将以 vim 为例进行详细介绍。

需要注意的是,vim 并非所有 Linux 系统的默认安装软件,通常需要手动安装。例如,在基于 Debian 的系统中,可以通过以下命令安装:

sudo apt install vim

Vim 的使用步骤

  1. 使用命令打开文本文件:

    vim file.txt
  2. 打开文件后,默认会进入命令模式。此时,按下字母 i,即可切换到输入模式,开始编辑文件内容

  3. 编辑完成后,按下 Esc 键退出输入模式,回到命令模式(注意确保键盘处于英文输入状态)

  4. 接着输入冒号 : 进入底线命令模式,然后输入 :wq! 保存修改并退出 vim

    命令解释:

    • w 表示写入(write),即保存文件
    • q 表示退出(quit),即关闭 vim
    • ! 表示强制执行

Vim 的模式

从上述使用流程可以看出,vim 具有多种操作模式,主要包括命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line mode)。这些模式之间可以相互切换,具体如下图所示(原图来自 菜鸟教程,我额外添加了标注):

QQ图片20200205113053

除了这三种主要模式外,vim 还支持一些其他模式,例如我们后面会谈到用于批量操作的可视模式(Visual mode),等等。不过,这些模式在日常使用中并不常见

命令模式

启动 vim 后,默认进入的就是命令模式。在此模式下,键盘输入会被识别为命令而非普通文本。例如,按下 i 不会在文档中插入字符,而是触发进入输入模式的指令。

以下是命令模式中常用的快捷键及其功能:

复制、删除、粘贴相关命令

yy    拷贝光标所在行
dd    删除光标所在行
D     删除当前光标到行尾的内容
dG    删除当前行到文档尾部的内容(若光标在首行,则删除整个文档)
p     粘贴 yy 所复制的内容
x     删除光标所在的字符
u     撤销上一步操作

查找

/word    在整篇文档中向下查找字符串 `word`,按下 `n` 跳转到下一个匹配项,`N` 返回上一个
?word    在整篇文档中向上查找字符串 `word`,按下 `n` 跳转到下一个匹配项,`N` 返回上一个
.、*、[、]、^、%、/、?、~ 和 $ 如果在查找这十个字符需转义,比如 \.

:nohl    取消搜索后的高亮显示

*        查找光标所在单词,并跳转到下一个匹配项,`n` 下一个,`N` 上一个
#        查找光标所在单词,并跳转到上一个匹配项,`n` 下一个,`N` 上一个

gd       查找当前光标所在单词在文档中的第一个非注释位置

%        匹配括号的另一半(如 `{}`、`()` 或 `[]`)

替换

s/old/new        将本行第一个 `old` 替换为 `new`
s/old/new/g      将本行所有 `old` 替换为 `new`
%s/old/new/g     将文档中所有 `old` 替换为 `new`
%s/old/new/gc    逐个询问是否将文档中的 `old` 替换为 `new`
                     y 表示替换
                     n 表示不替换
                     a 表示替换所有
                     q 表示放弃替换
                     l 表示替换第一个并进入插入模式
                     ^E 表示用 Ctrl+e 来滚动屏幕
                     ^Y 表示用 Ctrl+y 来滚动屏幕
5,13s/old/new/g  将第 5 到 13 行的所有 `old` 替换为 `new`

移动光标

w(e)    移动光标到下一个单词
b       移动光标到上一个单词

数字0    移动光标到本行开头
$       移动光标到本行末尾

H       移动光标到屏幕首行
M       移动光标到屏幕居中行
L       移动光标到屏幕底行
gg      移动光标到文档的尾行
G       移动光标到文档尾行
h       向左移动光标
j       向下移动光标
k       向上移动光标
l       向右移动光标

ctrl + f    翻到下一页
ctrl + b    翻到上一页

`       移动光标到上一次修改的位置

数字与命令

3yy    拷贝光标所在行及下方总共 3 行内容
5dd    删除光标所在行及下方总共 5 行内容

输入模式

命令模式下,按下以下按键即可进入输入模式

i    在当前光标位置开始编辑
a    在光标后开始编辑
o    在光标下一行开始编辑

进入输入模式后,可以直接通过键盘编辑文件内容。完成编辑后,按下 Esc 键退出输入模式,返回命令模式

底线命令模式

命令模式下输入冒号 : 即可进入底线命令模式。以下是常用的命令:

:q!        强制退出,不保存修改
:wq!       强制保存并退出

:set nu    显示行号
:set nonu  取消显示行号

:数字       跳转到指定行

:! command 暂时离开 `vim`,执行外部命令(如 `:!ip a` 查看 IP 信息)

:w filename     文件另存为,先按下 v 进入可视模式可保存部分内容
:w! filename    文件另存为并覆盖已存在的同名文件

:r filename     将另一个文件的内容插入到当前光标后

可视模式

在某些场景下,可能需要对多行内容进行批量操作,例如为相邻的代码行添加注释。如果逐一手动修改,显然效率低下。这时可以借助可视模式来实现批量操作

批量添加注释:

  1. 按下 Ctrl + v 进入可视模式

  2. 使用方向键(或 HJKL 键)选择需要注释的行

  3. 按下 Shift + i(即大写 I)进入行首插入模式

  4. 输入注释符号(如 //#)以及必要的空格

  5. 连续按两次 Esc,完成注释的批量添加

  6. 保存并退出

批量取消注释:

  1. 按下 Ctrl + v 进入可视模式
  2. 使用方向键选择需要删除注释的行
  3. 按下 d 删除选中的内容
  4. 保存并退出

Vim 操作多个文件

Vim 支持同时打开多个文件,便于多任务处理。例如:

vim -o file1 file2 file3    # 打开后垂直分布
vim -O file1 file2 file3    # 打开后水平分布

在多文件编辑中,可以使用以下命令在不同文件间切换:

Ctrl + w + w         切换到下一个文件
对于垂直分布的文件:
    Ctrl + w + 上/下方向键(或 j/k 键)  切换至上/下文件
对于水平分布的文件:
    Ctrl + w + 左/右方向键(或 h/l 键)  切换至左/右文件

退出多文件编辑:

qa     全部退出
qa!    全部强制退出(不保存)
wqa    全部保存后退出

Vim 键盘图

以下是一张总结了 vim 常用快捷键的键盘图,出处见图片,供参考:

vi-vim-cheat-sheet-sch

更多更详细 vim 命令,参见菜鸟教程 Linux vi/vim

贡献者: Shuo Liu