Vim 详细使用指令
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 块可视(列编辑)常见用法
示例:给多行行首添加 //
Ctrl+v进入块可视- 选中多行的行首列
I输入//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),如guwgU:转大写(配合 motion),如gUU(整行大写)g~:切换大小写
11. 标记(Marks)、书签与定位
11.1 设置/跳转标记
ma:在当前位置设置标记a`a:跳到标记a(精确到列)'a:跳到标记a(到行首非空白处)
11.2 常用内置标记
`.:上一次修改的位置`^:上一次插入模式退出的位置``:上一次跳转前的位置(与Ctrl+o类似)
12. 宏(Macros)与批量重复
12.1 录制与播放
qa:开始录制宏到寄存器aq:停止录制@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
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 mint1.!

