资讯专栏INFORMATION COLUMN

Vim 的哲学(二)

ashe / 1513人阅读

摘要:为什么要有模式呢以上其实已经讲述了一些原因,但真正的价值还在于接下来要讲到的哲学。鼠标与快捷键的操作治标不治本,它们没能从根本上解决这个问题。

  

学会用不同的角度去看待和理解这个世界,你收获的永远会比你想象的更多。

上回我分享了如何掌握基础移动的心得体会,而对于很重要的模式却只是一带而过,这其实是有原因的。过去我有过几次教新手 Vim 的经历,按照惯常的方式先告诉他们模式切换,然后再讲基础移动。然而我发现一旦他们掌握了模式转换,他们就会迫不及待的开始输入,紧接着就会因为方向控制的别扭而倍感受挫,人就是这样,谁都不喜欢在别人面前表现的很笨拙不是么?

所以我决定换个策略,利用游戏与交互教程帮助他们在轻松有趣的环境下先建立起信心,等他们回到真实环境的时候就不会有挫折感了。这很有效!其实学习这件事情大抵都是如此,入门时期的挫折遭遇很容易丧失兴趣和信心,甚至导致此生都不再愿意去碰一下。缘分的建立不就是在合适的时间地点以合适的方式产生联系吗?

现在我想你已经在不知不觉中建立起了微妙的联系,接下来我们开始了解模式。

常规模式(Normal Mode)与插入模式(Insert Mode)

这俩模式是最常用的,对于模式我们现在抛出两个疑问:模式是干什么的呢?为什么要有模式呢?

模式是干什么的呢?

大体上我们可以把“打字”这件事情分成两个部分,一个是输入,从无到有的过程;另一个是编辑,对已存在的文字进行复合操作,包括:复制,剪切,移动,修改,删除,格式化等等。

大部分的编辑器都只有一种模式,以上两部分的操作合并在一起进行,这就是为什么会有菜单和按钮的原因,而对于文字的范围选择也需要额外的方法来辅助,比如快捷键和鼠标操作等。无论是什么样的情况我们都不得不迫使大脑在思考(输入)和寻找(编辑)中不停转换,即使你不在意这一点,始终有一些操作你是无法流水化的。比如说:在光标随意停留在某处的时候,你能闭着眼睛用鼠标点击到某个功能吗?Vim 就可以。换言之一旦你掌握了 Vim之后,所有的操作——强调一遍:所有的操作都可以不用寻找,不用鼠标等工具辅助,你可以全副身心投入在你的主要目标上。

嗯?你说你全部用快捷键?呵呵,那文字选择呢?再快的快捷键也无法胜过 Vim 选择任意目标的速度。

好了,让我们回到正题。从现在开始你要记住两件事情:

一旦你想要在屏幕里写点什么,就按下 i 键进入输入模式,它的含义是:Insert(插入);

一旦你需要停下来——不管是你想要进行编辑或是你脑袋卡壳了要思考一下,总之只要你不再输入了,就离开插入模式返回常规模式。记住:你在 Vim 里的常态是常规模式,而不是输入模式。

关于返回模式的方法,常见的有三种,你可以现在就做出你的常规选择,我会讲出需要你考虑的要素:

使用 ESC 键:这是最通用的方法,它唯一的缺点就是距离标准键位较远,然而由于它的位置在左上角,所以你也可以做一些强化练习来准确的找到它。记住:不要看键盘去找,要形成肌肉记忆!也有很多人偏好修改 ESC 键位,比如说把它转移到 CapsLock,即大写锁定键上去,这是可取的,并且也十分有效,然而我不推荐这么做。因为修改键位相对来说麻烦一些,在某些场景会让你颇感不便。比如说你去客户那里安装服务器,遇到的几乎都是标准键盘,不光是在 Vim 下让你难受,其他的地方也是如此,因为 ESC 太常用了,而且没有第二替代键。

