当你弄熟了hjkl,正得意的“飞快”地上下左右移动光标的,这时候需要给你泼泼冷水了。学会hjkl是第一步,忘记hjkl是接下来的方向。你看到这句话一定会感觉很装逼,但是这句话是vim大神总结出来的“秘籍”,而且还专门为此做了一个练习的插件:wikitopian/hardmode。
这个插件的变态之处就在于没有上下左右的概念,当你call HardMode()之后,你会发现世界上竟有如此愚蠢的设计,瞬间又回到了当初什么都不会的年代,各种不适应,估计不消几秒,你就想要缴械投降了吧。此时你会看到屏幕下方来自大神的嘲讽——You are weak,看来大神为了培养新鲜血液真是用心良苦。
言归正传,除了hjkl之外,vim还有大量的更加高效的移动方式。主要有以下几种:
w、 e、 W、 E、 $、 ^、0、 gg、 G、CTRL-f、CTRL-b
每个指令的作用帮助文档里面都有比较详细的介绍。比如:help w,上图中的iw/aw需要配合别的指令来使用,下面会有事例。
解释一下w/W的区别:比如“help_123"既是word也是WORD,而"help-123"是一个WORD,2个word。单个word一般是由字母/下划线/数字等组成,具体组成是在iskeyword中定义,单个WORD包含所有非空格的字符。具体可参考。
上面的都是一般入门都会接触的,下面是稍微高级一点但是非常重要的
+ / - 移动到下一行/上一行开头
H / L / M 移动到当前屏幕的最上方/最下方/中间
{ / ( 光标向后移动一个段落(以空行隔开)/一句(通常以.结尾)
ctrl-e / ctrl-y 向上/向下滚动屏幕
Ctrl+d / Ctrl+u 往前/向后滚动半屏
还有一些没怎么用过,但是还是列出来
z<CR> 将光标所在行移动到屏幕顶端
z. 将光标所在行移动到屏幕中间
z- 将光标所在行移动到屏幕低端
掌握了上面的一些命令可以显著地提升光标移动的效率,但这还只能算是入门,下面这四个应该可以说是vim的效率担当了。
f/F/t/T
比如如下一行字,光标在开头处,如何迅速定位到括号,并修改()里的内容呢?
public void test(String paraW){}
光标移到行首,依次输入f(ci(,是不是很神奇?坐下坐下,正常操作。相比l以及w都略快吧,f和t的区别在于f会跳转到行内查找的字符(包含),而t会跳转到查找到的字符的前一位(不包含),你可能会感觉上面的指令超纲了,在此稍微翻译一下,f(是指将光标移动到第一个左括号处,c表示修改,i(表示括号内的内容,连起来就是将光标移动到左括号并修改括号里面的内容。你是不是发现原来所谓的指令其实是非常简洁而美丽的语言?
熟练掌握了以上移动指令后,hjkl可以退居二线了。回到hardmode,现在h/l可以用w/W/e/E或者f/F来代替,如果一行很长,f/F的效率绝对比左右移动高,j可以用0b,k可以用$w来代替,如果你感觉$键效率太低,可以map ,l $,具体可以参考之前的配置相关的内容,虽然你会发现有的时候hjkl的效率可能会高一些,但是没办法,先忍一忍,熟练之后,再恢复easymode,到那时vim还是那个vim,你已经不是那个只会上向左右的你了。
另外推荐一下武功秘籍:vim/vi 如何高效使用(键盘图打印版),可以打印下来没事多瞅瞅,多实践就是了。
掌握了这一章的内容,相信你已经是一个合格的vimmer了。