开始接触Linux时便有听说vim,之后在学习Linux命令的过程中就把vim学了学,但是之后就没怎么用过vim了。直到前段时间学习shell脚本时,一直用vim在终端里写shell脚本,熟悉了一些基础的vim命令,感受到vim编辑代码的高效。
平心而论,我是懒得去把vim配置成IDE的,我还是离不开IDE的……不过在IDE中装个vim插件,同时享受vim编辑的高效和IDE的便捷,我觉得还是很好的,于是觉得自己该补补vim的命令了,特此整理:
vim有多种模式,默认进入是命令模式,之后按a,o,i,c,s等可以进入插入模式,或是按v进入可视模式。按ESC退出插入或可视模式,如果你不知道现在在干什么,按两下ESC能保证你退回到初始的命令模式。
基本操作:
| 按键 | 命令 | 备注 |
|---|---|---|
| :q | 退出 | quit |
| :w | 保存文件 | write |
| :wq | 保存并退出 | |
| ZZ | 保存并退出 | |
| !* | 强制执行*命令 | 比如不保存退出 |
移动操作:
| 按键 | 命令 | 备注 |
|---|---|---|
| j,k,h,l | 上下左右移动光标 | |
| ctrl+u | 上翻半页 | up |
| ctrl+d | 下翻半页 | down |
| ctrl+f | 上翻一页 | forward |
| ctrl+b | 下翻一页 | backward |
| w | 下一个词首 | word |
| W | 同上,长跳 | |
| e | 词尾 | end |
| E | 词尾,长跳 | |
| b | 词首 | back |
| B | 词首,长跳 | |
| 0 | 行头 | |
| ^ | 行首第一个非空字符 | 正则表达式 |
| $ | 行尾 | 正则表达式 |
| gg | 第一行 | |
| G | 最后一行 | |
| G/gg | 第*行 | |
| gd | 跳到光标所在变量的声明位置 | go define |
| f* | 在当前行向后查找*字符,跳至此处 | find |
| F* | 在当前行向前查找*字符,跳至此处 | |
| t* | 在当前行向后查找*字符,跳至此处之前 | to |
| T* | 在当前行向前查找*字符,跳至此处之后 | |
| ; | 重复上一个f/F/t/T命令 | |
| , | 反向重复上一个f/F/t/T命令 | |
| # | 向上查找光标所在单词 | |
| * | 向下查找光标所在单词 | |
| % | 查找匹配括号 | |
| ( | 上一个句子 | |
| ) | 下一个句子 |
编辑操作:
| 按键 | 命令 | 备注 |
|---|---|---|
| i | 从当前光标插入编辑 | insert |
| I | 从行首插入编辑 | |
| a | 从当前光标后插入编辑 | add |
| A | 从行尾插入编辑 | |
| o | 光标下新加一行插入编辑 | |
| O | 光标上新加一行插入编辑 | |
| Esc | 退回命令模式 | |
| dd | 删除光标行 | delete |
| d* | 根据*的范围删除 | |
| D | 删除从光标到行尾的字符 | d$ |
| cc | 删除光标行并插入 | clear |
| c* | 根据*的范围删除并插入 | |
| C | 删除从光标到行尾的字符并插入 | c$ |
| x | 删除光标下字符 | |
| X | 删除光标前字符 | |
| s | 删除光标下字符并插入 | |
| S | 删除光标行并插入 | cc |
| r | 替换光标下字符 | replace |
| R | 进入替换模式 | |
| v | 进入可视模式 | visual |
| J | 合并当前行和下一行 | join |
| u | 撤销上一次编辑操作 | undo |
| U | 撤销本行的所有编辑操作 | |
| ctrl+r | 重做上次操作 | 和u相反 |
复制粘贴操作:
| 按键 | 命令 | 备注 |
|---|---|---|
| yy | 复制当前行 | |
| y* | 根据*的范围复制 | |
| p | 在光标后粘贴 | paste |
| P | 在光标前粘贴 |
至于剪切,可以理解为每次删除都把删除的文本放入同一个剪切板,直接p就会把剪切板中的东西粘贴下来。
查找操作:
| 命令 | 说明 |
|---|---|
| /something | 在后面的文本中查找something |
| ?something | 在前面的文本中查找something |
| n | 下一个查找结果 |
| N | 前一个查找结果 |
替换操作:
:[range]s/old/new/[flags]
range:
- m,n:m到n行
- $:最后一行
- .:当前行
- %:所有行
- 默认是当前行
flags:
- c:替换前进行确认
- g:替换一行中的所有匹配项,默认只替换第一个
- i:忽略大小写
- e:忽略错误
自定义操作:
:[range]g/pattern/commmand
对匹配到模式的行执行command命令
其他操作:
| 按键 | 命令 | 备注 |
|---|---|---|
| ~ | 大小写转换 | |
| zc | 关闭折叠块 | zip close |
| zo | 打开折叠块 | zip open |
| == | 排版当前行 | |
| \<\< | 左缩进 | |
| >> | 右缩进 | |
| ctrl+a | 递增光标下数字 | |
| ctrl+x | 递减光标下数字 |
使用窍门:
- 大写通常是小写操作的加强或者相反操作
- 查找替换操作支持正则表达式
- 几乎所有编辑选择操作都可以在前面键入数字,来重复执行此命令n次
- 编辑相关操作可和选择操作结合,编辑指定区域
- 发挥你的想象,命令组合的自由性是vim的特色
vim很强大,这里只列出了很小一部分的快捷键,而且因为我是在IDE中用vim,并没有考虑多文件编辑,多窗口分栏,终端交互等操作。