使用 Ctrl-[ 组合键:它的功能和 ESC 完全等价,只是组合键稍微困难一些。这里的窍门是 Ctrl 键的位置,我会把它重新映射到 CapsLock 键上去。这样一来两手的小指稍微移动就可以完成,稍加训练即可熟练掌握。这也是我不推荐 ESC 的第二个原因,至于之前提到过的键位映射带来的后遗症,不要紧,键盘上都有不止一个的 Ctrl 键,你根本无需调整键位。

使用 Ctrl-c 组合键:看起来它似乎比 Ctrl-[ 更容易一些,但是它们的含义有很大的差别。在终端下 Ctrl-c 的意思是“中断”,基本上它会中止所有正在运行的命令,当然它也可以在 Vim 里带我们中断一切操作返回默认的常规模式。但是 Vim 有一些操作其实是依赖正常的返回方法的,也就是 ESC 或者 Ctrl-[,使用 Ctrl-c 会导致这样的功能无法被有效触发(有不少插件依赖这些触发功能,所以要小心莫名其妙的问题)。总而言之这是最不推荐的方法,除非你心里很有数,并且能在正确的时候使用前面两种方法。

返回模式太重要了,所以你一定要谨慎选择适合你条件的方式并把它练至纯熟,否则一旦养成习惯之后想要改变就得付出不小的代价(相信我,我就是 Ctrl-c 的受害者 T_T,我也是不久前才明白 Ctrl-c 的问题的,这还要感谢本站的 @依云……,不好意思当时我还相当自信呢)。哪怕你接触 Vim 的头几天就只练习插入模式和常规模式的转换我也认为是值得的。

不少人在选择第二种方式时遇到的最大阻碍就是无法盲打,[ 的位置无法准确的找到。那我的建议是找不到就放弃吧,无论如何不要让自己养成总看键盘的坏毛病。特别是程序员,在这一行干久了,找到 [ 的位置应该不是什么难事,而盲打更是你需要掌握的基本能力,如果你还能使用标准指法那就太赞了!反正这一关你迟早是要过的。我刚刚习惯了全键盘盲打,正在朝着 80词/分钟的目标迈进,回头有时间我也可以写点这方面的心得体会——哦!你看我就是一个坏例子,我学习 Vim 的时候完全不会盲打呢!(但是我能战胜自己,所以你也可以,对吧?)

另外,以上三种并非全部的可能性,我还见过许多种技巧,但总结起来无非就是在插入模式下设定新的键位映射。此时此刻我不打算教授这方面的东西,贪多嚼不烂,还记得我们的口号吗?保持简单。

为什么要有模式呢?

以上其实已经讲述了一些原因,但真正的价值还在于接下来要讲到的 Vim 哲学。

人们对待“输入”和“编辑”这两件事情的态度和分析是不同的。

输入是流线式的,同时带有很强的节奏感。比如你聊天打字的时候,或者撰写文章的时候,你总是会在段落的末尾停顿一下,因为你需要思考,理顺逻辑,组织语言;在思维不流畅的时候,你甚至会写一句停一句,然后反复编辑。写程序更胜于此,我们思考的时间远远比真正输入的时间要长的多。你看,这些停顿就好像乐谱里的休止符,它们梳理着音乐的节奏,提醒你何时换气,何时调整情绪,多么自然。

然而编辑是碎片式的,且毫无规律可循,也无从预见。在编辑时最大的障碍就是位置的跳转和任意的选择。我们希望首先能够尽可能在输入和编辑之间流畅的转换,其次希望能够简化编辑时的各种操作。鼠标与快捷键的操作治标不治本,它们没能从根本上解决这个问题。

在 Vim 的世界里,模式转换对应着你的节奏感。写东西写到爽的时候你一定能体会到这种妙不可言的节奏感,模式转换帮助你建立和强化你的节奏感。请不要为模式转换做出的按键操作感到多余,因为用不了多久它们就会变成你的下意识操作。就好像歌手要练习呼吸一样自然而然。你会因为写作时一时停顿下意识的转笔感到多余吗?你完全不会注意到,这是你的本能反应,提醒你你需要节奏。

在 Vim 的世界里,一切都是对象(好熟悉的一句话啊……)。一个字符是一个对象,一个词是若干字符组成的对象所以它也是对象,一句话是若干个词组成的对象所以它还是对象,一段话、一个代码块,甚至整篇文章,只要是逻辑上可以划分的部分都可以视为对象。因此你不必靠鼠标/快捷键的选择来建立你要处理的对象(这样你总得人为的锁定区域边界)取而代之的是合乎逻辑的语义化指令操作。

比如说,当你在常规模式下输入 caw 的时候,它的意思是:改写一个词(change a word)。
再例如,当你在常规模式下输入 d3k 的时候,它的意思是:向上删除 3 行(delete 3 upwards),k 是上,你已经习惯了吧?

你根本不必考虑具体的边界在何处,对于人脑来说判断逻辑事物的界限本就是一瞬间的事情,手动做出选择难道不是一种退化吗?你要做的就是告诉 Vim 你要对哪个目标做出何种编辑动作,就像说话一样简单。OK,这样一来的确有很多指令需要你掌握,但就像上面的例子所演示的那样,绝大部分的指令都是语义化的,一旦建立起思维与指令之间的联系,那便顺理成章了。

于是在做出指令的时候总是需要返回常规模式就很容易理解了,因为编辑操作打断了输入的节奏,你只是很自然的切换了你的节奏而已。这就是为什么我希望你记住只要你不再输入就返回常规模式的原因,其背后蕴含的哲学就是:保持节奏。

我有过好多年的音乐生涯,音乐教会了我许多事情,其中一件事就是节奏的重要性。我乐队的鼓手曾经说过:

  

速度快不一定节奏稳,但是节奏只要稳了,速度就一定能上去。若是一个鼓手空有速度和技术但却不够稳,无法掌控节奏的话,他就毁了。

这是真理。追求技巧和速度是所有野心勃勃的新手们共有的特征,然而极少人能够说服自己先建立起一个稳定的技术基础,速度和技巧是水到渠成的事情。或许这就是这个世界大师总是少数人物的缘故吧。

Vim 的模式转换就是一种帮你建立起坚实基础的有效手段,它不是凭空臆造的,而是取道于人们的生理习惯并加以符号化。它足够简单,但却在多年以来被证明行之有效。我不会教你如何获得惊人的速度和超凡的技巧,因为这些东西你自然而然都会得到,前提就是:保持节奏,保持简单。

预告

到现在为止,似乎我讲的干货不够多哦。不过不要担心,前期需要强调和理解的哲学已经足够了,你也有了充裕的时间来消化它们,并且把基础移动和模式转化掌握于心(你做到了是吧?)。下一讲我们开始奉献干货,先从一套基本的 Vim 配置开始。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24764.html

相关文章

  • Vim替换小技巧(兼浅谈Vim哲学

    摘要:本文将以此为起点,介绍一些替换小技巧。实话实说,使用命令来替换有违于大多数程序员的习惯。接下更进一步,教多几个小技巧。这么一来,替换将仅在当前大括号内生效。在替换局部变量时,比起全局替换,这样的替换方式无疑会更高效。 想必用过Vim的人都知道,在Vim里面,以下命令可以替换当前文件的内容: :[range]s/{要被替换的模式}/{替换的内容}/[flags] 其中range指定替换命...

    ConardLi 评论0 收藏0
  • Vim 哲学(一)

    摘要:之所以能卓尔不群靠地就是一种自成一派且精悍有效的编辑器哲学当然也是,就好像网游千千万却唯有一览众山小,那靠地不是技巧与外在,而是与众不同的世界观。征服其实是一种领悟,我融入了的哲学而已。这也是好东西,它比上一个更贴近的哲学。 就在几个小时以前,我回答了一个关于推荐开发工具的问题,很多朋友表示喜欢和鼓励,非常感谢!我也很想多写一些细节,于是便起意开一个系列来聊聊我多次提到的 Vim。 ...

    honhon 评论0 收藏0
  • Vim 哲学(三)

    摘要:插件键位映射技巧性的配置等等都是锦上添花,它们有助于你进一步提高效率以及个性化你的工作环境,但是对于哲学的理解帮助甚少。为你开启语法高亮。你可以自定义各种语言的语法高亮,无非就是根据这些规 如果没有挑战,人生将多么无趣! 两种副本 在我的硬盘上总是保留着(至少)两份 Vim 的配置文件。其中一份是所谓完全正式版,它的文件名是 .vimrc,到本系列结束的时候,我们将了解其中...

    klinson 评论0 收藏0
  • Vim 哲学(四)

    摘要:的哲学第四篇姗姗来迟,狗血的原因我就不多说了,好消息是我将为这个系列带来一些动态演示。所以目前为止你学会上述四个动作指令就足够了。以词为单位使得我们可以更精确也是更具语义化的移动光标,并且要比逐个字符的移动要快得多。 Vim 的哲学第四篇姗姗来迟,狗血的原因我就不多说了,好消息是我将为这个系列带来一些动态演示。原本我打算录视频的,但是文章都写了那么些篇了,现在再录视频似乎晚了些,所以我...

    xiao7cn 评论0 收藏0
  • Vim - 适合自己,才是最好

    摘要:原文链接适合自己的,才是最好的被称为编辑器之神,是我用过之后才体会到的,用之前实在不敢对它做出什么评价。最初的不适,换来的是效率的飞升。感悟在学习使用的过程中,我最大的感悟就是适合自己的,才是最好的。 原文链接:Vim - 适合自己的,才是最好的 Vim 被称为编辑器之神,是我用过之后才体会到的,用之前实在不敢对它做出什么评价。在大学时代,Vim 的大名就已如雷贯耳,但由于它陡峭的学...

    legendmohe 评论0 收藏0

发表评论

0条评论

ashe

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<