Vim备忘单
Vim文本编辑器命令
##############################################################################
# VIM 速查表
# 官网: http://www.vim.org/
# 文档: https://vim.sourceforge.io/docs.php
##############################################################################
##############################################################################
# 光标移动
##############################################################################
h 向左移动
j 向下移动
k 向上移动
l 向右移动
w 按单词开头跳跃(标点符号视为单词)
W 按单词跳跃(空格分隔单词)
e 跳转到单词末尾(标点符号视为单词)
E 跳转到单词末尾(不含标点符号)
b 向后跳跃单词(标点符号视为单词)
B 向后跳跃单词(不含标点符号)
ge 向后跳转到单词末尾
gE 向后跳转到单词末尾(单词可包含标点符号)
0 (零)行首
^ 行内第一个非空字符
$ 跳转到行尾
g_ 跳转到行内最后一个非空字符
- 向上移动一行,定位到第一个非空字符
+ 向下移动一行,定位到第一个非空字符
<enter> 向下移动一行,定位到第一个非空字符
gg 跳转到第一行
G 跳转到最后一行
ngg 跳转到第 n 行
nG 跳转到第 n 行
:n 跳转到第 n 行
) 光标向前移动到下一个句子。
( 光标向后移动一个句子。
{ 光标向后移动一个段落
} 光标向前移动一个段落
]] 光标向前移动一个区块或到下一个 {
[[ 光标向后移动一个区块或到上一个 {
H 将光标移动到屏幕顶部。
M 将光标移动到屏幕中间。
L 将光标移动到屏幕底部。
fx 在当前行向前搜索 'x'
Fx 在当前行向后搜索 'x'
tx 在当前行向前搜索到 'x' 之前
Tx 在当前行向后搜索到 'x' 之前
CTRL-y 屏幕向上滚动一行
CTRL-e 屏幕向下滚动一行
CTRL-u 光标和屏幕向上移动半页
CTRL-d 光标和屏幕向下移动半页
CTRL-b 屏幕向上移动一页,光标移到最后一行
CTRL-f 屏幕向下移动一页,光标移到第一行
zz 将当前行移动到屏幕中间
z. 同 zz,但还会跳转到第一个非空字符
zt 将当前行移动到屏幕顶部
zb 将当前行移动到屏幕底部
##############################################################################
# 书签
##############################################################################
:marks 列出所有当前书签
ma 在光标当前位置创建名为 a 的书签
`a 跳转到书签 a 的位置
'a 跳转到书签 a 所在的行
`0 跳转到上次退出 Vim 时的位置
`" 跳转到上次编辑此文件时的位置
`. 跳转到上次编辑的行
`` 跳转到上次跳转之前的位置
g, 跳转到变更列表中较新的位置
g; 跳转到变更列表中较旧的位置
# 提示:跳转到书签可以使用反引号 (`) 或单引号 (')。
# 使用单引号跳转到书签所在行的开头(第一个非空字符)。
##############################################################################
# 插入模式
##############################################################################
i 在光标处进入插入模式
I 在行首插入
gi 返回到上次插入文本的位置进入插入模式
gI 类似 "I",但始终从第 1 列开始
a 在光标后追加
A 在行尾追加
o 在当前行下方打开(追加)空行
O 在当前行上方打开空行
CTRL-o 临时进入普通模式执行一条普通模式命令(在插入模式中)
Esc 退出插入模式
##############################################################################
# 编辑
##############################################################################
r 替换单个字符(不进入插入模式)
R 进入插入模式,替换字符而非插入
J 将下一行连接到当前行,中间加一个空格
gJ 将下一行连接到当前行,中间不加空格
cc 更改(替换)整行
cw 更改(替换)到单词末尾(同 ce)
2cw 更改(替换),重复 cw 两次
ciw 更改(替换)光标下的单词
caw 更改(替换)光标下的单词及其前后空格
ci" 更改(替换)"" 内的单词
cit 更改(替换)HTML 标签内容
cat 更改(替换)HTML 标签
cis 更改(替换)光标下的句子
cas 更改(替换)光标下的句子及其前后空格
cib 更改(替换)() 块内部
cab 更改(替换)包含 () 的整个块
ciB 更改(替换){} 块内部
caB 更改(替换)包含 {} 的整个块
C 更改(替换)到行尾(同 c$)
cG 更改(替换)到文件末尾
cgg 更改(替换)从第一行到当前行
ct' 更改(替换)直到 ' 字符(可将 ' 替换为任意字符)
s 删除光标处的字符并替换文本
S 删除光标所在行并替换文本(同 cc)
xp 交换两个字符(技术上是删除并粘贴)
u 撤销
CTRL-r 重做
. 重复上一个命令
~ 切换大小写
g~iw 切换当前单词的大小写
gUiw 将当前单词转为大写
guiw 将当前单词转为小写
gU$ 将直到行尾的字符转为大写
gu$ 将直到行尾的字符转为小写
>> 将当前行向右缩进一列
>i{ 缩进 {} 内的所有内容
<< 将当前行向左缩进一列
== 自动缩进当前行
ddp 将当前行与下一行交换
ddkP 将当前行与上一行交换
:%retab 修复整个文件中的空格/制表符问题
:r [name] 将文件 [name] 插入到光标下方。
:r !{cmd} 执行 {cmd} 并将其标准输出插入到光标下方。
# 提示:可以用 ( 或 { 分别替代 b 或 B。
##############################################################################
# 删除文本
##############################################################################
x 删除当前字符
X 删除前一个字符
dw 删除(剪切)到单词末尾(同 de)
diw 删除(剪切)光标下的单词
daw 删除(剪切)光标下的单词及其前后空格
dap 删除(剪切)一个段落
dd 删除(剪切)一行
dt' 删除(剪切)直到行内下一个 ' 字符(将 ' 替换为任意字符)
dG 删除(剪切)到文件末尾
dgg 删除(剪切)从第一行到当前行
D 删除(剪切)从光标到行尾(同 d$)
:[range]d 删除 [range] 范围内的行
##############################################################################
# 复制和移动文本
##############################################################################
yw 复制单词
yy 复制一行
2yy 复制 2 行
y$ 复制到行尾
p 在光标/当前行之后粘贴
P 在光标/当前行之前粘贴
gp 在光标之后粘贴,并将光标留在新文本之后
gP 在光标之前粘贴,并将光标留在新文本之后
"+y 复制到系统剪贴板寄存器
"+p 从系统剪贴板寄存器粘贴
:set paste 粘贴时避免意外效果
:registers 显示所有寄存器的内容
"xyw 将单词复制到寄存器 x
"xyy 将行复制到寄存器 x
:[range]y x 将 [range] 范围内的行复制到寄存器 x
"xp 将寄存器 x 中的文本粘贴到光标之后
"xP 将寄存器 x 中的文本粘贴到光标之前
"xgp 类似 "p",但将光标留在新文本之后
"xgP 类似 "P",但将光标留在新文本之后
:[line]put x 将寄存器 x 中的文本粘贴到 [line] 行之后
# 提示:如果你在 VS Code 上使用 vim 扩展,可以在 settings.json 中启用
"vim.useSystemClipboard": true
# 这将允许使用系统剪贴板作为无名寄存器。
##############################################################################
# 宏
##############################################################################
qa 开始录制宏 'a'
q 结束录制宏
@a 回放宏 'a'
@: 回放上一个命令
@@ 重复宏
##############################################################################
# 可视模式
##############################################################################
v 进入可视模式,标记行,然后执行命令(如 y 复制)
V 进入行可视模式
o 移动到标记区域的另一端
U 将标记区域转为大写
CTRL-v 进入可视块模式
O 移动到块的另一角
aw 标记一个单词
ab 一个 () 块(含括号)
aB 一个 {} 块(含花括号)
at 一个带 <> 标签的块
ib 内部 () 块
iB 内部 {} 块
it 内部 <> 块
Esc 退出可视模式
可视模式命令
--------------------
> 向右移动
< 向左移动
c 更改(替换)标记的文本
y 复制标记的文本
d 删除标记的文本
~ 切换大小写
可视模式快捷键
---------------------
v% 选中匹配的括号
vi{ 选中匹配的花括号
vi" 选中双引号内的文本
vi' 选中单引号内的文本
gv 重新选中上次选中的区域
##############################################################################
# 拼写检查
##############################################################################
]s 下一个拼写错误的单词
[s 上一个拼写错误的单词
zg 将单词添加到词典
zug 撤销上次添加的单词
z= 建议单词
##############################################################################
# 退出
##############################################################################
:q 退出 Vim。有未保存更改时会失败。
:q! 不保存退出。
:cq 始终退出,不保存。
:w 保存但不退出。
:wq 保存当前文件并退出。
:wq! 始终保存当前文件并退出。
:wq {file} 写入 {file}。如果不在编辑最后一个文件则退出
:wq! {file} 始终写入 {file} 并退出。
:[range]wq[!] 同上,但只写入 [range] 范围内的行。
ZZ 保存当前文件(如有修改)并退出。
ZQ 退出当前文件并退出(同 ":q!")。
##############################################################################
# 搜索/替换
##############################################################################
/pattern 搜索 pattern
?pattern 向后搜索 pattern
n 按相同方向重复搜索
N 按相反方向重复搜索
* 向前搜索光标下的单词
# 向后搜索光标下的单词
set ic 忽略大小写:开启
set noic 忽略大小写:关闭
:%s/old/new/g 将文件中所有 old 替换为 new
:%s/old/new/gc 将文件中所有 old 替换为 new,需确认
:argdo %s/old/new/gc | wq 打开多个文件并运行此命令,在每个文件中
替换 old 为 new,需确认,保存并退出
##############################################################################
# 多文件
##############################################################################
:e filename 在新缓冲区中编辑文件
:tabe filename 在新标签页中编辑文件(Vim7, gVim)
:ls 列出所有缓冲区
:bn 转到下一个缓冲区
:bp 转到上一个缓冲区
:bd 删除缓冲区(关闭文件)
:b1 显示缓冲区 1
:b vimrc 显示文件名以 "vimrc" 开头的缓冲区
:bufdo <command> 在所有缓冲区中运行命令
:[range]bufdo <command> 对 [range] 范围内的缓冲区运行命令
##############################################################################
# 窗口
##############################################################################
:sp f 水平分割打开文件 f
:vsp f 垂直分割打开文件 f
CTRL-w s 水平分割窗口
CTRL-w w 切换窗口
CTRL-w q 关闭窗口
CTRL-w v 垂直分割窗口
CTRL-w x 交换窗口
CTRL-w h 左边窗口
CTRL-w j 下面窗口
CTRL-w k 上面窗口
CTRL-w l 右边窗口
CTRL-w + 增加窗口高度
CTRL-w - 减小窗口高度
CTRL-w < 增加窗口宽度
CTRL-w > 减小窗口宽度
CTRL-w = 均等窗口大小
CTRL-w o 关闭其他窗口
##############################################################################
# 快速修复窗口
##############################################################################
copen 打开快速修复窗口
cclose 关闭快速修复窗口
cc [nr] 显示错误 [nr]
cfirst 显示第一个错误
clast 显示最后一个错误
[count]cn 显示第 [count] 个下一个错误
[count]cp 显示第 [count] 个上一个错误
##############################################################################
# 编程
##############################################################################
% 显示匹配的括号、花括号或圆括号
gf 编辑光标下文件名对应的文件
gF 编辑光标下文件名对应的文件并跳转到指定行号
gd 当光标在局部变量或函数上时,跳转到其声明处
'' 返回到最近一次跳转前光标所在的行
CTRL-o 移动到上一个位置
CTRL-i 移动到较新的位置
:set nu 显示行号(:set number 的简写)
:set nonu 隐藏行号(:set nonumber 的简写)
##############################################################################
# 插件 > ACK
##############################################################################
:Ack 在目录中递归搜索
o 打开(同回车键)
go 预览文件(打开但焦点保持在 ack.vim 结果上)
t 在新标签页中打开
T 在新标签页中静默打开
q 关闭快速修复窗口
##############################################################################
# 插件 > CHEAT
##############################################################################
:Cheat 打开速查表(带自动补全)
<leader>ch 打开光标下单词的速查表
##############################################################################
# 插件 > GIST
##############################################################################
:Gist 将全部文本发布到 gist
:Gist XXXXX 获取 gist XXXXX
:Gist -l 列出我的 gists
##############################################################################
# 插件 > GUNDO
##############################################################################
:GundoToggle 显示撤销树
##############################################################################
# 插件 > LUSTYJUGGLER
##############################################################################
<Leader>lj 显示打开的缓冲区
##############################################################################
# 插件 > NERDCOMMENTER
##############################################################################
<leader>cc 注释行
<leader>c<space> 切换选中行的注释状态
##############################################################################
# 插件 > NERDTREE
##############################################################################
:NERDTreeToggle 显示/隐藏文件浏览器
:NERDTreeFind 在文件浏览器中显示当前文件
:Bookmark name 将当前节点书签为 "name"
文件
----
o 在上一个窗口中打开
go 预览
t 在新标签页中打开
T 在新标签页中静默打开
i 水平分割打开
gi 水平分割预览
s 垂直分割打开
gs 垂直分割预览
目录
---------
o 打开和关闭节点
O 递归打开节点
x 关闭节点的父节点
X 递归关闭当前节点的所有子节点
e 浏览选中的目录
书签
--------
o 打开书签
t 在新标签页中打开
T 在新标签页中静默打开
D 删除书签
树导航
---------------
P 转到根节点
p 转到父节点
K 转到第一个子节点
J 转到最后一个子节点
CTRL-j 转到下一个兄弟节点
CTRL-k 转到上一个兄弟节点
文件系统
----------
C 将树根目录更改为选中的目录
u 将树根目录向上移动一级
U 将树根目录向上移动一级但保持旧根目录打开
r 刷新光标所在目录
R 刷新当前根目录
m 显示菜单
cd 将当前工作目录更改为选中的目录
树过滤
--------------
I 隐藏文件
f 文件过滤器
F 文件
B 书签
其他
-----
q 关闭 NERDTree 窗口
A 缩放(最大化-最小化)NERDTree 窗口
? 切换帮助
##############################################################################
# 插件 > PDV
##############################################################################
CTRL-P 生成 PHP DOC
##############################################################################
# 插件 > PICKACOLOR
##############################################################################
:PickHEX 在系统颜色选择器中选择颜色
##############################################################################
# 插件 > SNIPMATE
##############################################################################
<tab> 展开代码片段
##############################################################################
# 插件 > SPARKUP
##############################################################################
CTRL-e 执行 sparkup(zen coding 展开)
CTRL-n 跳转到下一个空标签/属性
##############################################################################
# 插件 > SURROUND
##############################################################################
cs'" 将环绕的单引号改为双引号
cs(} 将环绕的圆括号改为花括号
cs({ 将环绕的圆括号改为带空格的花括号
ds' 删除环绕的单引号
dst 删除环绕的标签
ysiw[ 用方括号环绕内部单词
vees' 用单引号环绕两个单词 (ee)
##############################################################################
# 插件 > TABULAR
##############################################################################
:Tabularize /, 将选中的行按逗号对齐
##############################################################################
# 插件 > TAGLIST
##############################################################################
:TlistToggle 打开/关闭标签列表窗口
<enter> 跳转到标签或文件
<space> 显示标签原型
##############################################################################
# 插件 > UNIMPAIRED
##############################################################################
[space 在上方新建一行
]space 在下方新建一行
[e 与上一行交换
]e 与下一行交换
[x XML 编码
]x XML 解码(使用 htmlentities)
[q 跳转到上一个快速修复项
]q 跳转到下一个快速修复项
[Q 跳转到第一个快速修复项
]Q 跳转到最后一个快速修复项
##############################################################################
# 插件 > VIM-FUGITIVE
##############################################################################
:Git 运行 git 命令
:Gstatus git status:- 暂存/取消暂存,p 补丁,C 提交
:Gcommit git commit
:Gread 清空缓冲区并还原到上一次提交
:Gwrite 保存当前文件并暂存结果
:Gmove git mv
:Gremove git rm
:Glog git log
:Gdiff 对当前文件的某个版本执行 vimdiff
:Gblame 在可滚动的垂直分割窗口中打开 blame 信息
:Gbrowse 打开 GitHub
##############################################################################
# 插件 > VIM-MARKDOWN-PREVIEW
##############################################################################
:Mm 在浏览器中预览 Markdown 文档
##############################################################################
# 插件 > VIM-PEEPOPEN
##############################################################################
<Leader>p 使用 peepopen 应用(模糊搜索)打开当前目录
##############################################################################
# 插件 > VIM-SYMFONY
##############################################################################
:Sview 打开模板文件
:Saction 打开动作文件
:Smodel 打开模型文件
:Sfilter 打开过滤器文件
:Sform 打开表单文件
:Spartial 打开局部文件/将选中内容写入局部文件并 include
:Scomponent 打开组件文件/将选中内容写入组件文件并 include
:Salternate 打开备用模型文件(类 - 表类)
:Symfony 执行任务
##############################################################################
# 个人 .VIMRC 配置
##############################################################################
<leader>ev 编辑 vimrc 文件
<leader>sv 重新加载 vimrc 文件
<leader>sh 显示光标下单词的语法高亮分组
<space> 向下翻页
jj 退出插入模式
<leader>q 关闭当前窗口
<leader>/ 清除搜索寄存器
<leader>h 切换隐藏字符显示
<leader>W 去除所有行尾空白
CTRL-h 转到左边窗口
CTRL-j 转到下面窗口
CTRL-k 转到上面窗口
CTRL-l 转到右边窗口
<leader>w 打开垂直分割窗口并激活
%% 展开为当前目录
<leader>ew 从当前目录打开文件
<leader>es 在分割窗口中从当前目录打开文件
<leader>cd 将目录切换到当前文件的父目录
## 展开为 webroot
:Wrap 自动换行文本
<F2> 切换文本自动换行
<F3> 切换拼写检查
<F4> 切换浅色/深色背景
<F5> 用短划线添加下划线
<F6> 用双线添加下划线
<leader><up> 向上移动行
<leader><down> 向下移动行
:Ltag 加载标签文件
:Project 切换到项目目录并加载标签文件
<leader>t 显示光标下单词的当前标签
<leader>st 在分割窗口中显示光标下单词的当前标签
<leader>tj 显示光标下单词的当前标签列表
<leader>stj 在分割窗口中显示光标下单词的当前标签列表
CTRL-<space> 显示 omnicomplete 菜单
<leader>b 用 strong 标签环绕
<leader>i 用 em 标签环绕
CTRL-p 生成 PHP DOC
<leader>a 运行 Ack
<leader>md 预览 Markdown
<leader>s 在 Safari 中预览
<leader>x 颜色选择器
<leader>n 切换 Nerdtree
<leader>N 关闭 Nerdtree
<leader>f 在 Nerdtree 中查找当前文件
<leader>l 切换 Taglist
<leader>L 关闭 Taglist
<leader>ph 将文件类型设置为 php.html
<leader>r 重新加载所有 snipmate 代码片段
CTRL-<tab> 在缓冲区之间切换
CTRL-y 在 sparkup 插件中跳转到下一个标签属性
<leader>g 切换 Gundo 窗口
IMG<CR> 显示图片浏览器以插入带 src、width 和 height 的图片标签
b 从 NERDTree 插入带尺寸的图片标签
(http://stackoverflow.com/questions/5707925/vim-image-placement)