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