本手册适用于该项目的配置,
手册中还介绍了vim自带的按键,一些按键功能未具体指出,读者可以打开vim试试便知其意
进入插入模式:gi
i
a
I
A
o
O
按键 |
作用 |
<c-a>,<c-e> |
行首,行尾 |
<c-left>,<c-right> |
左移一个单词,右移一个单词 |
<m-s> |
跳转结对符的另一边(即普通模式的% ) |
<m-n> |
跳转下对结对符 |
按键 |
作用 |
<m-e> |
将光标后的字符向后移 |
<m-{char}> |
将光标后的字符向后移动到第一个{char}后面,{char}是结对符之一 |
<s-left>,<s-right> |
向前缩进与向后缩进 |
<c-s-down>,<c-s-up> |
将本行下移,将本行上移 |
<c-o> |
下行插入 |
<c-w> |
删除光标前单词 |
<c-u> |
删除光标前文本,删除光标后文本 |
<c-l> |
删除光标后一个字符 |
<c-k> |
删除光标后单词 |
<c-v>{char} |
插入{char}(控制)字符 |
<c-v>x{hh} |
插入编码为0xhh的ascii字符 |
<c-v>u{hhhh} |
插入码点为hhhh的unicode字符 |
复合操作符可以:
结合光标移动,对初始位置与移动后位置之间的文本进行操作,如df1删除直到第一个1
- 复合操作符:
d
c
y
gu
gU
g~
v
- 光标移动:
0
^
$
w
W
b
B
e
E
ge
gE
f
F
%
(
)
{
}
gg
G
H
L
M
{num}|
gm
- 文本对象:需要带前缀
i
或a
w
s
p
(
{
[
<
"
'
`
e
l
i
f
,
- 替换:
- 替换:
R
r
按键 |
作用 |
<c-a>,<c-e> |
行首,行尾 |
f{char}与F{char} |
连续按f 与F 可以重复移动 |
;{char}{char} |
跳转至指定字符处 |
<space>jw |
跳转至某单词 |
<space>jl |
跳转至某行 |
<space>ju |
跳转至某URL |
[c与]c |
diff中跳转至上/下个diff点 |
g,与g; |
跳转新/旧更改表 |
K |
快速查找doc |
gf |
快速跳转光标下的URL与文件 |
gF |
使用GUI工具打开目标文件 |
按键 |
作用 |
x,s |
删除相当于dl与cl |
D,C |
删除相当于d$与c$ |
dd,cc |
删除当前行 |
d<space> |
删除当前行的行尾空白 |
da<space> |
删除所有行的行尾空白 |
<c-s-down>,<c-s-up> |
将本行下/上移 |
[<space>,]<space> |
上/下一行添加空行 |
~ |
转换大小写 |
J |
将下行文本连接到此行 |
S |
将光标处断行 |
u,<c-r> |
撤销树回溯与前进 |
g+与g- |
新/旧撤销树(按时间) |
. |
重复上次操作 |
进入可视模式:v
<c-v>
V
gv
按键 |
作用 |
<c-a>,<c-e> |
行首,行尾 |
o |
块选取时对角线跳转 |
O |
块选取时邻角跳转 |
v |
扩大可视范围 |
V |
缩小可视范围 |
常用命令::ene,:e,:bd,:qa,:wa,:wq,:wqa,:saveas
参数列表::args,:arga,:argd,:argdo
参数列表::args,:arga,:argd,:argdo
buf详情::h ls
按键 |
作用 |
<leader>n,<leader>b |
下/上一个缓冲区 |
<leader>{numr} |
第{numr}个buffer |
<c-s> |
保存buffer至硬盘 |
<c-w>x |
安全删除该buffer |
<c-w>X |
安全删除所有未激活buffer |
<c-w>W |
用sudo写入文件 |
按键 |
作用 |
<c-w>= |
所有窗口等高等宽 |
<c-w>-与<c-w>+ |
减少与增加窗口高度 |
<c-w><与<c-w>> |
减少与增加窗口宽度 |
{num}<c-w>_与{num}<c-w>| |
设置窗口高度与宽度为num |
<c-w>c |
关闭窗口 |
Q |
关闭窗口 |
{num}Q |
关闭num号窗口 |
<c-w>o |
关闭其它所有窗口 |
<c-w>s |
水平分割窗口 |
<c-w>v |
垂直分割窗口 |
<space>{numr} |
切换至第{numr}号窗口 |
<tab> |
切换至下个窗口 |
<s-tab> |
切换至上个窗口 |
<c-w>{H/J/K/L} |
将当前窗口移动到最左/下/上/右边 |
按键(插入模式) |
作用 |
<c-r>{reg} |
粘贴reg 寄存器 |
<c-y> |
粘贴" 寄存器 |
按键(普通模式) |
作用 |
, |
复制相当于yl |
Y |
复制相当于y$ |
<leader>y |
复制到系统剪切板"+y |
<leader>, |
复制到系统剪切板"+yl |
<leader>Y |
复制到系统剪切板"+y$ |
<space>by |
复制整个buffer至系统剪切板 |
<leader>p与<leader>P |
粘贴系统剪切板到光标后/前 |
<leader>o与<leader>O |
粘贴系统剪切板到光标下/上行 |
<space>bp |
粘贴系统至整个buffer(覆盖原来的内容) |
=p与=P |
粘贴0 寄存器到光标前/后 |
=O与=o |
粘贴0 寄存器到光标上/下 |
按键(可视模式) |
作用 |
<leader>Y |
复制到http://pastebin.com 并将URL赋值到系统剪切板 |
<leader>y |
复制到系统剪切板"+y |
<leader>p |
粘贴系统剪切板 |
=p |
粘贴0 寄存器 |
按键(可视模式) |
作用 |
<c-d>与<c-b> |
下半屏,上半屏 |
<c-down>与<c-up> |
光标行下/上滚半屏 |
z<down>与z<up> |
光标行下/上滚三行 |
z<cr>与zz与zb |
光标行滚动到屏幕顶/中/底 |
z<left>与z<right> |
光标列左/右滚动半屏 |
zs |
光标列移至屏幕左边 |
按键 |
作用 |
*与# |
搜索当前单词,向下/上 |
g*与g# |
搜索当前字符串(不加单词边界),向下/上 |
/与? |
正向和反向正则匹配 |
z/ |
模糊搜索 |
按键 |
作用 |
<space>tF |
切换折叠模式(手动/自动) |
zF |
手动折叠N行 |
za与zA |
切换(所有)折叠 |
zc与zC |
关闭该处(所有)折叠 |
zo与zO |
打开该处(所有)折叠 |
zr与zR |
打开(所有)折叠 |
zm与zM |
关闭(所有)折叠 |
zj与zJ |
下一个折叠 |
zk与zK |
上一个折叠 |
按键 |
作用 |
<m-t> |
切换制表模式 |
<leader>tr |
手动对齐 |
<leader>ts |
以该列为基准进行行排序 |
<leader>tdd |
删除改行 |
<leader>tdc |
删除改列 |
<leader>tic |
在右边添加一列 |
<leader>tiC |
在左边添加一列 |
<leader>t? |
查询当前cell编号 |
<leader>tfa |
添加公式 |
<leader>tfe |
计算公式 |
<space>xj{c/l/r} |
居中/左/右对齐该段落 |
<space>xa{char} |
根据{char}对齐 |
<space>xao |
根据运算符对齐 |
制表公式:
$n
表示n列
$n,m
表示n行m列
r1:r2
表示范围从光标当前列的行r1-r2
r1,c1:r2,c2
表示范围从r1,c1到r2,c2的矩阵
- 列运算的结果也为列
- 可使用vim内建函数,以及Sum()与Average()
按键 |
作用 |
<space>cl |
切换该行注释状态 |
<space>cL |
注释该行 |
<space>cp |
切换该段落注释状态 |
<space>cP |
注释该段落 |
插入(模式按键) |
作用 |
<Tab>与<S-Tab> |
在补全列表中上下选择 |
<CR> |
选中补全选项并关闭补全列表 |
<C-Z> |
手动触发补全列表 |
<M-/> |
触发代码片段补全,或跳向下一个片段锚点 |
<M-?> |
跳向上一个片段锚点 |
<c-x><c-f> |
补全路径 |
举例:
cs{[
将{content}
替换成[ content ]
,
cs{]
则是将{content}
替换成[content]
(内部无空格),
其它同理。
替换的字符(第二个{char})若是<
,则还可以继续输入直到>
来添加html标签
替换的字符(第二个{char})若是<
,则还可以继续输入直到>
来添加html标签
详见surround
按键 |
作用 |
cs{char}{char} |
替换包围符 |
ds{char}{char} |
删除包围符 |
ys{text-obj}{char} |
添加包围符 |
yss{char} |
为改行添加包围符 |
按键 |
作用 |
<m-e> |
选取光标处单词(普通模式) |
<m-e> |
选取选中单词(可视模式) |
<m-a> |
将光标位置添加一个光标 |
<m-down> |
向下添加光标 |
<m-up> |
向上添加光标 |
规则:
VM模式按键(通用) |
作用 |
<tab> |
切换到VM normal/visual模式 |
\\<cr> |
切换到VM single/multi模式 |
↑↓←→ |
移动真实光标 |
<c-left>与<c-right> |
移动真实光标 |
<c-a>与<c-e> |
移动真实光标 |
<c-d>与<c-b> |
移动真实光标 |
<space>jw |
移动真实光标 |
<space>jj |
移动真实光标 |
<space>jJ |
移动真实光标 |
VM模式按键(visual) |
作用 |
\\A |
选取所有匹配的单词 |
n |
选取下个单词 |
N |
选取上个单词 |
[ |
移动到上个选取的单词 |
] |
移动到下个选取的单词 |
q |
跳过选取当前单词到下个匹配单词 |
Q |
取消选取单词并返回上个选取单词 |
VM模式按键(normal) |
作用 |
<s-left> |
光标向左选取并进入VM visual |
<s-right> |
光标向右选取并进入VM visual |
按键 |
作用 |
<F1> |
开关符号栏 |
<F2> |
开关文件树(<space>fo 会打开当前目录) |
<F3> |
开关tab管理器 |
<F4> |
开关撤销树 |
<space>ac |
计算器 |
<space>al |
日历 |
<space>as |
Startify启动界面 |
<space>ao |
TODO窗口 |
<space>aR |
阅读模式 |
按键 |
作用 |
<left> |
关闭目录,或进入上级目录 |
<right> |
展开目录,或打开文件 |
<CR> |
进入目录,或打开文件 |
. |
切换显示隐藏文件 |
~ |
切换到家目录 |
R |
切换到项目根目录 |
F |
搜索文件,利用Leaderf搜索光标位置的目录 |
P |
预览文件,利用tmux(或Guake)与ranger |
O |
利用其它桌面工具打开当前目录或文件 |
K |
新建目录 |
N |
新建文件 |
rn |
重命名 |
rm |
删除 |
dd |
剪切文件 |
pp |
粘贴文件 |
yy |
复制文件 |
yp |
复制文件路径 |
]a |
将文件加入git暂存区git add |
]r |
撤销该文件的git暂存区git restore |
]d |
撤销该文件的git工作区git restore --staged |
按键 |
作用 |
<space>tb |
切换背景颜色 |
<space>tc |
切换conceallevel |
<space>te |
切换expandtab |
<space>t8 |
切换长行提醒 |
<space>tf |
切换超长行提醒 |
<space>tF |
切换foldmethod |
<space>tl |
切换隐藏符号显示 |
<space>tL |
切换linebreak |
<space>tn |
切换行号显示 |
<space>tp |
切换粘贴模式 |
<space>ts |
切换语法检测 |
<space>tS |
切换拼写检测 |
<space>tv |
切换virtualedit |
<space>tw |
切换尾部空白符高亮 |
<space>tW |
切换wrap |
<space>thh |
切换高亮本行 |
<space>thc |
切换高亮本列 |
<space>thi |
切换缩进高亮 |
<space>ths |
切换语法高亮 |
<bs> |
关闭高亮搜索 |
按键 |
作用 |
gs |
智能搜索URL |
<leader>tc |
在命令行显示翻译 |
<leader>tw |
在pop-window显示翻译 |
<leader>tr |
替换翻译结果 |
<leader>tx |
翻译剪切板中的内容 |
按键 |
作用 |
<space>mm |
切换标签状态 |
<space>mi |
为标签添加注释 |
<space>mn |
跳转至下一个标签 |
<space>mb |
跳转至上一个标签 |
<space>ml |
列出所有标签 |
<space>mc |
删除当前文件的所有标签 |
<space>mC |
删除所有所有标签 |
按键 |
作用 |
<space>ss |
搜索当前缓冲区 |
<space>sb |
搜索所有缓冲区 |
<space>sd |
搜索当前目录 |
<space>sp |
搜索工程目录 |
<space>sj |
后台搜索工程目录 |
<space>sl |
打开上次后台搜索结果 |
<space>sf |
搜索指定目录 |
FlyGrep窗口局部按键 |
作用 |
<c-e> |
正则模式/字符串模式 |
<m-r> |
进入替换模式 |
<c-p> |
浮窗预览 |
<c-d> |
向下翻页 |
<c-b> |
向上翻页 |
<c-s> |
水平分屏打开文件 |
<c-v> |
竖直分屏打开文件 |
<c-c>或<esc> |
关闭flygrep |
按键 |
作用 |
<leader>sr |
搜索最近打开文件 |
<leader>sb |
搜索打开的缓冲区 |
<leader>sd |
搜索当前目录文件 |
<leader>sp |
搜索当时工程目录文件 |
<leader>sf |
搜索指定目录 |
按键 |
作用 |
<leader>ff |
搜索当前buffer函数 |
<leader>fF |
搜索所有buffer函数 |
<leader>ft |
搜索当前buffer符号 |
<leader>fT |
搜索所有buffer符号 |
<leader>fg |
搜索项目gtags符号 |
按键 |
作用 |
<leader>fr |
重置上次搜索 |
<leader>f<space> |
搜索快捷键并执行 |
<leader>fp |
搜索插件信息 |
<leader>fh |
搜索vim帮助文档 |
<leader>fq |
搜索quickfix |
<leader>fl |
搜索locationlist |
<leader>fj |
搜索跳转表并跳转 |
<leader>fm |
搜索vim的输出信息并复制 |
<leader>fu |
搜索unicode并插入 |
<leader>fy |
搜索"寄存器历史并复制 |
<leader>fe |
搜索所有寄存器并复制 |
快捷键 |
功能 |
<c-e> |
切换模糊搜索模式 |
<esc> |
进入leaderf结果窗口 |
<F1> |
进入leaderf结果窗口后打开快捷键提示 |
<c-c> |
关闭leaderf |
按键 |
作用 |
<space>gs |
git status |
<space>gd |
git diff |
<space>gv |
当前文件的git-log |
<space>gV |
当前仓库的git-log |
<space>gS |
暂存当前文件 |
<space>gg |
GitGutterToggle |
<space>ghr |
undo cursor hunk |
<space>ghv |
preview cursor hunk |
前三个是基于Leaderf gtags
,有时需要手动更新Leaderf gtags --update
,
后面四个基于YCM
语义
按键 |
作用 |
gD |
跳转gtags定义 |
gR |
跳转gtags引用 |
gS |
跳转gtags符号 |
gd |
跳转定义或声明 |
gr |
跳转引用 |
gt |
获取对象类型 |
gc |
重构对象名字 |
按键 |
作用 |
<space>en |
跳转下一个语法检测提示 |
<space>eb |
跳转上一个语法检测提示 |
<space>ed |
打开语法检测提示详情 |
<space>el |
打开语法检测提示列表 |
<space>ec |
清除语法提示 |
按键 |
作用 |
<space>lr |
快速运行程序 |
<space>lR |
快速运行程序(强制编译) |
<space>li |
快速打开输入窗口 |
<space>ld |
启动调试命令 |
<space>pl |
列出项目task |
<space>pe |
编辑项目task |
<space>pr |
运行项目task |
按键 |
作用 |
<space>lp |
开启markdown预览 |
<space>lg |
添加或删除GFM目录 |
<space>lk |
利用系统剪切板的URL插入链接元素 |
[[与]]] |
上/下个标题 |
[] |
当前标题 |
][ |
上级标题 |
<s-tab> |
插入内容  |
Ultisnips/markdown.snippets里有实用的代码片段
按键 |
作用 |
g& |
当前行重复上次:s命令 |
g<c-g> |
显示光标位置 |
<c-g> |
显示文件绝对路径和文件大小 |
g< |
上次命令输出 |
g= |
格式化排版 |
ga |
查看ascii字符编码或unicode码点 |
g8 |
查看utf-8字符编码 |
+或- |
加或减当前数字 |
<space>fC |
转换文件格式 |
<leader>m |
快速编辑宏 |
<space>fh |
添加文件头部版权声明等信息 |
(可视模式)<space>xc |
计算选中区域字符数 |
(普通模式)<space>xc |
统计代码量 |
(普通模式)<space>xC |
统计项目代码量 |
参考:
vim-galore-zh_cn
vim-galore-zh_cn
VIM中文文档
- 进入:
:
- 外部命令:!cmd
利用:r
与:w
,将外部命令I/O重定向到该缓冲区
- 外部过滤:{范围}!cmd
将外部命令的I/O同时重定向到目标指定区域
- 常用命令
:g/pat/cmd
:在匹配pat
的行执行cmd,:g!
表示不匹配的行,默认范围%
:s/pat/rel/flag
:修改匹配的pat
为rel
,默认范围.
s_flags :e不报错,g全替换,i忽略大小写
:r/w
:范围表示read到范围行后,write指定范围
:X
:设置密码,为空解除
:profile
:调试
- 先输入数字后再键入:冒号
%
:整个文件
0
:第一行行前
n
:第n行
$
:最后一行
.
:当前行
+n
:当前行后n行
-n
:当前行前n行
'm
:标签行
/pattern/+1
:模式匹配行
?pattern?+1
:前向模式匹配行
/foo//bar/
:多次模式匹配行
- 查看::reg
- 使用:" + □ + y/p
- 寄存器:
- 用户:a-z和A-Z(大写用来向寄存器添加)
- 系统:
*
(选择区) 和 +
(剪切板)
- 只读:
%
文件、.
修改、:
命令、/
搜索
- 数字:0为最近一次复制,1-9最近1-9次删除
- 录制:q+□+操作+q
- 使用:@+□,@@
- 特殊:. 执行上次的单次修改操作
- 查看::marks 与 :jumps
- 标记:m + 字母
- 跳转:' + 标记
- 标记:
意义 |
标记 |
用户 |
字母(大写全局) |
上次跳转 |
' |
上次关闭 |
" |
上次修改 |
. |
上次插入 |
^ |
上次修改或复制 |
[ ] |
返回较旧跳转 |
<c-o> (全局) |
返回较新跳转 |
<c-i> (全局) |
注:因为<c-i>
在vim中被映射为<tab>
,故将返回较新跳转映射为<c-p>
- swap文件
防止多开的vim同时打开同一个文件,并且防止非正常关机导致进度未保存
- backup文件
修改任何文件时,都会备份原文件
- undo文件
用于记录文件的更改记录,从而可进行撤销或回溯修改历史
- viminfo文件
存储vim使用信息,如打开文件记录、历史命令、寄存器值、跳转标签等
:makesession mysession.vim
:source mysession.vim
:source mysession.vim
- 查看配置加载::scriptnames
:filetype plugin indent on
- 加载
filetype.vim
与script.vim
,并加载ftdetect/*.vim
- 加载
ftplugin.vim
,并加载ftplugin/*.vim
- 加载
indent.vim
,并加载indent/*.vim
:syntax enable
与:syntax on
:set loadplugins
:set packpath=
与:set runtimepath=
/pack/foo/start/bar/类vim目录/
/pack/foo/opt/bar/类vim目录/
存放自动载入的函数,调用时使用
存放自动载入的函数,调用时使用
:call (dirname#)*filename#funcname()
/ftplugin/
<filetype>.vim
<filetype>_<name>.vim
<filetype>_<name>.vim
<filetype>/<name>.vim
- 参数:
-nargs=0/1/*/?/+
<args>
:用命令别名的参数代替该位置
<q-args>
:"str 'str' "
<f-args>
:"str","str"
- 默认范围:-range/-range=%
- 默认范围:-range/-range=%
- 形式: :autocmd [group] {events} {file_pattern} [nested] {command}
- 查询:不加{command}
- 特殊参数
<buffer>
:buf局部映射
<nowait>
:映射冲突时不等待
<silent>
:不在命令行回显操作
<expr>
:将{rhs}替换为表达式结果
<SID>
:添加独一无二编号
<c-v>
{key}
<c-v>
{字符编码}:0,x,u,U
<c-k>
{二合字符}
查看::digraphs,ga,g8
查看::digraphs,ga,g8
:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!
-
变量的声明、销毁与引用
let var = val
echo var
echo foo_{var}_bar
unlet var
unlet! var
-
变量作用域
若在函数体外则默认全局变量,若在函数体内则默认为函数局部变量
- g:var :全局变量
- a:var :函数参数
- l:var :函数局部变量
- b:var :buf局部变量
- w:var :win局部变量
- t:var :tab局部变量
- s:var :脚本内可见的局部变量
- v:var :Vim预定义的内部变量
-
表达式
$环境变量
&选项变量
@寄存器
* / % + -
? :
- 字符串比较:
use 'ignorecase' |
match case |
ignore case |
== |
==# |
==? |
!= |
!=# |
!=? |
> |
># |
>? |
>= |
>=# |
>=? |
< |
<# |
<? |
<= |
<=# |
<=? |
=~ |
=~# |
=~? |
!~ |
!~# |
!~? |
-
数据类型
:echo type(varname) 可以查看变量类型
- 空值
- 布尔值
- 整数 :32为有符型,支持8/10/16进制
let integer = -19 + 0x1f + 017 +0b1010
- 浮点数 :支持科学记数法
let float = 1.5 + 1.5e-3 * -1.5e3
- 字符串 :以NULL结尾的8位无符号字符串
" 数字开头的字符串会转换为子串对应的数值,否则为0
let string = "\t\n\r\e\b\"\\ \<esc>" . 'all is original'
- 函数引用 :首字母必须大写
let Function = function("printf")
echo Function("parameter")
- 有序列表List
let list = [1, "str1", [2, "str2"]] " 下标从0开始
echo list[0]
echo list[2][0]
- 无序字典Dictionary
let dict = {"key": "value", "foo": {"bar": 1}} "key值必须是字符串类型
echo dict.key
-
定义与删除:
function! Func(arg1, arg2, ...) " 感叹号表示强制覆盖
" `...`表示变参,使用`a:1`表示`...`中的第一个参数并依此类推,`a:0`表示`...`共有多少参数
endfunction
delfunction <function>
-
调用:
call Funcname(args) "只进行函数调用
echo Funcname(args) "将函数返回值当作变量
-
范围:
function! Func() range
echo a:lastline - a:firstline "范围中最后一行行号减去第一行行号
endfunction
-
面向对象:
let MyClass = {"foo": "bar"}
function! MyClass.Func() dict
echo self.foo "通过self引用字典
endfunction
call MyClass.Func()
- 条件判断
if <expression>
...
elseif <expression>
...
else
...
endif
- 循环语句
for <var> in <list>
continue
break
endfor
for [var1, var2] in [[1, 2], [3, 4]]
" on 1st loop, var1 = 1 and var2 = 2
" on 2nd loop, var1 = 3 and var2 = 4
endfor
while <expression>
endwhile
- 异常捕获
try
...
catch /pattern/
" HIGHLY recommended to catch specific error.
finally
...
endtry
- exists("varname")
- search("pattern")
- getline("line")
- setline("line", "replace")
- substitute("expr", "pattern", "replace", "flag")
- function("funcname")
- pyeval("py_expr") :转换为python表达式的结果
- eval("expression") :转换为表达式的结果
- execute("cmd") :将命令输出作为返回值
- execute "c-cmd"
- normal "n-cmd"
- substitute/pattern/replace/flag