Linux 高手进阶:Vim 核心模式与分屏操作详解

哎呦 资料合集

链接:https://pan.quark.cn/s/770d9387db5f

在 Linux 的世界里,Vim 被誉为"编辑器之神",它不仅仅是一个文本编辑器,更是一种高效的编程哲学。无论是修改服务器上的配置文件,还是进行大型项目开发,熟练掌握 Vim 都能极大地提升我们的工作效率。今天的这篇博客,我们将从最基础的核心模式讲起,逐步深入到能够让效率倍增的分屏操作,并通过详细的案例与结果展示,助您彻底征服 Vim。

一、 Vim 的灵魂:理解三大核心模式

Vim 与我们常见的 Windows 记事本等编辑器最大的不同在于其独特的模式设计。理解并熟练切换这三种模式,是掌握 Vim 的第一步。

模式关系图:​启动 Vim​​ -> ​​[命令模式]​​ <-> ​​[编辑模式]​​ ​​启动 Vim​​ -> ​​[命令模式]​​ <-> ​​[末行模式]​

注意: 编辑模式和末行模式之间不能直接切换,必须通过命令模式作为"中转站"。

1. 命令模式 (Command Mode)

这是我们打开 Vim 后默认进入的模式。在此模式下,你敲击的任何按键都会被 Vim 解析为命令,而不是输入字符。例如,移动光标、删除文本、复制粘贴等操作都在此模式下完成。

  • 进入方式 :在 Shell 中输入 vim 文件名 后回车,即可打开文件并进入命令模式。
  • 核心特性:它是连接编辑模式和末行模式的桥梁。
2. 编辑模式 (Insert/Edit Mode)

顾名思义,这个模式就是用来进行文本内容输入的。

  • 切换方法 :在命令模式下,按下以下任意一个键即可进入编辑模式:
  • ​i​:在当前光标插入。
  • ​a​:在当前光标追加。
  • ​o​:在当前行的下一行新建一行并开始编辑。
  • ​I​:在当前行的行首插入。
  • ​A​:在当前行的行尾追加。
  • ​O​:在当前行的上一行新建一行并开始编辑。
  • ​s​:删除当前光标所在字符,并进入编辑模式。
  • ​S​:删除当前光标所在行,并进入编辑模式。
  • 返回命令模式 :在编辑模式下,按 Esc 键。

【代码案例】

  1. 在您的 Linux 终端中创建一个新文件并用 Vim 打开:

    vim hello.txt

  2. 运行结果 : 您会看到一个空白的 Vim 界面,光标在左上角闪烁,此时正处于命令模式

  3. 操作 : 按下 i 键。

  4. 运行结果 : 注意 Vim 窗口的左下角,会出现 -- INSERT ---- 插入 -- 的提示。这表示您已成功进入编辑模式,现在可以自由输入文本了。

    -- INSERT --

  5. 操作 : 输入 "Hello, Vim!",然后按 Esc 键。

  6. 运行结果 : 左下角的 -- INSERT -- 提示消失,您已返回命令模式

3. 末行模式 (Last-Line Mode)

此模式用于执行保存、退出、查找、替换等高级指令。

  • 进入方式 :在命令模式 下,按 : 键。
  • 常用命令
  • ​:w​:保存 (Write) 文件。
  • ​:q​:退出 (Quit) 编辑器。
  • ​:wq​:保存并退出。
  • ​:q!​:强制退出,不保存任何修改。
  • ​:x​:功能同 ​:wq​,在文件有修改时保存并退出。
  • 返回命令模式
  • 成功执行命令后,通常会自动返回命令模式。
  • 如果输入了命令但不想执行,可以按两次 ​Esc​ 键返回。

