DevToolBox免费
博客

Vim指南:开发者完整Vim/Neovim教程

13 分钟阅读作者 DevToolBox

TL;DR

Vim 是一款模态文本编辑器 —— 你需要在普通模式、插入模式、可视模式和命令模式之间切换。学习曲线较陡,但回报巨大:完全不离开键盘即可以思考的速度进行编辑。本指南涵盖从退出 Vim 到录制宏、配置 Neovim、以及使用 Telescope 和 LSP 构建现代类 IDE 工作流的全部内容。

核心要点

  • Vim 有五种模式 —— 普通模式是默认模式;始终用 Escape 返回
  • 学习文本对象(diwci"da{})—— 这是最有效率倍增效果的功能
  • 使用 .(点命令)重复上次修改 —— 与文本对象结合实现强大编辑
  • 宏(q/@)可在多行上自动化重复的多步骤编辑
  • c 标志的 :%s/旧/新/gc 让你逐个确认每次替换
  • Neovim + Lua 配置(init.lua)+ Lazy.nvim 是现代完整 IDE 设置的推荐方式
  • 分屏 + 缓冲区 + 标记可替代大多数工作流中的标签页 —— 掌握 Ctrl+w 导航
  • 投入一周时间突破初期障碍 —— 之后生产力呈指数级增长

简介:为什么在 2026 年学习 Vim?

Vim 自 1991 年以来一直是开发者的利器,其影响力有增无减。每个主流 IDE —— VS Code、JetBrains、Xcode —— 都提供 Vim 模拟插件,且通常是安装量最高的扩展之一。SSH 会话、生产服务器和容器环境几乎总是有 vi 可用。理解 Vim 赋予你一种通用的编辑超能力。

核心思想是模态编辑:Vim 在不同模式之间切换,而不是为每个命令使用修饰键(Ctrl、Alt)。在普通模式下,每个键都是命令;在插入模式下,键输入文字。这听起来违反直觉,但却能使用助记单字符命令实现极其快速、精确的文本操作。

Neovim 是 Vim 的现代化分支,增加了内置 LSP 支持、异步处理、Lua API 和活跃的插件生态系统。本指南同时涵盖 Vim 和 Neovim,在存在差异的地方会特别标注。如果你是新手,推荐选择 Neovim。

1. Vim 模式详解

理解 Vim 的模态系统是最重要的核心概念。初学者遇到的所有困惑都源于意外进入了错误的模式。

普通模式 — 命令中枢

普通模式是打开文件时的默认模式。按键被解释为命令,而非文本输入。始终用 Escape(或更快的 Ctrl+[)返回此模式。在 Vim 中,你的大部分时间应该在普通模式下度过 —— 每次编辑之间都会返回这里。

插入模式 — 输入文字

插入模式的工作方式与传统文本编辑器相同。从普通模式进入插入模式有多种方式,每种方式放置光标的位置不同:

按键操作
i在光标前插入
I在行首插入
a在光标后追加
A在行尾追加
o在下方新建一行并插入
O在上方新建一行并插入
s删除字符并进入插入模式
S删除行并进入插入模式

可视模式 — 选择文本

可视模式在应用操作前高亮显示文本。有三种变体:

按键模式说明
v字符可视逐字符选择
V行可视选择整行
Ctrl+v块可视矩形列选择 —— 同时在多列中插入/删除
gv重新选择重新选择上次的可视选区

2. 基本导航

基础移动:h/j/k/l

h ← 左 j ↓ 下 k ↑ 上 l → 右 " 所有命令都接受数量前缀: 5j " 向下移动5行 10h " 向左移动10个字符

单词移动

w " 移到下一个单词开头(在标点处停止) W " 移到下一个 WORD 开头(以空格分隔) b " 向后移到单词开头 e " 移到单词末尾 ge " 向后移到上一个单词末尾

行和文件导航

0 " 移到行首(第0列) ^ " 移到第一个非空白字符 $ " 移到行尾 gg " 移到文件第一行 G " 移到文件最后一行 42G " 移到第42行 Ctrl+f " 向前滚动一整页 Ctrl+b " 向后滚动一整页 zz " 将当前行居中显示在屏幕上

搜索导航

/pattern " 向前搜索模式 ?pattern " 向后搜索模式 n " 下一个匹配(同方向) N " 上一个匹配(反方向) * " 向前搜索光标下的单词 # " 向后搜索光标下的单词

3. 核心编辑命令

删除、复制和粘贴

" === 删除 === x " 删除光标下的字符 dd " 删除整行 D " 删除从光标到行尾 dw " 删除单词 d3w " 删除3个单词 dG " 删除从当前行到文件末尾 " === 复制(yank)=== yy " 复制当前行 yw " 复制单词 y$ " 复制到行尾 yG " 复制到文件末尾 " === 粘贴(put)=== p " 在光标后粘贴 P " 在光标前粘贴 "+p " 从系统剪贴板粘贴(+寄存器) "0p " 粘贴上次明确复制的文本(非删除操作)

撤销和重做

u " 撤销上次修改 U " 撤销当前行的所有修改 Ctrl+r " 重做(撤销撤销操作) 5u " 撤销最近5次修改

4. 文本对象 —— Vim 的超能力

文本对象是 Vim 最强大的功能,大多数其他编辑器都缺乏这一特性。它们让你用单个操作符对语义块进行操作:单词、句子、段落、引号字符串、括号表达式、HTML 标签等。

语法是:操作符 + i/a + 对象i 前缀表示内部(不包括外围分隔符),a 表示周围(包括外围分隔符)。

diw " 删除内部单词(只删单词,不含空格) daw " 删除整个单词(单词+周围空格) ciw " 修改内部单词(删除单词后进入插入模式) ci" " 修改双引号内的内容:"hello" → "" ca" " 修改双引号及内容(删除引号) ci( " 修改括号内的内容:foo(bar) → foo() da{ " 删除花括号及内容 yip " 复制内部段落 dit " 删除 HTML/XML 标签内的内容 cat " 删除整个标签(含标签本身) " 实际示例: " 光标在以下内容内的任意位置:console.log("hello world") ci" " → console.log("") (修改引号内容) " 光标在以下内容内的任意位置:function foo(a, b, c) ci( " → function foo() (清空参数)

5. 搜索和替换

" 基本语法::[范围]s/模式/替换/[标志] :s/old/new " 替换当前行第一个 'old' :s/old/new/g " 替换当前行所有 'old'(g=全局) :%s/old/new/g " 替换整个文件中的所有(%=所有行) :%s/old/new/gc " 替换所有,逐个确认(c=确认) :%s/old/new/gi " 替换所有,不区分大小写(i) " 范围示例: :1,10s/foo/bar/g " 第1-10行 :'<,'>s/foo/bar/g " 可视选区(V模式后输入:自动填充) " 实用模式: :%s/s+$//e " 删除每行末尾空白(e=找不到时不报错) :%s/^/ /g " 在每行开头添加2个空格 " 全局命令: :g/pattern/d " 删除所有包含模式的行 :g/^s*$/d " 删除所有空行 :v/pattern/d " 删除所有不匹配模式的行

6. 宏 —— 自动化重复编辑

宏录制一系列普通模式命令(包括进入/退出插入模式、移动和 Ex 命令)并重放它们。对于重复的结构性编辑,宏是 Vim 最强大的自动化功能。

qa " 开始录制到寄存器 'a' " ... 执行你的操作序列 ... q " 停止录制 @a " 播放宏 'a' 一次 @@ " 重放上次使用的宏 5@a " 播放宏 'a' 5次 :%normal @a " 将宏应用到文件的每一行 " 查看宏内容: "ap " 粘贴寄存器 'a' 查看录制的序列

7. 配置 —— .vimrc 和 init.lua

基本 .vimrc 设置

" ~/.vimrc — 基本设置 set nocompatible " 不兼容 Vi(启用 Vim 改进) filetype plugin indent on " 启用文件类型检测、插件和缩进 syntax on " 启用语法高亮 set number " 显示行号 set relativenumber " 显示相对行号(对移动命令非常有用) set cursorline " 高亮当前行 set hlsearch " 高亮搜索匹配 set incsearch " 增量搜索(边输入边高亮) set ignorecase " 搜索不区分大小写 set smartcase " 使用大写时覆盖 ignorecase set tabstop=2 " Tab 显示为 2 个空格 set shiftwidth=2 " 使用 2 个空格缩进 set expandtab " 用空格代替 Tab set hidden " 允许后台缓冲区无需保存 set undofile " 跨会话持久撤销 set noswapfile " 禁用交换文件 set scrolloff=8 " 光标上下保持 8 行可见 let mapleader = ' ' " 空格键作为 leader 键 " 快速保存和退出 nnoremap <leader>w :w<CR> nnoremap <leader>q :q<CR> " 清除搜索高亮 nnoremap <leader>h :nohlsearch<CR> " 更好的分屏导航 nnoremap <C-h> <C-w>h nnoremap <C-j> <C-w>j nnoremap <C-k> <C-w>k nnoremap <C-l> <C-w>l

8. Vim vs Neovim 对比

功能Vim 9.xNeovim 0.9+
配置语言Vimscript 9(新语法)Lua(主要)+ Vimscript
内置 LSP否(需要 coc.nvim)是(vim.lsp)
Treesitter仅插件内置(nvim-treesitter)
异步任务控制有限完整异步 API
插件生态庞大、成熟非常活跃,Lua 优先
默认设置保守(Vi 兼容)合理的现代默认值
通用可用性大多数系统预装需要单独安装
入门配置网上有 vimrc 示例LazyVim、Kickstart、AstroNvim
最适合服务器、脚本、熟悉 Vimscript完整开发工作流、现代 IDE 功能

9. 必备插件

插件功能适用
telescope.nvim模糊查找文件、文本、缓冲区Neovim
fzf.vim模糊查找文件和内容Vim + Neovim
nvim-tree / NERDTree文件资源管理器Neovim / Vim
vim-fugitiveGit 集成(最佳 Git 封装)Vim + Neovim
coc.nvim自动补全和 LSP(Vim 兼容)Vim + Neovim
nvim-lspconfig原生 LSP 配置Neovim
nvim-treesitter更好的语法高亮和文本对象Neovim
lualine.nvim美观的状态栏Neovim
vim-surround操作括号、引号等包围字符Vim + Neovim
gitsigns.nvim行内 Git 差异标记Neovim

常见问题

如何退出 Vim?

Escape 确保在普通模式,然后::q(没有未保存修改时退出),:q!(强制退出,放弃修改),:wqZZ(保存并退出)。如果一切看起来都出了问题,反复按 Escape 然后输入 :q! 总能成功退出。

Vim 的主要模式有哪些?

Vim 有五种主要模式:普通模式(默认,用于导航和命令)、插入模式(用于输入文字,通过 i、a、o 等进入)、可视模式(用于选择文字,通过 v、V 或 Ctrl+v 进入)、命令行模式(用于 Ex 命令,通过 : 进入)和替换模式(通过 R 进入,覆盖现有文字)。理解模式是流畅使用 Vim 的关键。

如何在 Vim 中搜索和替换文本?

使用替换命令::%s/旧/新/g 替换文件中的所有出现。:s/旧/新/g 只替换当前行。添加 c 标志进行确认::%s/旧/新/gc% 表示"所有行",可以替换为范围如 1,10

Vim 和 Neovim 有什么区别?

Neovim 是具有内置 LSP、Lua 配置、异步处理、浮动窗口和活跃现代插件生态系统的现代化分支。Vim 更稳定且通常预装在系统上。对于新的开发工作流,推荐 Neovim。在服务器上进行快速编辑时,Vim 总是可用的。

如何学习 Vim?

在终端中运行 vimtutor —— 这是一个内置的 30 分钟互动教程。每天专注学习一个新概念,而不是一次性学完所有内容。强迫自己在一周内只使用 Vim;肌肉记忆会很快形成。最优先练习文本对象和移动命令 —— 它们带来最大的生产力提升。

𝕏 Twitterin LinkedIn
这篇文章有帮助吗?

保持更新

获取每周开发技巧和新工具通知。

无垃圾邮件,随时退订。

试试这些相关工具

MDMarkdown to HTML±Text Diff Checker.*Regex Tester

相关文章

Linux命令指南:开发者必备命令行参考

掌握Linux命令行。涵盖文件系统导航、文本处理、进程管理、权限、网络、SSH、包管理和Shell生产力技巧的完整指南。

SSH密钥生成器:生成和管理SSH密钥 — 完整指南

掌握SSH密钥生成和管理。含ssh-keygen、Ed25519/RSA对比、SSH配置、node-forge、Python paramiko、Git SSH设置、隧道、证书式SSH和安全最佳实践完整指南。