vi 小技巧¶
部分¶
- vi +xx 文件名,可以直接跳到位置的, 和vim一样。xx代表行数
- 查找时, \<xxx> 代表全词匹配——vim也一样,而且更先进的是,当光标在该单词上时,vim快捷键shift+8 -- * 就是向下全词查找,shift+3 -- # 就是向上全词查找。
- D 删除到行尾, C 删除到行尾并进入插入模式
- inner word/around word, diw/ciw, daw/caw iw 当前词, cw 含前后空格, as/is sentence, ap/ip 段落
- period "." 重复上一个操作, 不过要注意操作的原子性, 比如 dw 后 insert 是两个操作, ciw 修改就是一个操作
vim 技巧¶
模式¶
- ctrl-v 或 ctrl-q 进入可视块状态, 即 列编辑模式。
页面跳转¶
- gg 文件首行 G 文件末尾
- H M L 光标跳转页顶,页中,页底
- zt zz zb 光标所在行置顶、置中、置底
- gj, gk 段落行移动
排版缩进¶
- 按v进入visual状态,选择多行,用>或<缩进或缩出 等效于 x >>/<< x行缩进
- 通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版
- 至于如何针对自定义语言制订缩进规则,还有点问题,成功率不高。
代码跳转¶
- % 跳转到配对的括号去
- [[ 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
- gD 跳转到局部变量的定义处
- '' 跳转到光标上次停靠的地方, 是两个'单引号, 而不是一个" 双引号
- 切换到上次修改的位置, 想知道你在文件中做的最后一次修改是在什么位置?切换到正常模式,输入 g; 来即可切换到上次修改的位置。
书签¶
- mx 设置书签,x只能是a-z的26个字母
- `x 跳转到书签处(""是1左边的键)
复制粘贴¶
- 全局复制, gg 文件首行, shift+v 或 V 列模式, G 文件尾行, 即可全选, 小写的 v 不能把最后一行弄下来。
- 同理的一块代码复制,也是使用 列模式, 不需要预知行数了。
标签tag¶
- :tselect 显示列表
- :tn和:tp 显示后一个tag和前一个tag
读入read¶
编辑¶
- caw/yaw/daw:change a word可以修改/复制/删除当前光标所在位置的单词。对于int count=0;的例子,如果此时光标在count中间某处,比如u处,直接键入caw可以达到同样的效果。所以caw更强大一些。
- ci":change inside "可以用于修改当前位置附近,在相同配对的"中的内容。比如对于const char *str="hello world";。当在双引号中间的任意位置键入ci"可以直接清空字符串,并继续输入新的希望的字符串。
- yi":yank inside " 猜猜是啥意思?类似ci"只是把编辑操作编程复制操作,因为y是复制!是不是很强大。
- ya":yank around " 复制整个字符串,包括双引号。
- ci(、ci[:举一反三change inside ( change inside [。
- cit:这个比较特殊,可以直接编辑匹配的xml标签中的内容!经常编写html的童鞋可以熟悉一下。