【代码案例】

  1. 接上例,我们已经输入了 "Hello, Vim!" 并回到了命令模式

  2. 操作 : 按下 : 键。

  3. 运行结果: 光标会立即跳转到 Vim 窗口的左下角,并显示一个冒号,等待您输入命令。

    :

  4. 操作 : 输入 wq 并回车。

    :wq

  5. 运行结果 : Vim 将会保存文件内容并退出,返回到您的 Shell 终端。您可以使用 cat hello.txt 命令查看文件内容,确认 "Hello, Vim!" 已被成功写入。

二、 效率倍增器:Vim 分屏操作详解

当需要同时查看或编辑多个文件,或者一个文件的不同部分时,Vim 强大的分屏功能就派上用场了。

1. 翻屏快捷键(快速浏览)

在深入分屏前,先了解几个在命令模式下快速浏览文件的快捷键,这在处理大文件时非常有用。

  • ​Ctrl + u​:向上翻半屏 (Up)。
  • ​Ctrl + d​:向下翻半屏 (Down)。
  • ​Ctrl + f​:向下翻一屏 (Forward)。
  • ​Ctrl + b​:向上翻一屏 (Backward)。
2. 水平分屏 (​​:sp​​)

将当前窗口水平分割为上下两个。

  • ​:sp​:将当前文件在下方新窗口中打开。
  • ​:sp 文件名​:在下方新窗口中打开指定文件。

【代码案例】

  1. 打开我们之前创建的 hello.txt 文件。

    vim hello.txt

  2. 操作 : 在命令模式下,输入 :sp 并回车。

  3. 运行结果 : 屏幕会被一条状态栏水平分割成上下两个窗口,两个窗口都显示 hello.txt 的内容。光标会停留在上方的窗口。

    +---------------------------------+
    | Hello, Vim! | <-- 光标在这里
    | ~ |
    | ~ |
    +=================================+
    | Hello, Vim! |
    | ~ |
    | ~ |
    +---------------------------------+
    :sp

3. 垂直分屏 (​​:vsp​​)

将当前窗口垂直分割为左右两个。

  • ​:vsp​:将当前文件在右侧新窗口中打开。
  • ​:vsp 文件名​:在右侧新窗口中打开指定文件。

【代码案例】

  1. 假设我们有一个 main.cpp 和一个 utils.h 文件。先用 Vim 打开 main.cpp

    vim main.cpp

  2. 操作 : 在命令模式下,输入 :vsp utils.h 并回车。

  3. 运行结果 : 屏幕被垂直分割,左侧是 main.cpp,右侧是 utils.h。这对于参照头文件编写实现代码的场景极为方便。

    +----------------------+----------------------+
    | // main.cpp | // utils.h |
    | #include "utils.h" | void helper(); |
    | | |
    | int main() { | |
    | helper(); | |
    | return 0; | |
    | } | |
    +======================+======================+
    :vsp utils.h

4. 窗口切换

在多个分屏窗口间移动光标。

  • ​Ctrl + w + w​:循环地在所有窗口间切换。
  • ​Ctrl + w + 方向键(h,j,k,l)​:切换到指定方向的窗口(例如 ​Ctrl+w+l​ 切换到右侧窗口)。

【代码案例】

  1. 接上例,当前光标在右侧的 utils.h 窗口。
  2. 操作 : 按下 Ctrl + w,然后迅速按下 h
  3. 运行结果 : 光标会立即从右侧的 utils.h 窗口移动到左侧的 main.cpp 窗口。使用 Ctrl+w+w 也能达到同样的效果(在只有两个窗口时)。
5. 窗口退出
  • ​:q​:关闭当前光标所在的窗口。
  • ​:wq​:保存并关闭当前光标所在的窗口。
  • ​:qa​​:qall​:关闭所有窗口。如果存在未保存的修改会失败。
  • ​:wqa​​:wqall​:保存所有窗口的修改并全部关闭。

【代码案例】

  1. 在左右分屏的状态下,光标位于左侧的 main.cpp 窗口。
  2. 操作 : 输入 :q 并回车。
  3. 运行结果 : 左侧的 main.cpp 窗口被关闭,整个 Vim 界面只剩下右侧的 utils.h 窗口。关闭最后一个窗口将会退出 Vim。
