本文已转至http://cn.abnerchou.me/2014/03/02/bfdaadb0/

自从有了计算机,人们就想向其灌输自己的想法。

要想对其输入,自然离不开文本编辑器。

公告:《VIM-Adventures》的作者愿意免费赠送一个此游戏的激活码给在本系列攻略中留言的用户。活动详情请见本文末。

最近一直在学习Emacs,这个几乎和我同龄的软件,在发展如此迅速的时代依然有不少程序员的死忠粉,不禁让人诧异。友人常问:“现在既然都有IDE了,还学那么古老的编辑器干什么?” 刚开始我也这么认为,但自从在Linux下写程序后才发现,Linux的IDE是多么的坑了。且不说安装要费老半天劲(apt-get 得到的一般不是最新版本),装好后调试编译环境又是半天,最可气的是,一切都弄好后,突然要换电脑工作,我总不能把硬盘拔了带着吧。而且常用IDE产生了IDE依赖症,甚至不用某个厂商的IDE,就不会写代码了。于是在网上就找到了Emacs,支持自定义化配置,配置文件小巧可随时备份,甚至可以用来煮咖啡。

等等,等等,题目是vim啊,说了半天Emacs是作甚?当然我认识vim比Emacs要早,因为vim是Linux系统自带的vi的进阶版。当时是为了远程修改一些配置文件才不得已学了两下,但发现其不够直观,进入后完全不知道该如何操作。也就了解了下如何插入,修改罢了。

但Emacs欢迎界面就有一个15分钟左右的教程(怎么又扯回Emacs了)。上手难度陡降,但发现越学深入越有东西要学,比如系统配置,eLisp语言,自定义插件等等……一切都还好,但……但……光标的移动有点太……难了吧……C+n下一行,C+p上一行,C+v下一页,M+v上一页,C+f向后,C+b向前(C代表Ctrl,M代表Alt或类似键)……有时只需要光标向后移一下,竟然要按两个键,有点太低效了吧。这时候vim闪亮登场(我是用Emacs下的Evil插件来实现vim控制的),它的控制只需要h,j,k,l,单键即可控制光标移动,有点像上下左右方向键。所以,我觉得有必要结合Emacs和vim来降低其学习曲线了:

常见编辑器的学习曲线<图>

vim的入门难和Emacs的后期变态让人望而生畏。vim入门难,到底难在什么地方呢?难在养成一种习惯,即键盘上26个按键不再是普通的按钮,其还附有了特殊的意义。而且其上下左右键是k,j,h,l,这是多么的蹩脚啊,为啥不向CS学习下设置成w,s,a,d。因为w,s,a,d其本身还有特殊含义。vim的按键已经可以算是最优了,在不触动鼠标的情况下,可以快速完成各种操作,比如dd是删除一行,db是删除前一个单词,dk是向前删除两行等等。以前都是要多次按键,或者用鼠标协作,现在完全可以用键盘快速完成。

有的人用不惯vim的方向键就早早的退出了。其实只要练习,没有什么难的,这里有个简单的贪吃蛇游戏,就是用vim的方向键来控制。在吃的时候要按 i (即vim里的插入功能) 才可以,并且在吃完后按Esc返回键盘控制。我的最高分只有700。 T_T

当然这里要说的VIM-Adventures 不单单用游戏的形式来练习光标控制,还可以通过游戏学习到vim的按键操作。通过其可以学习的操作有:

h j k l : w W e E b B x X r d dd D ~ 0 ^ $ f F t T ; , % z zt zz zb g gg G 1 2 3 4 5 6 7 8 9 count [count] * # n N p P " y yy Y reg :reg registers "" "- "_ "0 "1 "2 "3 "4 "5 "6 "7 "8 "9 "a "b "c ... "x "y "z "A "B "C ... "X "Y "Z i I a A c cc C s S o O word WORD sentence paragraph { } ( ) [{ ]} [( ]) . text-objects aw iw aW iW as is ap ip a[ a] i[ i] a( a) i( i) a< a> aB iB ab ib i< i> at it a{ a} i{ i} a" i" a' i' a` i` H M L nu nonu nu! nonu! | / ? ` ' m :marks :delm :delmarks :delm! :delmarks! undo u :undo CTRL-R :redo redo

在其后的章节,我将详细讲解其每一关的攻略。因为我发现本游戏不光需要知道vim的操作,还有一定的解谜成分。并通过游戏本身了解到vim编辑器一些自身的特性。

敬请期待~

LEVEL 1-3

LEVEL 4 5

抽奖活动详情

