Vim-Adventures简介
Vim作为一款神级编辑器,却有非常陡峭的学习曲线。网上大部分的教程很多仍然以背指令为基础,很容易让人望而却步。之前我也多次想要学习Vim但是最终都放弃了。直到使用Vim-Adventures才发现要入门Vim其实一点也不难,而且只要熟悉了一些基本命令以后,Vim的使用体验就绝对超过市面上大部分的编辑器了。
就我个人的体验来说,理解Vim的指令并不难,难点在于掌握Vim需要大量的重复练习。初学Vim的人很难有大量使用Vim操作的环境,或没有安全的可以进行编辑的文本,或无法忍受初学Vim时相对下降的编辑效率,从而很快就放弃了Vim。
Vim-Adventures是一款基于Vim操作的网页版游戏,通过一些游戏行为能潜移默化地熟练Vim的基本操作,最终形成肌肉记忆。同时Vim-Adventure给予了玩家一个安全的、可大量重复练习的环境,从而在短时间内获得使用Vim的快感,最终能够体会到Vim的强大。
Vim-Adventures的难度梯度还是比较平缓的,前几关都能够很简单的完成。但是随着游戏的进行,挑战难度会逐渐增大。鉴于网上没有看到比较全面的中文版的攻略,在全部通关Vim-Adventures后,我把每一关的流程攻略写在这里,给有兴趣学习Vim的朋友参考。
Level 14部分参考了github:
https://github.com/pepers/vim-adventures
需要特别说明的是,整个攻略基于我自己的尝试,很有可能不是最优解,需要其他玩家共同发掘。同时强烈建议除非卡关很久否则尽量不要看这个攻略,自己实践的训练效果是最好的。
全文最后有一个小彩蛋,关于学习git的使用。
Vim-Adventures全攻略
游戏内常用命令
在学习Vim的基础命令前,有一些游戏命令需要了解。
:login # 登录命令。必须登录才能继续Level 3以后的游戏内容
:stats # 显示统计数据,主要显示每关的按键,用时等
:keyboard # 显示当前可以使用的指令。可用指令随着游戏进程逐步增加
:w <'filename'> # 储存游戏进度,最多可以储存3个游戏进度。如果已有同名进度,需要使用:w!覆盖。此命令本身也是Vim命令
:e <'filename'> # 读取游戏进度。此命令本身也是Vim命令
:!ls # 列出当前储存的游戏进度。注意和':ls'区分
:!rm <'filename'> # 删除游戏存档
:q # 退出游戏。此命令本身也是Vim命令
:level <'n'> # 一旦通过某关,则可以使用:level命令直接跳转至该关开头
Level 1
第一关主要是熟悉Vim的移动。Vim中移动光标可以用hjkl也可以用上下左右,但是既然都用来学Vim了,那就尽量不要用上下左右。实际上习惯了hjkl的移动方法以后,手不用离开主键盘区就能实现光标移动命令实在是方便的不行。在Vim Adventures里,如果你想用上下左右移动的话,游戏也会提示你使用hjkl的,所以就老老实实学习这个使用方法吧。
游戏中的小人主要是讲解游戏剧情和一些使用技巧,除了最后一关和中间一些涉及游戏进程的对话以外都可以不用太在意。
首先先移动到钥匙位置取得第一个钥匙,注意上方的Remember里的箱子现在暂时是打不开也过不去的,不要过多纠结,一路穿越迷宫向右,消耗刚刚得到的钥匙打开拦在路上的箱子(门?Whatever。。。)进入草地。
现在发现如果想直接过去会有一个反向台阶阻拦,这里需要用到一个技巧:在较长的一行向较短的一行移动时,如果光标超出较短一行的长度,光标会进入较短的一行的最后。但如果继续从较短的一行向较长的一行移动,则光标会回到一开始光标位置的同一列。
因此,只需要将光标移动到草地的第一行最后,然后按j向下即可越过台阶。第二和第三个台阶同理。
越过三个台阶,和皇冠紫发小人对话,按Esc进入第二关。
Level 2
在第一行获得指令w
。w使光标跳转至下一个单词的开头处。
使用w和hjkl进入石块中间获得第一个钥匙和指令e
。e使光标跳转至当前单词的结尾处,如果已经在当前单词的结尾,则跳转至下一个单词的结尾。
进入最后一行获得指令b
。b使光标跳转至当前单词的开头处,如果已经在当前单词的开头,则跳转至前一个单词的开头。
使用e进入石块中间获取第二把钥匙,向上混合使用w, e, b获取第三把钥匙后打开三个箱子,和皇冠紫发小人对话,按Esc进入第三关。
Level 3
在第二行Blue处获得指令B。B和b的区别在于b将标点及空格视为单词间分隔而B只将空格(包括tab)视为单词间的分隔。
标红框的暂时无法处理,先将光标移动至草丛边带帽子小人,接下来屏幕右上角会有30秒倒计时。玩家需要在30秒内到达整段文字的最后。
先按j进入文字,按Esc跳过屏幕滚动。17个w到达第三行on,4个e到达my,不断尝试重复使用we之后到达最后一行拿到指令x,等30秒时间到后就会被传送会文字开头。
x可以删除当前光标所在的字符。使用x将Roses段落内标记红框的字符删除后可以获取棕色钥匙。混合使用hjkl, wbB按照原路返回第一关游戏最开始处Remember段落。光标移动至“!”处,使用B进入段落,打开棕色宝箱,获得蜡烛。
如果要继续下面的游戏需要注册付费,费用是25美刀,有效期半年,可以使用信用卡进行支付。
注册付费后就可以使用注册的账号登录。使用全文开头给出的命令可以实现登录,保存游戏进度,读取游戏进度,选择关卡等功能。
拿到蜡烛以后,只能看到附近一点范围的地图,返回之前获得棕色钥匙的小岛,和皇冠紫发小人对话,按Esc进入第四关。
Level 4
向下走几步后黑暗状态会解除,用x删除所有标红框字符后获得指令W和指令E。W E对应w e的效果和B对应b的效果非常接近,可以类比理解。
在script段落,从<开始,按E跳至>,向下到第三行按B到达句首,移动获得指令r。指令r的作用是替换,按r后输入正确的字符就可以替换当前的字符。将红框内红色的字符用r替换为黑色字符,分别为r0 r< rl rm ra rr rr即可完成本段。和皇冠紫发小人对话,按Esc进入第五关。
Level 5
从第五关开始游戏难度逐渐提升,各个puzzle的路径也变得不是特别直观。在接下来的攻略中,将用每个puzzle的开头单词作为puzzle的标识。
Deleting段:
回顾之前的x和r指令,注意有变化红框的就是需要用r替换的,否则就是用x删除的。
- 第1行删除x,e
- 第4行删除l
- 第5行rd,删除ool ool
- 第6行删除s,rr
- 第7行删除c,rw
- 第8行rm rs rn
完成后获得指令d。d和x都起删除的作用,但是x一次只删除一个字符,d可以删除多个字符/行/段落。这里需要说明的是,单独的d并不起作用,d需要配合一个定位符来使用,原因很好理解,因为x就是删除当前光标所在的字符,但是d删除的是一个范围,需要根据光标的定位删除当前光标和指定光标之间所有的字符。dd可以直接删除当前一整行,这是vim中的一种快捷方式,以后也会有很多指令有类似的效果。
Before段:
注意从这里开始,需要删除的红框就不止一个字符了。如果红框框住多个字符,说明需要在一个指令内删除。比如"gone"中的"ne"就不能用两次x删除,必须一次清除。
- 第1行a处dw,n处de
- 第2行空格处de,rarw,删除d
- 第3行rx
- 第4行rs
- 第5行删除r,a处de
- 第6行删除r,删除s,删除s,rd
- 第7行rl
- 第8行n处dw
完成后获得金色钥匙。
在第4行的affair处按e进入路中间。向上回到右侧,进入These段。
These段:
- 第1行n处dw,t处dw
- 第2行y处dw
- 第3行o处dW,n处dw
- 第4行删除u,ry,s处dw,删除感叹号
- 第6行删除两个空格,rabbit的i处db
- 第7行n处dE,rn
- 第9行re,删除t
- 第12行rt,删除u,keyboard的b处de
- 第13行kIdder的第二个d处de,rh
- 第16行需要一次删除两行。在第16行任一处dj即可
注意明面上看似乎都处理完毕,但是最后有一句"BTW, X does mark the spot"提示还有一个小puzzle未解决。
在X处按x,会出现提示:当向前删除时,光标所在位置的字符不会被删除。因此,在.处db,可以删除X和后面的空格,从而完成这个puzzle。
完成后获得金色钥匙。
使用获得的金色钥匙打开两道门后和皇冠紫发小人对话,按Esc进入第六关。
Level 6
从第六关开始,整体难度再次提升,大部分的puzzle有了按键次数的限制,这要求玩家用精简的方式对字符进行处理,这也符合Vim操作的核心宗旨。一旦puzzle内按键次数超过限制,则会直接跳出puzzle,puzzle内的所有已经处理的内容全部清空。
在限制按键次数的puzzle中,puzzle的按键次数上限是比较严苛的,有不少puzzle我反复试了很多次,都只能在上限按键次数完成。但是就是在这样反复思考的过程中,Vim的水平可以得到进一步的提高。
Some段:
"Some"的m处开始。
进入Some段后就可以看见右上角的"8 key presses to go",说明这个puzzle需要在8个按键内完成。
小技巧:
- 进入puzzle后如果发现出现失误,按两次Esc可以直接跳出puzzle。
- 进入puzzle后在次数限制内可以任意移动,如果没有超过上限就离开puzzle,可以在离开的位置重新进入puzzle。
- jjjjjjjj(8次j到最后一行Back的下方)
- h(到Back的c处),b b db即可
完成后获得金色钥匙。
~段:
第2行"beard"的b处开始。
- rh e rt j w rf
完成后获得指令~。 指令~的作用是大小写的互相转换。
begin段:
"begin"的b处开始。
- ~ w e x j j h x W w l rt e x
完成后获得指令$。 指令$的作用是跳转到行最后。
"Shaken"的S处$跳转至感叹号,进入下一部分。
There段:
第4行"Understand"的U处开始。
- ~ k k k $ rs j j j de
完成后获得指令0。 指令0的作用是跳转到行开头。
With段:
第1行"With"的W处开始。
- $ ~ j 0 r0 j $ x j 0 w r1 w ~
完成后获得指令^。 指令^的作用是跳转到行的非空首字符。
function段:
第4行开始。
- E l D j j j d^ j dd j w w x $ j h h rI W l D
完成后获得金色钥匙。
I段:
本段不限指令次数,结合之前的操作可以简单通过。
完成后获得金色钥匙。
使用获得的金色钥匙打开两道门后和皇冠紫发小人对话,按Esc进入第七关。
Level 7
第七关开始出现可以进入的小草丛,而且里面会有NPC和指令藏在其中。
The段:
puzzle前有一个门被锁住,目前没有钥匙可以打开。
- 进入