持续更新中 · Digital Garden
2026 · 07 · 01 · 第 18
前端 · 后端 · AI · 工程  —  著述与维护 Wyman · Est. MMXXIV · 北京
首页/档案/Vim 命令速查--
14·Vim / VIM

Vim 命令速查--

按模式、移动、编辑、复制粘贴、查找替换、窗口、标签页、宏和寄存器分类整理 Vim 常用命令,并附一份常用 vimrc 配置。

占位符说明

占位符含义
<file>文件路径
<pattern>搜索内容
<text>替换文本
<register>寄存器名
<mark>标记名
<command>Vim 命令
<number>数字

模式切换

命令说明
Esc返回普通模式
i在光标前进入插入模式
I在行首进入插入模式
a在光标后进入插入模式
A在行尾进入插入模式
o在下一行插入
O在上一行插入
v进入字符可视模式
V进入行可视模式
Ctrl-v进入块可视模式
R进入替换模式
:进入命令行模式

文件命令

命令说明
vim <file>打开文件
:e <file>编辑文件
:w保存文件
:w <file>另存为文件
:q退出
:q!强制退出
:wq保存并退出
:x保存并退出
ZZ保存并退出
ZQ不保存退出
:saveas <file>另存为文件
:r <file>读入文件内容
:r !<command>读入命令输出

光标移动

命令说明
h左移
j下移
k上移
l右移
w移到下一个单词开头
W移到下一个大单词开头
e移到单词结尾
E移到大单词结尾
b移到上一个单词开头
B移到上一个大单词开头
0移到行首
^移到行首非空字符
$移到行尾
g_移到行尾非空字符
gg移到文件开头
G移到文件结尾
<number>G跳到指定行
:<number>跳到指定行
%跳到匹配括号
H移到屏幕顶部
M移到屏幕中间
L移到屏幕底部
Ctrl-u向上翻半页
Ctrl-d向下翻半页
Ctrl-b向上翻一页
Ctrl-f向下翻一页
zz当前行居中
zt当前行置顶
zb当前行置底

编辑命令

命令说明
x删除当前字符
X删除前一个字符
r<char>替换当前字符
s删除当前字符并插入
S删除当前行并插入
cw修改到单词结尾
ciw修改当前单词
caw修改当前单词含空格
cc修改整行
C修改到行尾
dd删除当前行
D删除到行尾
dw删除到下个单词
diw删除当前单词
daw删除当前单词含空格
d$删除到行尾
d0删除到行首
J合并下一行
u撤销
Ctrl-r重做
.重复上次修改
~切换字符大小写
gUiw当前单词转大写
guiw当前单词转小写

复制粘贴

命令说明
yy复制当前行
Y复制当前行
yw复制单词
yiw复制当前单词
y$复制到行尾
p粘贴到光标后
P粘贴到光标前
dd剪切当前行
dw剪切单词
"+y复制到系统剪贴板
"+p从系统剪贴板粘贴
"*y复制到选择剪贴板
"*p从选择剪贴板粘贴
:put粘贴默认寄存器
:put +粘贴系统剪贴板

可视模式

命令说明
v字符选择
V行选择
Ctrl-v块选择
y复制选择内容
d删除选择内容
c修改选择内容
>向右缩进
<向左缩进
=自动缩进
o切换选择区起点
gv重新选择上次区域
I块模式前插入
A块模式后追加

查找和替换

命令说明
/<pattern>向下搜索
?<pattern>向上搜索
n下一个匹配
N上一个匹配
*向下搜索当前单词
#向上搜索当前单词
:noh取消搜索高亮
:%s/old/new/g全文替换
:%s/old/new/gc全文确认替换
:s/old/new/g当前行替换
:10,20s/old/new/g指定行范围替换
:'<,'>s/old/new/g可视区域替换
:%s/\s\+$//e删除行尾空格

行号和跳转

