Vim实用技巧
杂项
操作 |
描述 |
o |
切换高亮中光标所在的端点 |
. |
重复执行上一步操作 |
% |
它代表当前文件中的所有行 |
% |
可以在一组开, 闭括号间跳转 |
m{mark} |
当前位置标记为{mark}以便以后跳转 |
`{mark} |
跳到{mark}标记处 |
qa |
录制宏到寄存器a |
qA |
往寄存器a中追加操作 |
i/d{ |
i for inside, a for around, 就可以用di/da等操作 |
=i{ |
=格式化?(缩进), inside {} |
:earlier/later 1m |
回到1min前/后 |
c-z |
挂起vim,命令行下:$ fg可以恢复,jobs查看挂起的进程 |
c-a/c-x |
数字加/减1 |
{} |
跳转到上一个/下一个段落 |
q:, q/, q? |
打开命令历史 |
gv |
选择上一次的选择 |
g / |
visual mode下 |
:g/regex/ex |
run the Ex command only on teh line that match |
:v/regex/ex |
run the Ex command only on teh line not match |
:windo {ex} |
run ex on all windows |
状态保存
command |
action |
:mkview |
保留当前buffer的一些状态,如fold状态,小而精 |
:loadview |
恢复当前buffer,mkview保留的状态 |
:mksession |
保留当前vim状态成.vim文件,包括所有的window等,大而全。由于是.vim,可以通过source恢复 |
查找
操作 |
描述 |
* |
向下查找光标停靠的词语 |
# |
向上查找 |
; |
重复上一次查找 |
, |
反转方向重复上一次查找 |
\ze和\ze |
匹配界定符, 匹配边界 |
按正则表达式查找
操作 |
描述 |
\v |
使用正则的特殊符号规则 |
\V |
原意查找, 即.啊什么的不用反斜转意 |
\w |
用来匹配单词类字符, 包括字母,数字及符号 |
\W |
匹配单词类以外的所有字符 |
\{num} |
引用被没对()捕获的子匹配 \0会引用整个匹配 |
<和> |
\v模式中<和>用来匹配边界 |
操作符 + 动作 = 操作
操作符
操作 |
描述 |
c |
修改 |
d |
删除 |
y |
复制到寄存器 |
g~ |
反转大小写 |
gu |
反转为小写 |
gU |
反转为大写 |
> |
增加缩进 |
< |
减小缩进 |
= |
自动缩进 |
! |
使用外部程序 |
动作
操作 |
描述 |
w |
向后一个单词 |
W |
当前字串 |
aw |
a word, 光标停靠的整个单词及一个空格 |
ab |
一对圆括号 |
aB |
一对花括号 |
t |
to 到 |
i” |
inside 在””中 |
it |
inside tag |
p |
段落 |
s |
句子 |
@a |
宏a |
例子
操作 |
描述 |
caw |
修改当期单词 |
dta |
删除当前位置到字母啊 |
以此类推 |
|
Ctrl+x补全
操作 |
描述 |
c-x,c-r |
insert from a register |
c-x,c-a |
last inserted text |
c-x,c-] |
tag completion |
c-x,c-f |
filename completion |
c-x,c-p/c-n |
context-aware word completion |
c-x,c-l |
context-aware line completion |
寄存器
操作 |
描述 |
“{register} |
制定寄存器{register} |
“” |
无名寄存器, 没指定寄存器情况下缺省使用 |
“0 |
复制专用寄存器 |
“_ |
黑洞寄存器, 有去无回 |
“+ |
X11剪贴板 |
<C-r>{register} |
在在插入模式下插入寄存器内容 |
:reg a |
查看寄存器a |
等等 |
|
Shell命令
操作 |
描述 |
% |
命令行中的%会展开成当前文件的完整路径 |
:shell |
启动一个shell(输入exit返回vim) |
:!{cmd} |
在shell中执行{cmd} |
:read !{cmd} |
把{cmd}的标准输出插入到光标下方 |
:[range]write !{cmd} |
以[range]作为{cmd}的标准输入 |
分屏操作
操作 |
描述 |
<C-w>= |
使得所有窗口等宽, 登高 |
<C-w>_ |
最大化活动窗口的高度 |
<C-w>| |
最大化活动窗口的宽度 |
<C-w>方向 |
移动光标所在的窗口 |
地址
操作 |
描述 |
0 |
虚拟行, 位于第一行上方 |
1 |
文件第一行 |
$ |
最后一行 |
. |
光标所在行 |
‘m |
包含位置标记m的行 |
‘< |
高亮选取的起始行 |
‘> |
高亮选取的结束行 |
% |
整个文件 |
宏
录制宏其实是把操作过程放入了一个寄存器中,如qq
就是用寄存器q来录制宏。用:reg q
可以查看内容。
qq
:用寄存器q录制宏
qQ
:往寄存器q中追加操作
:put q
:把寄存器q的内容粘贴到文档,以便修改
:d q
:复制回寄存器
["x]d{motion}
delete text move over [into register x], like"qd3d
删除三行,到寄存器q中
目录操作
利用%进行文件操作
只读寄存器%中储存有当前文件路径,通过关键字可以展开到绝对路径、所在目录等信息。
1 2 3 4
| :echo expand('%:t') " 文件名 :echo expand('%:p') " 绝对路径 :echo expand('%:p:h') " 所在目录 :echo expand('%:p:h:t') " 所在目录名
|
p表示path,h表示head,t表示tail
打开目录
如果打开的是目录,则Vim会使用Explore
打开。当然也可手动在一个文件中:Explore
打开当前目录。
:Sexplore
,水平分割打开目录
:Vexplore
,垂直分割打开目录
Vim Doc File
Insert模式下的快速操作
- 修正操作
<c-w>
,向后删除一个词
<c-u>
,向前删除整行
- 从寄存器插入
<c-r>{reg}
<c-r><c-r>{reg}
,不翻译特殊字符,如回车、退格等
- 插入Digraphs
<c-k>{key}
,插入一个digraphs,如®等键盘没有的字符,具体key看:digraphs
- 重复操作
<c-a>
,输入你上次在Insert模式下的输入
<c-@>
,输入你上次在Insert模式下的输入,然后退出Insert模式
<c-y>
,插入鼠标上方的字符
- 快速执行普通模式
- Omni Completion
- building, see
compl-omni-filetype
and ft-c-omni