Vim 详细使用指令(按功能分类)

说明:本文默认你在 普通模式(Normal) 下输入命令;: 开头的是 命令行模式(Ex)Ctrl+x 表示按住 Ctrl 再按 x。
记忆建议:先掌握 模式切换 → 移动 → 编辑 → 搜索替换 → 多文件/窗口 这条主线。


0. 模式与基础概念

0.1 三大常用模式

  • 普通模式(Normal):移动光标、触发编辑指令(默认进入)。
  • 插入模式(Insert):输入文本。
  • 可视模式(Visual):选中文本后再操作(复制/删除/缩进等)。

0.2 常用按键约定

  • ESC:回到普通模式(最重要的键之一)。
  • ::进入命令行模式,输入 Ex 命令。
  • .:重复上一次“修改类”操作(极高频)。
  • u / Ctrl+r:撤销 / 重做。

1. 启动、退出与帮助

1.1 启动

  • vim file.txt:打开文件
  • vim +n file.txt:打开并跳到第 n 行
  • vim +/pattern file.txt:打开并定位到第一次匹配
  • vim -o a b:横向分屏打开多个文件
  • vim -O a b:纵向分屏打开多个文件

1.2 退出/保存(命令行模式)

  • :q:退出(若有修改会失败)
  • :q!:强制退出(丢弃修改)
  • :w:保存
  • :wq / :x:保存并退出(x 会在无改动时不写入)
  • :wa:保存所有缓冲区
  • :qa:退出全部
  • :qa!:强制退出全部

1.3 帮助与信息

  • :help / :h:打开帮助
  • :h {topic}:按主题查帮助,如 :h motion:h :substitute
  • :set number?:查看某选项当前值
  • :messages:查看提示信息历史
  • :version:查看 Vim/Neovim 版本与特性

2. 模式切换(进入插入/可视/替换等)

2.1 进入插入模式

  • i:在光标前插入
  • a:在光标后插入
  • I:在行首插入(跳到第一个非空白字符)
  • A:在行尾插入
  • o:在下方新开一行并插入
  • O:在上方新开一行并插入

2.2 替换/选择模式

  • R:进入替换模式(覆盖输入)
  • v:字符可视模式
  • V:行可视模式
  • Ctrl+v:块可视模式(列选择)

3. 光标移动(Motion)

Vim 的强大来自 操作符 + 动作(operator + motion),例如:d(删除)+ w(到下一个单词)= dw

3.1 基本移动

  • h j k l:左 下 上 右
  • 0:到行首(含空白)
  • ^:到行首第一个非空白字符
  • $:到行尾

3.2 单词级移动

  • w:到下一个单词开头
  • W:到下一个“以空白分隔”的单词开头(更粗粒度)
  • e:到当前/下一个单词结尾
  • b:到上一个单词开头