命令说明
:set number显示绝对行号
:set relativenumber显示相对行号
:set nonumber隐藏绝对行号
:set norelativenumber隐藏相对行号
Ctrl-o跳回上一个位置
Ctrl-i跳到下一个位置
gd跳到局部定义
gD跳到全局定义
gf打开光标下文件
gi回到上次插入位置
'.跳到上次修改行
`.跳到上次修改位置

标记命令

命令说明
m<mark>设置标记
'<mark>跳到标记行
`<mark>跳到标记位置
:marks查看标记
:delmarks <mark>删除标记
:delmarks!删除所有小写标记
ma设置标记 a
'a跳到标记 a 所在行
`a跳到标记 a 的精确位置

窗口命令

命令说明
:split水平分屏
:sp <file>水平分屏打开文件
:vsplit垂直分屏
:vsp <file>垂直分屏打开文件
Ctrl-w h切到左侧窗口
Ctrl-w j切到下方窗口
Ctrl-w k切到上方窗口
Ctrl-w l切到右侧窗口
Ctrl-w w切换窗口
Ctrl-w c关闭当前窗口
Ctrl-w o只保留当前窗口
Ctrl-w =平均窗口大小
Ctrl-w +增加窗口高度
Ctrl-w -减少窗口高度
Ctrl-w >增加窗口宽度
Ctrl-w <减少窗口宽度

标签页命令

命令说明
:tabnew新建标签页
:tabnew <file>新标签页打开文件
:tabedit <file>新标签页编辑文件
gt下一个标签页
gT上一个标签页
<number>gt跳到指定标签页
:tabs查看标签页列表
:tabclose关闭当前标签页
:tabonly只保留当前标签页

缓冲区命令

命令说明
:ls查看缓冲区
:buffers查看缓冲区
:bnext下一个缓冲区
:bn下一个缓冲区
:bprevious上一个缓冲区
:bp上一个缓冲区
:buffer <number>切换到指定缓冲区
:bdelete删除当前缓冲区
:bd删除当前缓冲区
:e #切换到上一个文件
Ctrl-^切换到上一个文件

寄存器

命令说明
:registers查看寄存器
"<register>y复制到指定寄存器
"<register>p粘贴指定寄存器
"ayy复制当前行到寄存器 a
"ap粘贴寄存器 a
"_d删除但不写入寄存器
"+y复制到系统剪贴板
"+p粘贴系统剪贴板
"%p粘贴当前文件名
":p粘贴上次命令

宏命令

命令说明
q<register>开始录制宏
q停止录制宏
@<register>执行宏
@@重复上次宏
<number>@<register>执行宏多次
qa录制宏到寄存器 a
@a执行寄存器 a 的宏
10@a执行宏 a 十次

折叠命令

命令说明
za切换折叠
zo打开折叠
zc关闭折叠
zR打开所有折叠
zM关闭所有折叠
zf创建折叠
zd删除折叠
:set foldmethod=indent按缩进折叠
:set foldmethod=syntax按语法折叠
:set foldlevel=99默认展开多层折叠

缩进和格式化

命令说明
>>当前行右缩进
<<当前行左缩进
==自动缩进当前行
gg=G自动缩进全文
=%自动缩进括号块
:set tabstop=4设置 Tab 宽度
:set shiftwidth=4设置缩进宽度
:set expandtab使用空格代替 Tab
:retab按配置转换 Tab
gqap格式化当前段落

常用组合

命令说明
:%s/\r//g删除 Windows 回车符
:%s/\t/ /gTab 替换为空格
:%s/ *$//g删除行尾空格
ggVG选择全文
gg=G格式化全文缩进
:%!sort全文排序
:g/^$/d删除空行
:g/<pattern>/d删除匹配行
:v/<pattern>/d删除不匹配行
:%y+全文复制到系统剪贴板
:set paste开启粘贴模式
:set nopaste关闭粘贴模式

常用 vimrc 配置

把下面内容保存到 ~/.vimrc

" 基础显示
set number
set relativenumber
set ruler
set showcmd
set showmode
set cursorline
set laststatus=2

" 编码
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,gbk,gb18030,big5,latin1

" 搜索
set hlsearch
set incsearch
set ignorecase
set smartcase

" 缩进
set autoindent
set smartindent
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4

" 编辑体验
set backspace=indent,eol,start
set hidden
set wildmenu
set wildmode=list:longest,full
set scrolloff=5
set sidescrolloff=5
set mouse=a
set clipboard=unnamedplus
set updatetime=300
set timeoutlen=500

" 文件处理
set nobackup
set nowritebackup
set noswapfile
set autoread
set confirm

" 语法和文件类型
syntax on
filetype plugin indent on

" 显示不可见字符
set list
set listchars=tab:>-,trail:·,extends:>,precedes:<

" 状态栏
set statusline=%f
set statusline+=%m
set statusline+=%r
set statusline+=%=
set statusline+=%y
set statusline+=\ %{&fileencoding}
set statusline+=\ [%l,%c]
set statusline+=\ %p%%

" 常用快捷键
let mapleader=" "
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <leader>h :nohlsearch<CR>
nnoremap <leader>n :set number!<CR>
nnoremap <leader>r :set relativenumber!<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

" 缓冲区切换
nnoremap <leader>bn :bnext<CR>
nnoremap <leader>bp :bprevious<CR>
nnoremap <leader>bd :bdelete<CR>

" 快速编辑 vimrc
nnoremap <leader>ev :edit ~/.vimrc<CR>
nnoremap <leader>sv :source ~/.vimrc<CR>

" 粘贴模式切换
set pastetoggle=<F2>

" 保存时删除行尾空格
autocmd BufWritePre * %s/\s\+$//e

vimrc 快捷键说明

快捷键说明
Space w保存文件
Space q退出文件
Space h清除搜索高亮
Space n切换绝对行号
Space r切换相对行号
Ctrl-h切到左侧窗口
Ctrl-j切到下方窗口
Ctrl-k切到上方窗口
Ctrl-l切到右侧窗口
Space bn下一个缓冲区
Space bp上一个缓冲区
Space bd删除当前缓冲区
Space ev编辑 ~/.vimrc
Space sv重新加载 ~/.vimrc
F2切换粘贴模式
Wyman · 长空

前端与全栈工程师,写关于系统、边界与 AI 工程的手记。相信把复杂的事讲清楚,本身就是一种工程能力。