如果你刚接触 Linux,面对黑漆漆的终端和闪烁的光标,第一次输入vim filename后可能会手足无措:为什么按键盘没反应?怎么才能打字?甚至不知道该怎么退出?
别慌,你遇到的困惑几乎每个 Linux 开发者都经历过。Vim(Vi IMproved)虽然学习曲线陡峭,但一旦掌握了它的逻辑,这种双手不离开键盘、行云流水般的编辑体验,绝对会让你直呼“真香”。今天,我们就用最短的时间,带你从零驯服这款被称为“编辑器之神”的强大工具
vim与vi
Vim与Vi:它们是什么关系?
在开始之前,我们先厘清一个概念。Vi (Visual Interface) 是 Unix 系统上历史悠久的经典文本编辑器;而 Vim (Vi IMproved) 则是 Vi 的全面增强版,它在兼容 Vi 的基础上增加了语法高亮、多级撤销、插件支持等现代化特性。在现代 Linux 系统中,执行vi命令通常实际上启动的就是vim。因此,本教程将以功能更强大的 Vim 为例进行讲解,但所学内容在 Vi 上基本通用
Vim的三种模式
学习vim可以使用官方的教程,在shell下输入命令就能查看vim教程
vimtutorVim 与其他编辑器最大的不同在于它的多模式设计。它不像记事本那样打开就能直接打字,而是将“浏览/操作”和“输入文字”完全分开。理解并熟练切换这三种模式,是掌握 Vim 的第一步,也是最关键的一步。
- 命令模式:这是 Vim 启动后的默认模式。在此模式下,你敲击键盘的大部分按键都被视为命令(如移动光标、复制、删除),而不是输入文本。这是你进行导航和高效操作的“指挥中心”。
- 输入模式:这才是你真正输入和编辑文本的模式,行为类似于普通的记事本。屏幕左下角通常会显示
-- INSERT --或-- 插入 --字样。 - 底线命令行模式:以:开始,通常用于文件的保存、退出。在此模式下,你可以执行保存、退出、全局搜索、批量替换等操作。
新手口诀:打开 Vim 是命令模式,按i进入编辑,按Esc回命令,按:进底线命令模式,保存退出用:wq。
命令模式
如果需要通过vi/vim编辑器编辑文件,请通过如下命令:
vi 文件路径 vim 文件路径vim兼容全部的vi功能,后续全部使用vim命令
- 如果文件路径表示的文件不存在,那么此命令会用于编辑新文件
- 如果文件路径表示的文件存在,那么此命令用于编辑已有文件
命令模式快捷键
经过刚刚的快速体验,想必同学们对于3种模式的切换有了一定的了解,现在我们来看一下,在命令模式下的一些常见快捷键
| 模式 | 命令 | 描述 |
|---|---|---|
| 命令模式 | i | 在当前光标位置进入输入模式 |
| 命令模式 | a | 在当前光标位置之后进入输入模式 |
| 命令模式 | I | 在当前行的开头进入输入模式 |
| 命令模式 | A | 在当前行的结尾进入输入模式 |
| 命令模式 | o | 在当前光标下一行进入输入模式 |
| 命令模式 | O | 在当前光标上一行进入输入模式 |
| 输入模式 | esc | 任何情况下输入[Esc]都能回到命令模式 |
| 命令模式 | 键盘上、键盘k | 向上移动光标 |
| 命令模式 | 键盘下、键盘j | 向下移动光标 |
| 命令模式 | 键盘左、键盘h | 向左移动光标 |
| 命令模式 | 键盘右、键盘l | 向右移动光标 |
| 命令模式 | 0 | 移动光标到当前行的开头 |
| 命令模式 | $ | 移动光标到当前行的结尾 |
| 命令模式 | pageup(PgUp) | 向上翻页 |
| 命令模式 | pagedown(PgDn) | 向下翻页 |
| 命令模式 | / | 进入搜索模式 |
| 命令模式 | n | 向下继续搜索 |
| 命令模式 | N | 向上继续搜索 |
| 命令模式 | dd | 删除光标所在行的内容 |
| 命令模式 | ndd | n是数字,表示删除当前光标向下n行 |
| 命令模式 | yy | 复制当前行 |
| 命令模式 | nyy | n是数字,复制当前行和下面的n行 |
| 命令模式 | p | 粘贴复制的内容 |
| 命令模式 | u | 撤销修改 |
| 命令模式 | ctrl+r | 反向撤销修改 |
| 命令模式 | gg | 跳到首行 |
| 命令模式 | G | 跳到行尾 |
| 命令模式 | dG | 从当前行开始,向下全部删除 |
| 命令模式 | dgg | 从当前行开始,向上全部删除 |
| 命令模式 | d$ | 从当前光标开始,删除到本行结尾 |
| 命令模式 | d0 | 从当前光标开始,删除到本行开头 |
底线命令模式
编辑模式没有什么特殊的,进入编辑模式后,任何快捷键都没有作用,就是正常输入文本而已,唯一大家需要记住的,就是通过esc,可以退回到命令模式中即可。然后输入命令用于文件的保存、退出
| 模式 | 命令 | 描述 |
|---|---|---|
| 底线命令模式 | :wq | 保存并退出 |
| 底线命令模式 | :q | 仅退出 |
| 底线命令模式 | :q! | 强制退出 |
| 底线命令模式 | :w | 仅保存 |
| 底线命令模式 | :set nu | 显示行号 |
| 底线命令模式 | :set paste | 设置粘贴模式 |
从打开到退出的完整流程
让我们通过一个完整的编辑流程,来熟悉最基本的操作。假设我们要新建或编辑一个叫test.txt的文件:
- 启动 Vim:在终端中输入
vim test.txt。如果文件不存在,Vim 会新建它;如果存在,则打开已有文件。此时你处于普通模式。 - 进入编辑状态:按下键盘上的
i键,左下角出现-- INSERT --,说明进入了插入模式。现在你可以像在记事本里一样自由输入文字了。 - 保存与退出:编辑完成后,先按一下
Esc键确保回到普通模式。接着输入冒号:进入命令行模式,此时光标会跳到屏幕最底端。输入以下命令之一并按回车::wq:保存文件并退出(Write and Quit)。:q!:强制退出,放弃所有未保存的修改。ZZ:在普通模式下直接按两次大写 Z,效果等同于:wq。
高效移动与编辑
在命令模式下,使用方向键移动光标效率很低。Vim 提供了一套经典的移动方式,让你的手指无需离开主键盘区即可飞速穿梭:
- 基本移动:
h(左)、j(下)、k(上)、l(右)。 - 快速跳转:
gg(跳转到文件首行)、G(跳转到文件尾行)、5G(直接跳转到第 5 行)。 - 常用编辑:
yy(复制当前行)、dd(删除/剪切当前行)、p(粘贴刚才复制或剪切的内容)、u(撤销上一步操作)。
比如你想复制第 3 行的内容粘贴到第 5 行下面,只需要在普通模式下依次按下:3G(跳到第3行) ->yy(复制) ->5G(跳到第5行) ->p(粘贴)。
让 Vim 更好用
原生的 Vim 界面比较简陋(没有行号、没有语法高亮)。为了让你在入门阶段获得更好的体验,我们可以简单配置一下。在终端执行vim ~/.vimrc,按i进入插入模式,复制以下内容并保存退出:
# 开启语法高亮,看代码更清晰 syntax on # 显示行号,方便定位 set number # 在状态栏显示光标当前位置 set ruler # 搜索时忽略大小写 set ignorecase set smartcase # 启用鼠标支持(对新手非常友好,允许用鼠标点击定位光标) set mouse=a # 缩进设置:Tab键宽度为4个空格 set tabstop=4 set shiftwidth=4 set expandtab~/.vimrc是 Vim 的用户级配置文件,系统默认不会自动为普通用户创建它。
找不到~/.vimrc这个文件?
- 隐藏属性:在 Linux 中,以
.(点)开头的文件和目录都是隐藏的。即使该文件存在,你直接使用普通的ls命令也看不到它,必须使用ls -a才能显示出来。 - 按需创建:
.vimrc是为了让 Vim 记住你的个人偏好(比如开启行号、语法高亮等)而存在的。如果你之前没有手动配置过 Vim,这个文件自然就不会被生成。
既然系统没有自带,我们只需要自己动手创建一个即可。你可以直接在终端执行以下命令,将常用的基础配置一键写入你的.vimrc文件中:
cat > ~/.vimrc << 'EOF' " 开启语法高亮,代码看起来更清晰 syntax on " 显示行号,方便定位代码 set number " 在状态栏显示光标当前位置 set ruler " 搜索时忽略大小写,但如果输入了大写字母则区分大小写 set ignorecase set smartcase " 启用鼠标支持,对新手非常友好(可以用鼠标点击定位光标) set mouse=a " 缩进设置:将 Tab 键设置为 4 个空格 set tabstop=4 set shiftwidth=4 set expandtab EOF即使你在.vimrc里写了syntax on,在以下几种常见情况下,代码依然可能看起来是白茫茫一片。
如果你是在终端里直接输入vim打开一个空白界面,然后再粘贴或编写 C++ 代码,Vim 此时并不知道你正在写 C++,它只会把你当成普通文本处理。
- 解决方法:在 Vim 中手动告诉它:“嘿,这是 C++ 代码!”
- 按下冒号
:进入底行模式,输入set filetype=cpp并回车。你会发现高亮瞬间就出来了!
- 按下冒号
- 最佳习惯:以后尽量通过带文件名的命令打开 Vim,例如
vim demo.cpp。只要文件名带有.cpp后缀,Vim 就会自动开启 C++ 语法高亮。