3.3 句子/段落/代码块

  • ) / (:下/上一句
  • } / {:下/上一段
  • %:在成对符号间跳转(()[]{} 等,依赖语法匹配)

3.4 屏幕与滚动

  • gg:到文件第一行
  • G:到文件最后一行
  • {n}gg / :{n}:到第 n 行
  • H / M / L:到屏幕顶/中/底
  • Ctrl+f / Ctrl+b:下一页 / 上一页
  • Ctrl+d / Ctrl+u:向下/上滚半页
  • zz:当前行居中显示
  • zt / zb:当前行置顶 / 置底

3.5 行内精准跳转(非常常用)

  • f{char}:向右查找字符并跳到该字符
  • F{char}:向左查找字符
  • t{char}:向右查找字符并停在字符前
  • T{char}:向左查找字符并停在字符后
  • ; / ,:重复上一次 f/F/t/T(同向 / 反向)

4. 文本编辑(删除、修改、替换)

4.1 操作符(Operator)

  • d:删除(delete)
  • c:修改(change = 删除后进入插入)
  • y:复制(yank)
  • > / <:右/左缩进
  • g~:切换大小写(配合 motion)

4.2 常见组合示例(Operator + Motion)

  • dw:删除到下一个单词开头
  • de:删除到单词结尾
  • db:删除到上一个单词开头
  • d$:删除到行尾
  • d0:删除到行首
  • ci":修改双引号内内容(change inside “…”)
  • ci( / ci{ / ci[:修改括号/花括号/方括号内内容
  • diw:删除当前单词(delete inner word)
  • yiw:复制当前单词
  • vip:选中一个段落(visual inner paragraph)

4.3 面向“文本对象”(Text Object)

  • iw / aw:内/含空格的单词
  • ip / ap:内/含空行的段落
  • i" a":引号内部 / 含引号本身
  • i( a(:括号内部 / 含括号本身(同理 { [

4.4 单字符/小范围编辑

  • x:删除光标下字符
  • X:删除光标前字符
  • s:删除光标下字符并进入插入
  • r{char}:将光标下字符替换为 char
  • ~:切换光标下字符大小写(或选区内)
  • J:连接下一行到本行(合并行)

4.5 重复与撤销

  • .:重复上一次修改
  • u:撤销
  • U:撤销当前行上所有修改(不同版本行为略有差异)
  • Ctrl+r:重做

5. 复制/粘贴、寄存器(Registers)

5.1 基本复制粘贴

  • yy:复制当前行
  • {n}yy:复制 n 行
  • p:在光标后/下一行粘贴
  • P:在光标前/上一行粘贴

5.2 删除与复制的关系

  • d 删除和 c 修改都会把内容放入寄存器(默认寄存器)。
  • y 复制放入寄存器。

5.3 指定寄存器

  • "ayy:复制当前行到寄存器 a
  • "ap:从寄存器 a 粘贴
  • "+y / "+p:使用系统剪贴板(需要 Vim 编译支持 clipboard;Neovim 通常可用)
  • "*y / "*p:选择剪贴板(X11/Wayland 环境常见)

5.4 查看寄存器

  • :reg:查看所有寄存器
  • :reg a + ":查看指定寄存器

6. 搜索、跳转与替换(Find / Replace)

6.1 普通搜索

  • /pattern:向下搜索
  • ?pattern:向上搜索
  • n / N:下一个 / 上一个匹配(方向与 /? 有关)
  • *:搜索光标下单词(向下)
  • #:搜索光标下单词(向上)
  • g* / g#:类似 * / #,但不要求单词边界

6.2 搜索高亮与设置

  • :set hlsearch:高亮搜索结果
  • :set nohlsearch:关闭高亮
  • :noh:临时清除高亮(常用)
  • :set incsearch:边输入边匹配
  • :set ignorecase:忽略大小写
  • :set smartcase:含大写时不忽略

6.3 替换(:substitute)

格式::[范围]s/{pattern}/{replacement}/[flags]

  • :%s/foo/bar/g:全文件替换 foo → bar(全部匹配)
  • :s/foo/bar/g:仅当前行替换
  • :'<,'>s/foo/bar/g:仅选区替换(可视模式后自动出现)

常见 flags:

  • g:一行内替换所有匹配(默认只替换第一个)
  • c:逐个确认(confirm)
  • i / I:强制忽略/区分大小写

6.4 跳转历史(像浏览器后退/前进)

  • Ctrl+o:跳回(older)
  • Ctrl+i:跳前(newer)
  • '':跳回上一次光标位置(行)
  • 
    

7. 多文件:缓冲区(Buffer)、参数列表、最近文件

7.1 Buffer 常用命令(命令行模式)

  • :e file:编辑/打开文件
  • :enew:新建空缓冲区
  • :w:保存当前缓冲区
  • :bd:关闭当前缓冲区(不关窗口)
  • :bd!:强制关闭(丢弃修改)
  • :ls / :buffers:列出缓冲区
  • :b {n}:切换到编号为 n 的缓冲区
  • :b {name}:按文件名匹配切换
  • :bn / :bp:下一个 / 上一个缓冲区

7.2 参数列表(适合“批量处理一组文件”)

  • :args *.txt:把一组文件放入参数列表
  • :next / :prev:在参数列表中切换
  • :argdo %s/foo/bar/g | update:对参数列表中的每个文件执行替换并保存(谨慎使用,建议先备份/版本控制)

8. 窗口(split)与标签页(tab)

8.1 分屏(命令行模式)

  • :split / :sp:水平分屏
  • :vsplit / :vsp:垂直分屏
  • :split file / :vsplit file:分屏打开指定文件

8.2 窗口切换与管理(普通模式)

  • Ctrl+w h/j/k/l:切换到左/下/上/右窗口
  • Ctrl+w w:在窗口间循环切换
  • Ctrl+w =:平均分配窗口大小
  • Ctrl+w _:当前窗口最大高度
  • Ctrl+w |:当前窗口最大宽度
  • Ctrl+w q:关闭当前窗口
  • Ctrl+w o:只保留当前窗口(关闭其它窗口)

8.3 Tab 标签页

  • :tabnew:新建 tab
  • :tabnew file:新建 tab 打开文件
  • gt / gT:下一个 / 上一个 tab
  • :tabs:列出 tab
  • :tabclose:关闭当前 tab

9. 可视模式(选择)与块操作

9.1 可视模式基本

  • v:进入字符可视
  • V:进入行可视
  • Ctrl+v:进入块可视(列选择)
  • 选择后可用:y 复制、d 删除、c 修改、> 缩进等

9.2 块可视(列编辑)常见用法

示例:给多行行首添加 //

  1. Ctrl+v 进入块可视
  2. 选中多行的行首列
  3. I 输入 //
  4. ESC(会对所有选中行生效)

批量删除某一列字符:

  • 块选中列 → d

10. 缩进、格式化与大小写

10.1 缩进

  • >> / <<:当前行右/左缩进
  • {n}>>:n 行缩进
  • > + motion:对 motion 范围缩进,如 >ip 缩进一个段落
  • =:自动缩进(取决于 filetype/indent 配置),如 =G=ip

10.2 自动换行与格式化

  • gq:文本格式化(按 textwidth 等设置),如 gqap 格式化段落
  • 常用设置:
    • :set textwidth=80
    • :set formatoptions+=t

10.3 大小写转换

  • gu:转小写(配合 motion),如 guw
  • gU:转大写(配合 motion),如 gUU(整行大写)
  • g~:切换大小写

11. 标记(Marks)、书签与定位

11.1 设置/跳转标记

  • ma:在当前位置设置标记 a
  • `a:跳到标记 a(精确到列)
  • 'a:跳到标记 a(到行首非空白处)

11.2 常用内置标记

  • `.:上一次修改的位置
  • `^:上一次插入模式退出的位置
  • ``:上一次跳转前的位置(与 Ctrl+o 类似)

12. 宏(Macros)与批量重复

12.1 录制与播放

  • qa:开始录制宏到寄存器 a
  • q:停止录制
  • @a:执行宏 a
  • @@:重复上一次执行的宏
  • {n}@a:执行宏 n 次

12.2 与“重复”配合的思路

  • 能用 . 重复就优先用 .
  • 需要跨行/复杂操作时用宏;
  • 宏可结合搜索 n、移动 j 实现批处理。

13. 折叠(Folding)

折叠依赖 foldmethod(indent/syntax/marker…)。

  • za:切换折叠开/关(toggle)
  • zc / zo:关闭 / 打开折叠
  • zM / zR:关闭所有 / 打开所有
  • zm / zr:整体增加折叠 / 减少折叠
  • 常用设置:
    • :set foldmethod=indent
    • :set foldlevel=99(默认全部展开)

14. 命令行模式(:)常用 Ex 命令

14.1 文件与写入

  • :w newname:另存为
  • :r file:把 file 内容读入到光标后
  • :!cmd:执行外部命令(如 :!ls:!make
  • :r !cmd:把外部命令输出插入到当前缓冲区(如 :r !date

14.2 行范围(Range)语法

  • :1,10d:删除 1 到 10 行
  • :.,$y:复制当前行到文件末尾
  • :%:全文件范围
  • :'<,'>:当前可视选择范围
  • :g/pattern/...:全局命令(见下)

14.3 全局命令(global)

  • :g/pattern/d:删除所有匹配 pattern 的行
  • :g/pattern/y A:把所有匹配行复制追加到寄存器 A(大写表示追加)
  • :v/pattern/d:删除所有“不匹配”pattern 的行(v=not g)

15. 常用设置(:set)与 vimrc 思路

你可以把常用设置写到 ~/.vimrc(Vim)或 ~/.config/nvim/init.vim / init.lua(Neovim)。

15.1 编辑体验

  • :set number:显示行号
  • :set relativenumber:相对行号(配合 j/k 很爽)
  • :set cursorline:高亮当前行
  • :set wrap / :set nowrap:自动换行 / 不换行
  • :set mouse=a:启用鼠标(终端支持时)

15.2 搜索体验

  • :set hlsearch
  • :set incsearch
  • :set ignorecase smartcase

15.3 缩进(以空格为例)

  • :set expandtab:Tab 转空格
  • :set tabstop=4:Tab 显示宽度
  • :set shiftwidth=4:缩进宽度(>><< 等)
  • :set autoindent / :set smartindent

15.4 文件类型与语法

  • :filetype plugin indent on
  • :syntax on

16. 高效工作流小抄(高频组合)

16.1 “改这个括号里的内容”

  • ci(ci{ci[ci"ci'ci`

16.2 “删到行尾 / 改到行尾”

  • d$ / c$

16.3 “对这个段落做事”

  • dip 删除段落
  • yap 复制段落(含空行)
  • gqap 格式化段落

16.4 “按行批量替换,并确认”

  • :%s/old/new/gc

16.5 “多窗口里快速定位”

  • Ctrl+w + h/j/k/l 切换
  • Ctrl+o / Ctrl+i 回退/前进跳转

17. 常见误区与排错

  • 一直退出不了:先 ESC 回普通模式,再用 :q:q!
  • 粘贴缩进乱:可尝试 :set paste 粘贴前开启、粘贴后 :set nopaste(或配置更现代的粘贴方式)。
  • 系统剪贴板不可用:检查 :echo has('clipboard');或在终端/系统层面启用剪贴板支持。

18. 参考(建议收藏的 help 主题)

  • :h motion
  • :h operator
  • :h text-objects
  • :h visual-mode
  • :h registers
  • :h :substitute
  • :h global
  • :h windows
  • :h tabs