0
· ARTICLE · 2015.01.01 · 6 MIN ·

VI 快捷键

Vim / Vi 快捷键速查 — 命令模式、光标定位、复合命令、文本块操作、宏与插件。 · by 思扬
AI · HERO seed:1320150101 Vim / Vi 快捷键速查 — 命令模式、光标定位、复合命令、文本块操作、宏与插件。
FIG.00 — cover · ai-generated · placeholder

常用快捷键

快捷键说明:\<CR\> 回车

命令模式

快捷键功能
.重做(与其他操作配合)
/ / ?正/反向查找
Ctrl-o/i向前/后位置跳转
Ctrl-]跳到光标下关键字的定义之处
g;跳到上次修改处。同 u<Ctrl-r>(撤销重做),`.(仅能返回一层)(NO IDEA)
gi回到上次编辑处,并切到编辑状态。同 `^ + i
gf跳到光标下文件(配合 C-o 返回)(NO IDEA)

光标定位

快捷键功能
w / W下一个单词开头(WBE 大写时以空白字符识别)
b / B单词开头
e / E单词末尾
0行首
^行首非空白字符
$行尾
+ / -下/上一行行首
:n / nG光标定位到第 n 行
( / )行首/尾
{ / }段落首/尾(空行识别)
H / M / L光标移动到屏幕的顶/中/底部
Ctrl + y / e屏幕向下/上滚动一行
Ctrl + f / b向下/上滚动一页
Ctrl + d / u向下/上滚动半页
J合并行
=格式化代码
< / >缩进
:+y / :+p使用系统剪切板复制/粘贴

参考: http://www.ibm.com/developerworks/cn/linux/l-cn-tip-vim/ http://blog.csdn.net/yangzhongxuan/article/details/6542808

复合命令

快捷键等效命令功能
Cc$删除光标后的内容并切换到编辑模式
scl删除光标处字符并切换到编辑模式
S^c删除当前行并切换到编辑模式
I^i行头部插入
A$a行尾部插入
o / OA<CR> / ko新增行/往上新增行

快速选择 & 操作

  • 需要三条命令合用(前端工程师必学):

    1. 操作符:v 选择,c 删除并进入插入模式,y 复制,d 删除
    2. 进入模式:a 包括分隔符,i 不包括分隔符
    3. 输入分隔符:)/b, }/B, ], >, ', ", `, tXML 标签内部
  • 文本块

    1. 操作符(同上)
    2. i 当前,a 包含一个空格(段落为一个空行)
    3. w 单词,W 字符串,s 句子,p 段落 常用:d 配合 a,c 配合 i。如:daw, ciw

位置标记

m{a-zA-Z} 标记,小写为局部,大写为全局 '{mark} 跳到标记行首,或 `{mark} 跳到标记光标处 常用:mm 配合 `m

` 后跟(上次*位置):` 跳转,. 修改,^ 插入,[/] 修改或复制起始/结束,</> 高亮起始/结束

编辑模式

更多命令

命令功能
:w !sudo tee %用 sudo 权限写入

C-v C-m 输入 win 下的换行符 ^M(win 下是 C-q C-m)

缓冲区 registers

  • 查询缓冲区::di

  • 帮助::h registers

  • 不同模式下:如命令模式中 "0p,等价于编辑模式的 C-r 0

  • 缓存器参数: [1-9]:最近删除 0:最后一次复制 *:系统剪切板 ::命令暂存器 /:搜索 .:最近插入的 %:文档名(IDEA 插件里不可用)

窗口

<C-w>w 窗口间跳转(w 也可以使用 hjkl 方向键,同 <C-w><C-w>(方便))

替换

例子:

a
说明 a
b
说明 b
...

%s/\v(.+)\n(.+)/\<label for="\1">^M <input type="radio" name="t" id="\1" value="alipay" \/>^M \<img src="images\/pay_bank_abc.gif" alt="\2" \/>^M\<\/label>

  • 其他 p"0p 的区别:当之前进行过删除操作,前者会取出被删除的值,而后者只取上一次复制的值。

正则

后置参数 e,搜索时定位到末尾(IDEA 不可用),如:/div/e

配置相关

$ vim -u NONE -N 不加载自定制 vimrc 文件。(-N 防止进入 vi 兼容模式)

未整理

  • g + 行操作 屏幕行移动(用于有自动换行,如:gj, gk, g0, g^, g$)

  • * 查找光标处单词

  • f + 字符 当前行查找(配合 ;, 进行重复或反方向,F 可直接向前查找,t/T 则是移动到前一个字符) 例:f,dt. 删除后面逗号到句号之间的内容。 建议:f/F 在普通模式使用,t/T 配合 d/c 等操作符使用。

  • d{motion} 定位删除 例:删除当前位置到 get 单词间的内容:v + /ge\<CR\> + h + d == d/ge\<CR\>

  • <C-a> / <C-x> 当前行数字加/减(后者在终端下可能与其他快捷键冲突)

  • very magic 模式:\v 适合正则时使用(不需输入转义符),\V 转义符之外字符都保持原意

  • di / da + ( / [ / { 删除括号内内容/包含括号

规则

  • 操作符 + 动作命令 = 操作
  • 当一个操作符命令被连续调用两次时,它会作用于当前行

基准

操作符

命令用途
c修改
d删除
y复制到寄存器
g~反转大小写
gu转小写
gU转大写
>增加缩进
<减小缩进
=自动缩进
!使用外部程序过滤 {motion} 所跨越的行

  • 录制宏
    • 开始录制:q + 注册名(如 a)
    • 操作
    • 结束录制:q
  • 执行宏
    • @ + 注册名
    • 前面可加执行次数

插件

Vundle

插件管理 编辑 .vimrc 添加查件,重载 vim 后 :PluginInstall

Solarized

配色方案

Comment-T

快速文件定位

cd ~/.vim/bundle/command-t/ruby/command-t (包含 extconf.rb 文件的目录)
ruby extconf.rb
make

其他参技

一些不起眼但非常有用的 Vim 命令