vim 理论 (1):模式

我们先来想想文本本身。对于文本,基本上,我们就做两件事:

  1. 内容处理
  2. 文本排版

很多常用的很多工具其实是把这两个功能合二为一的,比如 Word, PowerPoint,Excel。而编程本身其实并不那么涉及到排版,所以你见不到什么人用 Word 去编程,而是用 文本编辑器,比如

  • Atom
  • Sublime text
  • Vim
  • Emacs
  • Notepad++
  • Visual Studio Code …

以命令行(command line) 和终端(terminal)为主的文本编辑器其实对普通用户都不是很友好。但你不是普通人啊,你决定学习 vim,除去图形界面的干扰,把注意力放在最关键的地方:

文本

因为只有缩短文本编辑的时间,你才能用更多的时间思考,在灵感消失之前,把它转换成代码。而且,你能因此发现另一个世界

命令行(command line)的世界

举个栗子,假设你想在一群文件夹中的某一类文件搜索某个的特定的词(比如所有在 sql 文件搜索 vimrocks 这个词),如果你知道什么是 grep,那么轻轻松松搞定。不知道也没办法… 而且我也不知道 grep 以外的办法,如果 Windows 上没有,我就去下一个1

而 vim 就是一个活在终端里的文字编辑器,虽然没有华丽的图形界面(也就是一两个插件的事儿),但这样 1) 能让你更注重文本, 2) 同时也让你有了调用所有命令行的能力。所有东西都各司其职,专注做一件事。合在一起的话:

效率如飞

其实这也就是 Unix哲学 (Unix philosophy)

Do one thing, and do it well.

而这也是 vim 的秉持的哲学和主要逻辑,把不同类型的操作分隔开,互不影响的同时,做好每一个操作。

vim 的逻辑

对于任何一个文本编辑器来说,都要解决一个问题:如何利用键盘上有限的键,完成更多的功能以及更高效的输出。无论是哪一个文本编辑器,键盘总是比鼠标要高效的,所以我一直都很在意并关注快捷键。

最简单的一个例子就是复制粘贴cmd/ctrl + ccmd/ctrl + v。基本上大部分的文本编辑器都采用的是这样的方式。V 字君把他们都划分为 Emacs 的方式

Emacs 的方式:按住 Ctrl, Alt/Meta 等键来提供更多的功能

1
2
3
4
ctrl + b 向后移动光标 backward
ctrl + f 向前移动光标 forward
ctrl + n 向下移动光标 next (line)
ctrl + p 向上移动光标 previous (line)

有的时候一层快捷键不够使,那就要两层,或者是三层。比如,emacs orgmode 里,如果我想要预览 LaTex 数学公式的话,需要按下:ctrl + c, ctrl + x, ctrl + l。其实,V 字君也是超级钟爱 orgmode 的。如果当年上大学时我会用 orgmode,天知道我能省下多少时间。不过那些都是后话了,因为当时已经使用 Vim + LaTex 几年了,也不需要换了。

Vim 的方式: 提供几个不同的模式, 不同模式下,同个键有不同的功能

而 vim 采用的方式则完全不同,与其让你别扭的按住 ctrl 键一直不放,干脆提供多种模式,就好比画家的画笔和画刀,每种模式做不同的事情。

  • 普通模式 (normal mode)
  • 输入模式 (insert mode)
  • 可视模式 (visual mode)
  • 替换模式 (replace mode)
  • 选择模式 (select mode)

在普通模式更多是用来移动光标(以后咱们专门讲怎们快速移动光标),处理文本的(剪切,删除),和调用命令的,可以说是 Vim 的核心模式。可视模式的话更多是处理文本的辅助模式,有很多时候还是需要高亮已选文本的。替换模式和选择模式则偶尔出现,至少平时用的不多。而且,不同的模式下,同样的快捷键也可以后不同的功能。

可以说,Vim 用了多维度的方式解决了 用有限键盘作更多的事情,并且同时还做到 高效高度可定制性 (highly configurable)。

如果你对这些模式或者设置快捷键感兴趣,详情可见 Vim 自带的帮助文件。

啥???好像我还是没讲怎么用自带的帮助文件,下回呗~~ 我记得上上一回说是下回写,那咱就下下回写。虽然这一回不是上一回说的下一回要写的内容吧。

2018.03 于多伦多


  1. 1.一般的 git for windows 都会有的

VZJ wechat
欢迎您扫一扫上面的二维码,订阅 V 字君的微信公众号。