记录下自己感觉会用得到的命令。
Vim Tips from Practical Vim
### Normal Mode
1.>G 从当前 行直到文件结束,增加缩进
2.A在当前行的末尾添加,如果想要多行行尾添加内容,如添加 ; 可以 A;<Esc>,然后j. 对后面的行执行同样的添加操作
3.f{char} 行内寻找 字符,; 执行上次的 f 命令,找到下一个; , 找到上一个。
4.&执行上一次的替换操作
5.* 搜索光标所在的词
9.daw 删除单词及与单词前面相邻的空格。
10.C-a 给数字加1,C-x给数字减1. 也可以在前面加数字,执行这个数次操作。
12.d{motion} 可通过:h operator查看完整列表。
Insert Mode
13.在Insert模式下修正,<C-h>==backspace 后退删除一个字符,<C-w>后退删除一个单词,<C-u>删除到行首。
14.<C-[> 切换到normal模式。可以将此映射为<Esc>。
>书上说的
15.从寄存器粘贴
K查找光标所在单词的man页,J连接当前行与下一行。yt,,t{char}看tip49<C-r>{register}和<C-r><C-p>{register},更多参考:h i_CTRL-R_CTRL-PTip62
16.<C-r>=做运算,将结果插入
17.插入特殊字符,<C-v>{code} or <C-v>u{code} 如
18.插入特殊字符<C-k>{char1}{char2} 可以查看特殊字符的编码:h digraphs-table
> 我的<C-k> 不起作用。
Visual Mode
20.`
23.gUit 和 vitU it 是in tag,更多的text object后面还会有。
24.gv重新选择最后一次在visual下的选择。
Command-Line Mode
28.在命令行模式下. 表示光标所在的行,%当前文件的所有行。'<表示选择的第一行,'>表示选择的最后一行。1文件第一行,$文件最后一行,0在文件第一行之前不存在的一行,‘m包含标签m的行。
29.移动行 :[range]copy[== t ] {address} 和 :[range] move[== m ] {address}
- copy
:6t.把第6行复制到当前行的下一行:t6把当前行复制到第6行下一行,即第7行:t.复制当前行,即yyp:t$复制当前行到文件 尾'<,'>t0复制所选的行到文件首
- move 与copy类似
30.对于要在连续50行末尾添加 ; 如果再用2中的方法会很累的,要执行50次的j. 。
- 可以先利用2中的方法
A;<Esc>添加一行 - 然后用
V{line of number}<CR>来选择要进行修改的行,其中{line of number}就是要选择的行数 - 然后按
:会进行:'<,'>, 接着输入normal .,回车执行添加操作 :normal命令,如:%normal A;对整个文件的行执行添加; 这里的 % 代表整个文件,当执行这个特殊的normal命令时,vim会把光标移动行首,因此可以用:%normal i//在行首添加注释符。
31.自动补全Ex命令,:**<c-d> 显示可能的列表。前选<tab>, <c-n>, <Right> 后选<s-tab>, <c-p>, <Left>
34.q: 打开历史命令(Ex 命令)窗口, q/ 打开历史搜索记录窗口,<c-f>从命令行模式切换到命令行窗口
67.对连续或非连续的行执行某个操作,如替换每行中的1.为1)。
最终结果:
qa用寄存器a开始录制宏0f.r)w~, 具体的替换过程q结束录制jVG选择要进行操作的行,可以用 30 中说过 的方法选择- 按 : 进行
:'<,'>接着输入normal @a进行替换操作
这里用 normal命令进行操作,对非连续的行也可以,即如果其中有一行并没有 X. ,如果使用如5@a这样的操作,如果中间有一处不能进行,后面的都会停止
其他的vim技巧
1.快捷键
A==$a行尾进入 insert 模式I==^i行首进入 insert 模式C==c$从光标当前位置删除到行末,并进入 insert 模式s==cl删除光标所胡字符,进入 insert 模式S==^C删除整行,进入 insert 模式
2.:h index 查看绑定的key。
> 不知道有没有插件来获取vim所有plugin绑定的键??