记录下自己感觉会用得到的命令。
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-P
Tip62
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绑定的键??