Linux Vim 编辑器完全指南
概述
Vim 是 Linux 系统中功能最强大的文本编辑器之一,几乎存在于所有 Linux 发行版中。虽然它的学习曲线较为陡峭,但一旦掌握,就能实现极高的编辑效率。Vim 基于模式化设计——普通模式(Normal)、插入模式(Insert)、可视模式(Visual)各司其职,配合丰富的快捷键和命令组合,可以完成从快速导航、批量编辑到宏录制等复杂任务。
基础语法
Vim 的核心是模式切换。默认进入普通模式,在普通模式下按键是命令而非输入文字;按 i 进入插入模式开始编辑;按 Esc 返回普通模式;按 : 进入命令模式执行保存、退出等操作。理解这三种模式的分工是掌握 Vim 的关键。
- i / a:在当前光标前/后进入插入模式。
- x / dd / yy:删除当前字符 / 删除当前行 / 复制当前行。
- p / P:在光标后/前粘贴已复制内容。
- :/pattern:在文件中搜索关键词。
- :wq / :q!:保存并退出 / 强制退出不保存。
Vim 还支持多窗口编辑(:sp 水平分割,:vs 垂直分割)、标签页(:tabnew)、以及强大的插件扩展系统,可以将 Vim 打造成完整的 IDE。
完整代码示例+注释
# === 基本操作 ===
vim file.txt # 打开文件(不存在则新建)
--- 普通模式快捷键 ---
移动光标
h j k l # 左下上右(也可使用方向键)
w / b # 按单词前进/后退
0 / $ # 跳到行首/行尾
gg / G # 跳到文件首行/末行
Ctrl+d / Ctrl+u # 下/上翻半页
:set number # 显示行号
:15 # 跳到第 15 行
编辑操作
i # 在光标前插入
a # 在光标后追加
o / O # 在下方/上方插入新行
x # 删除光标处字符
dd # 删除当前行(并保存到剪贴板)
dw # 删除一个单词
d$ # 删除到行尾
yy # 复制当前行
p / P # 在光标后/前粘贴
u / Ctrl+r # 撤销 / 重做
可视模式(选中区域操作)
v # 进入字符可视模式
V # 进入行可视模式
Ctrl+v # 进入块可视模式(矩形选择)
> # 将选中区域整体右缩进
< # 左缩进
y # 复制选中内容
d # 删除选中内容
--- 搜索与替换 ---
/keyword # 向下搜索 keyword
?keyword # 向上搜索
n / N # 跳到下一个/上一个匹配
:%s/old/new/g # 全局替换(每行所有匹配)
:%s/old/new/gc # 全局替换(逐个确认)
:#,#s/old/new/g # 在指定行范围替换
--- 命令模式(按 : 进入)===
:w # 保存(write)
:q # 退出(quit)
:wq / :x # 保存并退出
:q! # 强制退出不保存
:e filename # 打开另一个文件
:r filename # 在光标处插入文件内容
:!ls # 执行外部命令(如查看文件列表)
:sp filename # 水平分割窗口打开文件
:vs filename # 垂直分割窗口打开文件
Ctrl+w w # 在窗口间切换
:bn / :bp # 切换到下一个/上一个缓冲区
--- 高级技巧 ---
宏录制与回放
qa # 开始录制宏到寄存器 a
...(执行一系列操作)...
q # 停止录制
@a # 回放寄存器 a 中的宏
@@ # 重复上次宏
10@a # 执行宏 10 次
多文件编辑
:args *.txt # 将所有 txt 文件加入参数列表
:next / :prev # 切换上一个/下一个文件
:argdo %s/old/new/g | w # 对参数列表中所有文件执行替换并保存
文本对象操作
ci" # 修改引号内的内容(change inside ")
di" # 删除引号内的内容(delete inside ")
yi) # 复制括号内的内容(yank inside )
vat # 选中整个 XML/HTML 标签(visual around tag)
--- 配置 ~/.vimrc ---
syntax on # 启用语法高亮
set relativenumber # 显示相对行号(移动操作更方便)
set cursorline # 高亮当前行
set wildmenu # 命令模式 Tab 自动补全
set wrap # 自动换行
set ignorecase # 搜索忽略大小写
set hlsearch # 高亮搜索结果
set incsearch # 实时显示搜索匹配
filetype plugin indent on # 启用文件类型检测和缩进规则
运行效果
在 Vim 中打开文件后,按 i 进入插入模式即可正常编辑文字。按 Esc 返回普通模式后,h、j、k、l 或方向键可以在文字间移动。按 / 进入搜索模式后输入关键词,文件中的匹配处会高亮显示,按 n 跳转到下一个匹配项。执行 :%s/old/new/g 会一次性将文件中所有 old 替换为 new,无需逐个手动修改。
使用宏录制功能可以自动化重复操作。例如需要给每一行的行首加一个 # 注释符号:先按 gg 跳到开头,然后 qa 开始录制,接着按 I 进入行首插入,输入 # 后按 Esc 退回普通模式,再按 j 跳到下一行后按 q 停止录制,最后按 @a 执行一次宏,或按 100@a 批量执行多次。
常见问题
Q1:不小心在普通模式下按了大写 I 或 A,结果进入了奇怪的状态
这是 Vim 的正常行为。大写 I 表示在行首插入(Insert at beginning of line),大写 A 表示在行尾追加(Append after cursor)。按 Esc 返回普通模式即可恢复。不要反复按 i,虽然 i 也能进入插入模式,但插入位置不同(I 在行首,i 在当前光标前)。
Q2:文件修改后忘记加 sudo 权限保存不了怎么办
Vim 1.x 版本开始支持 :w !sudo tee % 的方式——通过外部 sudo 命令重写文件。具体操作是执行 :w !sudo tee % > /dev/null,然后按 L 重新加载文件。或者在打开文件前确认自己有写权限。
Q3:如何快速删除大量内容
普通模式下按 d 加动作可以删除:dG 删除从当前行到文件末尾的所有内容,dgg 删除从文件开头到当前行的所有内容,d$ 删除从光标到行尾的内容。在可视模式下选中区域后按 d 直接删除整个选择块。
Q4:Vim 能不能像 VSCode 一样有侧边文件树
可以通过安装插件实现。NERDTree 是最常用的文件树插件,配合 vim-plug 等插件管理器安装后,用 :NERDTreeToggle 打开/关闭文件浏览侧边栏。Vim 8 及以上版本内置了 :Explore 命令实现基本的文件浏览功能。
延伸阅读
- Vim 官方文档:https://www.vim.org/docs.php — 包含完整的帮助手册。
- vimtutor:命令行输入 vimtutor 即可进入官方教程,30 分钟即可入门基础操作。
- 《Practical Vim》by Drew Neil:经典 Vim 书籍,深入讲解编辑器的核心概念和实用技巧。