我们先来想想文本本身。对于文本,基本上,我们就做两件事:
内容处理辑
文本排版
很多常用的很多工具其实是把这两个功能合二为一的,比如 Word, PowerPoint,Excel。而编程本身其实并不那么涉及到排版,所以你见不到什么人用 Word 去编程,而是用文本编辑器,比如
Atom
Sublime text
Vim
Emacs
Notepad++
Visual Studio Code …
以命令行(command line) 和终端(terminal)为主的文本编辑器其实对普通用户都不是很友好。但你不是普通人啊,你决定学习 vim,除去图形界面的干扰,把注意力放在最关键的地方:
文本
因为只有缩短文本编辑的时间,你才能用更多的时间思考,在灵感消失之前,把它转换成代码。而且,你能因此发现另一个世界
命令行(command line)的世界
举个栗子,假设你想在一群文件夹中的某一类文件搜索某个的特定的词(比如所有在 sql 文件搜索 vimrocks 这个词),如果你知道什么是,那么轻轻松松搞定。不知道也没办法… 而且我也不知道以外的办法,如果 Windows 上没有,我就去下一个1。
而 vim 就是一个活在终端里的文字编辑器,虽然没有华丽的图形界面(也就是一两个插件的事儿),但这样 1) 能让你更注重文本, 2) 同时也让你有了调用所有命令行的能力。所有东西都各司其职,专注做一件事。合在一起的话:
效率如飞
其实这也就是 Unix哲学 (Unix philosophy)
Do one thing, and do it well.
而这也是 vim 的秉持的哲学和主要逻辑,把不同类型的操作分隔开,互不影响的同时,做好每一个操作。
Vim 的逻辑
对于任何一个文本编辑器来说,都要解决一个问题:如何利用键盘上有限的键,完成更多的功能以及更高效的输出。无论是哪一个文本编辑器,键盘总是比鼠标要高效的,所以我一直都很在意并关注快捷键。
最简单的一个例子就是复制和粘贴:和。基本上大部分的文本编辑器都采用的是这样的方式。V 字君把他们都划分为Emacs 的方式
Emacs 的方式:按住 Ctrl, Alt/Meta 等键来提供更多的功能
有的时候一层快捷键不够使,那就要两层,或者是三层。比如,emacs orgmode 里,如果我想要预览 LaTex 数学公式的话,需要按下:,,。其实,V 字君也是超级钟爱 orgmode 的。如果当年上大学时我会用 orgmode,天知道我能省下多少时间。不过那些都是后话了,因为当时已经使用几年了,也不需要换了。
Vim 的方式: 提供几个不同的模式, 不同模式下,同个键有不同的功能
而 vim 采用的方式则完全不同,与其让你别扭的按住 ctrl 键一直不放,干脆提供多种模式,就好比画家的画笔和画刀,每种模式做不同的事情。
普通模式 (normal mode)
输入模式 (insert mode)
可视模式 (visual mode)
替换模式 (replace mode)
选择模式 (select mode)
在普通模式更多是用来移动光标(以后咱们专门讲怎们快速移动光标),处理文本的(剪切,删除),和调用命令的,可以说是 Vim 的核心模式。可视模式的话更多是处理文本的辅助模式,有很多时候还是需要高亮已选文本的。替换模式和选择模式则偶尔出现,至少平时用的不多。而且,不同的模式下,同样的快捷键也可以后不同的功能。
可以说,Vim 用了多维度的方式解决了用有限键盘作更多的事情,并且同时还做到高效和高度可定制性(highly configurable)。
如果你对这些模式或者设置快捷键感兴趣,详情可见 Vim 自带的帮助文件。
啥???好像我还是没讲怎么用自带的帮助文件,下回呗~~ 我记得上上一回说是下回写,那咱就下下回写。虽然这一回不是上一回说的下一回要写的内容吧。
2018.03 于多伦多
1.
一般的 git for windows 都会有的
↩
领取专属 10元无门槛券
私享最新 技术干货