№ 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/ /g | Tab 替换为空格 |
:%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 | 切换粘贴模式 |