作为一名后端工程师,每天与代码打交道的时间占据了大部分。你是否还在为频繁在编辑器和终端之间切换而烦恼?是否还在用鼠标进行繁琐的文本操作?Vim,这款强大的文本编辑器,正是解决这些痛点的利器。掌握 Vim 核心操作,能够极大地提升编码效率,让你在面对线上故障,紧急修改配置文件,查看 Nginx 日志时更加得心应手。例如,快速定位到错误日志行,批量替换错误配置,无需频繁打开 GUI 编辑器,在服务器上直接完成。
Vim 的三种模式详解
Vim 的精髓在于其三种模式:普通模式(Normal mode)、插入模式(Insert mode)和命令模式(Command mode)。理解这三种模式是掌握 Vim 的基础。
普通模式(Normal mode)
这是 Vim 的默认模式。在该模式下,可以进行光标移动、文本删除、复制粘贴等操作。很多快捷键都只能在这个模式下使用。
- 光标移动:
h(左),j(下),k(上),l(右) - 单词移动:
w(下一个单词开头),b(上一个单词开头),e(下一个单词结尾) - 行移动:
0(行首),$(行尾),^(第一个非空字符) - 页面移动:
Ctrl + f(向下翻页),Ctrl + b(向上翻页) - 查找:
/pattern(查找 pattern),n(下一个匹配),N(上一个匹配) - 删除:
x(删除光标所在字符),dd(删除当前行),dw(删除一个单词) - 复制:
yy(复制当前行),yw(复制一个单词) - 粘贴:
p(在光标后粘贴),P(在光标前粘贴) - 撤销/重做:
u(撤销),Ctrl + r(重做)
插入模式(Insert mode)
在普通模式下,按下 i (在光标前插入), a (在光标后插入), o (在当前行下方插入新行), I (在行首插入), A (在行尾插入), O (在当前行上方插入新行) 等键,可以进入插入模式。该模式下,可以像普通编辑器一样输入文本。按下 Esc 键返回普通模式。
命令模式(Command mode)
在普通模式下,按下 : 键进入命令模式。该模式下,可以执行保存、退出、查找替换等命令。
- 保存:
:w(保存),:w filename(另存为 filename) - 退出:
:q(退出),:q!(强制退出,不保存),:wq(保存并退出),:x(保存并退出,仅当文件有修改时) - 查找替换:
:%s/old/new/g(全局替换 old 为 new) - 行号显示:
:set number(显示行号),:set nonumber(隐藏行号) - 语法高亮:
:syntax on(开启语法高亮),:syntax off(关闭语法高亮)
Vim 核心操作进阶:高效编辑技巧
掌握了基本模式和命令后,可以学习一些高级技巧来进一步提升效率。
批量注释/取消注释
在开发过程中,经常需要批量注释或取消注释代码。Vim 提供了便捷的方法。
批量注释:
:起始行号,结束行号s/^/注释符/例如,注释 10-20 行,使用
://10,20s/^////批量取消注释:

:起始行号,结束行号s/^注释符//例如,取消 10-20 行的注释,使用
://10,20s/^////
代码格式化
Vim 可以调用外部命令来格式化代码,例如使用 clang-format 格式化 C/C++ 代码。
:!clang-format % > %_tmp && mv %_tmp %
可以使用快捷键来简化操作,例如将 <leader>cf 映射为格式化命令:
map <leader>cf :!clang-format % > %_tmp && mv %_tmp %<CR>
多窗口操作
Vim 支持多窗口操作,可以在同一个 Vim 实例中打开多个文件。
- 水平分割窗口:
:split或:sp - 垂直分割窗口:
:vsplit或:vs - 窗口切换:
Ctrl + w + w(切换到下一个窗口)
实战避坑:Vim 使用注意事项
- 新手容易迷失在模式之间: 牢记三种模式的切换方式,多加练习。
- 配置文件
.vimrc是关键: 将常用的配置项添加到.vimrc文件中,例如set number,syntax on,set tabstop=4,set shiftwidth=4等。 - 善用 Vim 插件: Vim 的插件生态非常丰富,可以安装插件来增强功能,例如代码补全、语法检查等。常用的插件管理器有 Vundle, Pathogen, vim-plug 等。
- 备份你的
.vimrc: 这是你 Vim 使用习惯的沉淀,防止配置丢失。
掌握这些 Vim 核心操作,可以让你在 Linux 服务器上,无需宝塔面板等图形化工具,也能快速完成各种文本编辑任务,例如修改 Nginx 反向代理配置、查看负载均衡状态、分析并发连接数等。熟练使用 Vim,是后端工程师必备的技能。
冠军资讯
不想写注释