用户需要达成以下两个要求即可获得抽奖资格:

  1. 在本系列文章中留言;
  2. 关注博主。

(如果可能的话再推荐本系列任一文章,不胜感激。)

抽奖将在本系列文章连载结束后进行,届时将通过博客园站内信通知获奖用户。

《VIM-Adventures攻略》前言的更多相关文章

  1. Python数据分析与挖掘所需的Pandas常用知识

    Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series ...

  2. 10个步骤教你如何安装Anaconda安装,Python数据分析入门必看

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:小白 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行 ...

  3. Python数据分析——numpy基础简介

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:基因学苑 NumPy(Numerical Python的简称)是高性 ...

  4. 《谁说菜鸟不会数据分析》高清PDF全彩版|百度网盘免费下载|Python数据分析

    <谁说菜鸟不会数据分析>高清PDF全彩版|百度网盘免费下载|Python数据分析 提取码:p7uo 内容简介 <谁说菜鸟不会数据分析(全彩)>内容简介:很多人看到数据分析就望而 ...

  5. 《Python金融大数据分析》高清PDF版|百度网盘免费下载|Python数据分析

    <Python金融大数据分析>高清PDF版|百度网盘免费下载|Python数据分析 提取码:mfku 内容简介 唯一一本详细讲解使用Python分析处理金融大数据的专业图书:金融应用开发领 ...

  6. [Python数据分析]新股破板买入,赚钱几率如何?

    这是本人一直比较好奇的问题,网上没搜到,最近在看python数据分析,正好自己动手做一下试试.作者对于python是零基础,需要从头学起. 在写本文时,作者也没有完成这个小分析目标,边学边做吧. == ...

  7. 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例

    基于上两篇文章的工作 [Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 [Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 已经正确地实现 ...

  8. 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化

    继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...

  9. 【搬砖】【Python数据分析】Pycharm中plot绘图不能显示出来

    最近在看<Python数据分析>这本书,而自己写代码一直用的是Pycharm,在练习的时候就碰到了plot()绘图不能显示出来的问题.网上翻了一下找到知乎上一篇回答,试了一下好像不行,而且 ...

  10. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

随机推荐

  1. 【转】Linux 中断学习之小试牛刀篇

    原文网址:http://www.linuxidc.com/Linux/2011-02/32129.htm 前言 在前面分析了中断的基本原理后,就可以写一个内核中断程序来体验以下,也可以借此程序继续深入 ...

  2. MFC单文档自定义扩展名及添加图标报Assertion错误

    忽然无聊的想给自己写的程序保存的文件使用自己的名字简写作为后缀,于是有了下文. IDR_MAINFRAME格式介绍 IDR_MAINFRAME字符串资源中包含7个子串,分别以/n结束,即如下格式: & ...

  3. Junit 学习

    一. 断言核心方法 示例代码: package com.test; import org.junit.Assert; import org.junit.Test; /** * @Title: test ...

  4. appium新版本不支持findElementByName,切换到findElementByAndroidUIAutomator

    appium 1.7.6 不支持findElementByName(locator)  不知道为什么? 脚本中许多这样的语句,麻烦事情多了 org.openqa.selenium.InvalidSel ...

  5. socket实现局域网通信

    今天实现了一个局域网通信的小例子,上来记录一下,代码不成熟,勿拍. 这是我本机客户端: 这是我虚拟机的客户端. 我为他们分配了静态IP,这样就可以实现局域网通信了.注意代码中必须把监视线程的IsBac ...

  6. 去除html页面中按钮在ios中的默认样式,去除select自带的小三角图标

    btn{-webkit-appearance: none;} -webkit-appearance: none也能去掉select下拉列表后面自带的小三角

  7. 腾讯云(centos)上安装apache

    安装 yun install httpd 随系统自启动 chkconfig httpd on 修改/etc/httpd/conf/httpd.conf文件 #修改WWW目录为自己的目录 Dcoumen ...

  8. hibernate连接数据库,进行操作的步骤

    //初始化 Configuration conf=null; SessionFactory sf=null; Session session=null; Transaction tx=null; tr ...

  9. SpringMVC学习简单HelloWorld实例

    首先还是从一个简单的Hello World项目说起: 我机器的开发环境为: Ubuntu12.04(不同操作系统对本系列项目没有影响): 开发工具:Eclipse For JavaEE: 数据库:My ...

  10. permission is only granted to system apps--Android manifest权限问题

    在android的manifest.xml下编辑如下代码:<uses-permission android:name="android.permission.INTERNET" ...