用了这么多年的vim,一直都没有好好总结一下使用的技巧,看到fishc的总结后,借花献佛自己顺便整理一下,特此感谢。
一、vim光标移动
h 左
j 下
k 上
l 右
二、vim进入插入模式
按键含义
i 在光标的前边进入插入模式 I 在光标所在行的行首进入插入模式 a 在光标的后边进入插入模式 A 在光标所在行的行尾进入插入模式 o 在光标所在行的下方插入空行并进入插入模式 O 在光标所在行的上方插入空行并进入插入模式 s 删除光标指定的字符并进入插入模式 S 将光标所在行清除并进入插入模式
注意:最后这个大 S 是清除所在行,而不是删除。清除的意思就是保留行,把内容清空,然后在行首进入插入模式。
三、vim回到普通模式
Esc
四、退出 VIM 的方法
一般退出 VIM 分两种:一种是保存修改并退出;另一种则是直接退出。无论你选择哪一种退出方式,都先请敲一下 Esc 按键回到普通模式。
五、删除命令
使用删除操作符 d 的删除命令的格式是 d motion,d 是 Delete(删除)的意思,motion 即指定要删除的对象。
按键含义
0 将光标定位到行首的位置 ^ 同上 $ 将光标定位到行尾的位置 b 将光标定位到光标所在单词的起始处 e 将光标定位到光标所在单词的结尾处 w 将光标定位到下一个单词的起始处(注意,是光标所在单词的下一个单词噢^_^) gg 将光标定位到文件的开头 G 将光标定位到文件的末尾
按键含义
d0 删除光标从当前位置(不包含)到该行行首的所有字符 d^ 同上 d$ 删除从光标当前位置(包含)到该行行尾的所有字符 db 删除从光标当前位置(不包含)到单词起始处的所有字符 de 删除从光标当前位置(包含)到单词结尾处的所有字符 dw 删除从光标当前位置(包含)到下个单词起始处的所有字符 dh 删除光标前面一个字符 dl 删除光标指定的字符 dj 删除光标所在行以及下一行的所有字符 dk 删除光标所在行以及上一行的所有字符 dd 删除光标所在行的所有字符 dgg 删除光标所在行(包含)到文件开头的所有字符 dG 删除光标所在行(包含)到文件末尾的所有字符
六、数字的奥义
比如普通模式下按一下
h 按键是将光标向左移动一格,而在其前面输入数字 3,即 3h 则是将光标向前移动 3 格
依此类推
3j 则是将光标向下移动三行,3w 则是将光标跳到三个单词后的开始位置 d3h 表示删除光标前的 3 个字符 d3j 表示删除光标所在行以及下面 3 行的所有字符 d3w 则表示向后删除当前光标到后面第三个单词前的所有字符
七、撤销和恢复命令
u 表示撤销最后一次修改
U 大写表示撤销对整行的修改
Ctrl + r 快捷键可以恢复撤销的内容
这上面所有的“删除”操作并不是真的删除,它们事实上是存放在 VIM 的一个缓冲区(VIM 把它称之为寄存器)中,相当于 Windows 的剪切功能
八、粘贴命令
使用 p 命令可以将最后一次删除的内容粘贴到光标之后。(大写的 P 则是粘贴到光标之前)
如果你需要粘贴的是整行为单位,那么 p 命令将在光标的下一行开始粘贴;如果你拷贝的是非整行的局部字符串,那么 p 命令将在光标后开始粘贴。
九、拷贝命令
VIM 用 y 命令实现拷贝。语法跟删除的 d 命令一样:y motion
其中的 motion 同样是用来表示操作范围的指令
即 yy 表示拷贝当前行,3yy 则表示拷贝 3 行;y$ 表示从光标所在的位置拷贝到行尾的所有字符;yG 则表示从光标所在行拷贝到文件末尾行的所有字符。
十、替换命令
VIM 还提供了一个简单的替换命令:r 命令。
r 用于替换光标所在的字符,做法是先将光标移动到需要替换的字符处,按一下 r 键,然后输入新的字符。注意,全程无需进入插入模式,也不会进入插入模式。
十一、替换模式
对于需要替换多个字符,更好的方案是直接进入替换模式。按下大写的 R 键,屏幕左下角出现 -- REPLACE -- 字样,说明你已经处于替换模式。此时输入字符可以连续替换光标及其后边的内容。注意:退格键(Backspace)在替换模式中被解释为如果左边内容被替换过,则恢复到原来的样子;如果没有被替换过,则简单的向左移动。修改完毕后,按下 Esc 回到普通模式。
十二、修改命令
修改跟替换是不一样的!
修改命令我们使用 c 键来启动,格式是:c [number] motion
motion 依然表示范围,[数字]依然拥有奥义,同样是可选的,加上数字表示重复执行多次 motion 范围
比如 cw 是修改光标指定单词的内容(VIM 的做法就是删除当前光标位置到下个单词前的所有字符,并进入插入模式)
而 c2w 便是修改当前光标指定的单词以及下一个单词共计两个单词的内容
按键含义
c0 删除光标从当前位置(不包含)到该行行首的所有字符,并进入插入模式 c^ 同上 c$ 删除从光标当前位置(包含)到该行行尾的所有字符,并进入插入模式 cb 删除从光标当前位置(不包含)到单词起始处的所有字符,并进入插入模式 ce 删除从光标当前位置(包含)到单词结尾处的所有字符,并进入插入模式 cw 删除从光标当前位置(包含)到下个单词起始处的所有字符,并进入插入模式 ch 删除光标前边一个字符,并进入插入模式 cl 删除光标指定的字符,并进入插入模式 cj 删除光标所在行以及下一行的所有字符,并在光标下一行进入插入模式 ck 删除光标所在行以及上一行的所有字符,并在光标下一行进入插入模式 cc 删除光标所在行的字符,并进入插入模式
事实上,修改 == 删除 + 进入插入模式,但是两者在定位光标上是不完全一样的!
十三、文件信息
快捷键 ctrl + g 可以知道当前的文件信息,比如文件名,文件状态,文件的总行数,以及光标所在的相对位置。
十四、跳转
在 VIM 有两种方式可以将光标跳转到指定的位置:
行号 + G
:行号
十五、定位括号
VIM 使用% 键可以帮你快速定位到另一半括号,将光标移动到 (),[],{},中的任何一半括号上,按下 % 键,便可看到此时光标已经跳转到另外一半的括号上了。
十六、缩进
VIM 可以使用尖括号(< 或 >)来控制缩进,我们常用的就是两个同方向的尖括号表示将光标所在的语句进行缩进和反缩进操作。很明显 >> 表示缩进,而 << 则表示反缩进。
可以按一下 v 进入可视模式(左下角出现 -- VISUAL -- 字样),然后通过 h、j、k、l 或 其他 motion 来移动你的光标,此时光标所到之处必被一道亮光所包围(表示被选中),选择好需要缩进的目标后,只需按一下 > 即可完成任务。
十七、搜索命令
在普通模式下按下斜杠(/)也是进入命令行模式,此时该字符和光标均出现在屏幕的底部,这跟冒号(:)一样。
搜索方向 /目标 从光标位置向后 ?目标 从光标位置向前 n 向后搜索下一个 向前搜索下一个 N 向前搜索下一个 向后搜索下一个
退出搜索:输入冒号(:)进入命令行模式,然后输入 nohl 即可。
最后提个醒:在搜索命令中,.、*、[、]、^、%、/、?、~ 和 $ 这 10 个字符有着特殊意义,所以在使用这些字符的时候要在前面加上一个反斜杠(),比如你要搜索问号,则输入 /?
十八、替换命令
输入:s/old/new,这样即可将光标所在行的第一个 old 替换为 new 输入:s/old/new/g,则表示将光标所在行的所有 old 替换为 new 输入:%s/old/new/g,表示替换整个文件中每个匹配的字符串 输入:%s/old/new/gc,每次替换前都咨询一下你 输入:5,13s/old/new/g 可以替换指定行的内容太