编辑器Vim

目录

  • [1. Vim 的模式](#1. Vim 的模式)
  • [2. 命令模式](#2. 命令模式)
    • [2.1. 光标移动](#2.1. 光标移动)
    • [2.2. 删除、复制与粘贴](#2.2. 删除、复制与粘贴)
    • [2.3. 替换、更改与撤销](#2.3. 替换、更改与撤销)
    • [2.4. 批量注释](#2.4. 批量注释)
  • [3. 底行模式:全局掌控](#3. 底行模式:全局掌控)
  • [4. Vim 配置](#4. Vim 配置)
    • [4.1. 配置文件](#4.1. 配置文件)
    • [4.2. 操作逻辑](#4.2. 操作逻辑)

在 Linux 开发工具链中,我们常常会产生一个误区:认为 IDE(集成开发环境)就是一切。但**"Linux 下的开发工具是独立的!"** IDE 很多时候仅仅是我们用来写代码的壳,而真正的编译(gcc/g++)、调试(gdb/cgdb)、构建(makefile/cmake)都是独立的工具。

而 Vim,作为 Linux 下最原生的文本编辑器,正是连接这一切的枢纽。很多人对 Vim 望而生畏,觉得它的操作反人类。但今天,我们将结合操作,彻底扒开 Vim 的底层逻辑,带你领略"键盘即鼠标"的极致效率。

1.Vim的模式

Vim 的三大核心模式:

  1. 普通/命令模式 (Normal Mode) :Vim 的默认模式 ,也是核心枢纽。此时键盘上的字母不是用来打字的,而是快捷键。用于控制屏幕光标移动、字符/行的删除、复制粘贴等。

  2. 插入模式 (Insert Mode):只有在这个模式下,你才可以进行正常的文字输入。这是编辑文本最频繁的模式。

  3. 底行模式 (Last Line Mode):用于文件的保存、退出、字符串查找替换、列出行号等全局操作。

2. 命令模式

进入 Vim 后,你首先处于命令模式。以下操作全部在命令模式下执行,无需进入底行模式。

2.1. 光标移动

在早期的键盘设计中,并没有独立的方向键,或者方向键离主键盘区太远。Vim 提倡使用 hjkl

  • 基础移动(上下左右):

    • h (左) | j (下) | k (上) | l (右)
  • 单词级跳跃(非常高效):

    • w (word):跳到下一个单词的开头。

    • e (end):跳到当前或下一个单词的字尾。

    • b (back):回到上一个单词的开头。

  • 行内极速定位(锚点):

    • 0 或 Shift + 6 (即 ^):跳到当前行的行首。

    • Shift + 4 (即 $):跳到当前行的行尾 。

  • 全局飞跃:

    • gg:瞬间回到文本第一行。

    • Shift + g (即 G):瞬间跳到文本最后一行。

    • n + G:跳到第 n 行(例如 15G 直接跳到第 15 行)。

  • Ctrl + g:在屏幕底部列出当前光标所在的行号。

  • 翻页操作:Ctrl + b (屏幕往后移动一页) | Ctrl + f (屏幕往前移动一页) | Ctrl + u (往后移动半页) | Ctrl + d (往前移动半页)。

2.2. 删除、复制与粘贴

Vim 的精髓在于批量化操作 。在命令前加上数字 n,即可重复执行 n 次。

  • 删除 (Delete):

    • x:删除光标所在位置的一个字符(向后删)。

    • n + x:例如 6x,删除光标所在位置及其后面的 6 个字符。

  • Shift + x (即 X):删除光标所在位置的前面一个字符。

  • n + X:例如 20X,向前删除 20 个字符。

  • dd:删除(剪切)光标所在的一整行。

  • n + dd:例如 5dd,从当前行开始向下删除 5 行。

  • 复制 (Yank):

    • yw:将光标所在处到字尾的字符复制到缓冲区中。
  • n + yw:复制 n 个单词。
  • yy:复制光标所在的一整行。

  • n + yy:例如 6yy,复制从当前行向下数的 6 行。

  • 粘贴 (Paste):

    • p:将缓冲区内的字符粘贴到光标所在位置。注意:所有与 y 有关的复制命令,都必须与 p 配合才能完成复制与粘贴功能。

2.3. 替换、更改与撤销

  • 替换 (Replace):

    • r:替换光标所在处的一个字符,替换后停留在命令模式(适合改错别字)。

    • Shift + r (即 R):进入替换模式 ,此时输入会连续覆盖后面的字符,直到按下 Esc。同时 shift + ~ 可实现大小写快速转化。

  • 更改 (Change):

    • cw:更改光标所在处的字到字尾处(删除该词并直接进入插入模式,非常常用!)。

    • n + cw:例如 c3w,更改 3 个单词。

  • 撤销与重做:

    • u:撤销上一次操作(可连续按 u 多次回退)。

    • Ctrl + r:对 u 的撤销进行"反撤销"(恢复操作,即重做)。

2.4 批量注释

  1. 在命令模式下,按 Ctrl + v 进入视图模式 (VISUAL BLOCK)。

  2. 使用 h 或 j 上下移动,选中多行的行首。

  3. 按下 Shift + i (即 I),进入插入模式。

  4. 输入注释符(如 // 或 #)。

  5. 按 Esc 键(稍微停顿一下),刚才选中的所有行都会自动加上注释!

  • 批量取消注释 :同样 Ctrl + v 选中多行注释符,直接按 d 即可删除。

3. 底行模式:全局掌控

在命令模式下,按下 Shift + ;(即 :),光标会跳到底部,进入底行模式。

3.1 保存与退出

  • :w:保存当前文件。

  • :q:退出(如果文件未修改)。

  • :wq:保存并退出(最常用的组合)。

  • :q!:强制退出,不保存 (当你改乱了代码想放弃时使用,按 q! 不存盘强制退出 vim)。

  • :w!:强制保存(当你打开了一个只读文件,但你有写权限时使用)。

3.2. 查找与替换

  • 查找:

    • :/keyword:按 / 键,输入你要找的字符,回车。按 n 向下继续查找,按 Shift + n 向上查找。

    • :?keyword:按 ? 键,向上查找。

  • 替换:

    • :%s/dst/src/g:将文件中所有的 dst 替换为 src。(%代表全文件,g代表全局替换)。

3.3. 界面与跳转设置

  • :set nu:显示行号(number)。

  • :set nonu:取消显示行号。

  • :n:直接输入数字 n 并回车,跳转到第 n 行。

  • :!cmd:不退出 vim,直接对代码进行编译和运行。

  • :!gcc %:% 代表当前文件名,可以直接编译当前代码。

分屏操作:(多文件代码对照)

看代码时经常需要对照,Vim 支持多文件分屏:

  • 在底行模式输入 :vs (vertical split) 或 :sp (split) 进行分屏。

  • 按 Ctrl + ww 可以在不同的分屏窗口之间切换光标。

4. Vim 配置

原生 Vim 就像一间毛坯房,能用但不够舒服。配置 Vim 其实就是修改一个叫 .vimrc 的文件。

4.1 配置文件

你只需要记住一个路径:~/.vimrc(Linux/Mac 系统)。如果这个文件不存在,自己新建一个即可。

在终端输入以下命令即可直接创建并打开它:

复制代码
vim ~/.vimrc

4.2 操作逻辑

  1. 即时生效 :修改完 .vimrc 保存退出后,下次打开 Vim 就会生效。

  2. 无需重启 :如果在 Vim 内部修改了配置,可以在底行模式输入 :source ~/.vimrc 让它立刻生效,不用关掉重开。

打开 ~/.vimrc,把下面的代码复制进去并保存:

复制代码
" 1. 显示行号(按 :set nonu 可临时取消)
set number

" 2. 开启语法高亮(代码终于有颜色了)
syntax on

" 3. 开启自动缩进(写代码换行会自动对齐)
set autoindent

" 4. 将 Tab 键变成 4 个空格(保证代码在不同电脑上对齐)
set tabstop=4
set expandtab

" 5. 开启鼠标支持(实在不会用键盘,允许你偶尔用鼠标滚轮)
set mouse=a
相关推荐
_upupup1 小时前
Linux中的权限解析
linux·服务器
路漫漫其修远兮sjw1 小时前
Linux 运维知识点笔记(中级)
linux·运维·笔记
石一峰6991 小时前
Linux INPUT 与 I2C 子系统关联
linux·运维·计算机外设
宵时待雨1 小时前
linux笔记归纳24:多路转接select
linux·服务器·笔记·高并发
RISCV_Explorer2 小时前
技术指南:从总线协议到软件可见行为——RISC-V 多核缓存一致性的 Linux 实践
linux·缓存·risc-v
ShineWinsu2 小时前
对于Redis:Redis特性以及应用场景的解析
linux·c++·redis·缓存·高并发·分布式系统·key-value
程序员-Benothing2 小时前
Linux系统启动流程详解:BIOS/UEFI、GRUB、initramfs、systemd
linux·运维·服务器
余槐i2 小时前
-m 2g 反而更早 OOM:Docker 内存计数与宿主机空闲口径差异
java·linux·docker·性能优化·cgroup
傲世仙尊2 小时前
线程池收尾-回调单例与可重入线程安全
linux·安全