三、知识小结与实战演练

为了巩固所学,我们来完成一个常见的开发任务:从头文件中复制函数声明到源文件中

  1. 准备文件

    echo "void print_message();" > func.h
    echo -e "#include "func.h"\n\nint main() {\n\n return 0;\n}" > main.c

  2. 打开并分屏

    vim main.c
    :vsp func.h # 垂直分屏打开头文件

  • 结果 :左边是 ​main.c​,右边是 ​func.h​
  1. 切换并复制
  • ​Ctrl + w + l​ 切换到右边的 ​func.h​ 窗口。
  • 移动光标到 ​void print_message();​ 这一行。
  • 在命令模式下按 ​yy​ 复制整行。
  1. 切换并粘贴
  • ​Ctrl + w + h​ 切换回左边的 ​main.c​ 窗口。
  • 将光标移动到 ​main​ 函数下方,用于实现函数。
  • ​p​ 粘贴。
  1. 编辑并保存退出
  • ​main.c​ 中完成 ​print_message​ 函数的实现。
  • 输入 ​:wqa​ 保存所有文件并退出 Vim。

通过这个简单的流程,我们实践了分屏、窗口切换、跨文件复制粘贴以及全部保存退出,这正是 Vim 分屏操作在实际工作中的威力体现。

核心知识点回顾表

|------------|-------------------------------------------------------------------|--------------------------------|
| 知识点 | 核心内容 | 易混淆点/操作要点 |
| Vim 模式 | 命令模式(中枢)、编辑模式(输入)、末行模式(指令) | 模式间切换必须经过命令模式。 |
| 进入编辑模式 | ​​i​​​, ​​a​​​, ​​o​​​, ​​I​​​, ​​A​​​, ​​O​​ 等 | 小写字母在光标附近操作,大写字母在行首/尾操作。 |
| 末行模式命令 | ​​:w​​​ (保存), ​​:q​​​ (退出), ​​:wq​​​ (保存退出), ​​:q!​​ (强退) | ​​:q!​​ 会丢失未保存的修改,请谨慎使用。 |
| 水平分屏 | ​​:sp [文件名]​​,将屏幕上下分割。 | 适合查看同一文件的不同部分。 |
| 垂直分屏 | ​​:vsp [文件名]​​,将屏幕左右分割。 | 对比不同文件(如 .h 和 .c)的利器。 |
| 窗口切换 | ​​Ctrl + w + w​​​ (循环), ​​Ctrl + w + 方向键​​ (定向) | 方向键 ​​h,j,k,l​​ 分别对应左、下、上、右。 |
| 窗口退出 | ​​:q​​​ (关闭当前), ​​:wqa​​ (保存并关闭所有) | 注意区分关闭单个窗口和关闭所有窗口的命令。 |


相关推荐
一枚前端小能手7 小时前
🔥 SSR服务端渲染实战技巧 - 从零到一构建高性能全栈应用
前端·javascript
Komorebi_99997 小时前
Vue3 provide/inject 详细组件关系说明
前端·javascript·vue.js
egoist20237 小时前
[linux仓库]信号产生[进程信号·贰]
linux·键盘·系统调用·信号产生·软件条件
用户1412501665277 小时前
一文彻底掌握 ECharts:从配置解读到实战应用
前端
LRH7 小时前
React 架构设计:从 stack reconciler 到 fiber reconciler 的演进
前端
VIjolie7 小时前
文档/会议类应用的协同同步机制(OT/CRDT简要理解)
前端
不会调制解调的猫7 小时前
笔记 | 内网服务器通过wifi穿透,设置流量走向
运维·服务器·笔记
不一样的少年_7 小时前
【前端效率工具】:告别右键另存,不到 50 行代码一键批量下载网页图片
前端·javascript·浏览器
golang学习记7 小时前
从0死磕全栈之Next.js 企业级 next.config.js 配置详解:打造高性能、安全、可维护的中大型项目
前端