现在回想早年用 Vim 编程的场景,当可体现「专注」二字,那个年月的网络没有这么多诱惑,编写代码时差不多只开一个终端工具,噼噼啪啪的敲击键盘,累了就躺在办公室外的沙发上休息,也可以站起身看看窗外,舒缓一下疲惫的眼光就能延展到清华东门上空。五道口还地属荒凉,没有高楼,夕阳可以直接从窗口进入室内,光影打在办公桌上让人感觉非常温暖。
时过境迁,现在靠着硬盘的快、内存的大,我常常同时开几十个程序,用 command+tab 一切,屏幕中央一排几毫米见方的小图标一字排开,看着它们我有时候茫然若失,不知道自己到底想点开哪个,估计它们看着我也郁闷,「这孙子把我们都打开想干什么?」环境变好,硬件充沛,软件强劲,我们的效率是下降了呢,还是下降了呢?
而Vim,正是为效率而生的。
历史
Vim 源于 Vi,但不是 Vi,Vi 作为计算机的文本编辑器历史极为悠远,它是由美国计算机科学家比尔·乔伊编写并于1976年发布的,同年苹果公司成立。我在「传统的黑客——史蒂夫·沃兹」中提到过比尔·乔伊,他是 Sun 公司的联合创始人和首席科学家,一位传奇的技术天才,我个人以为他最伟大的贡献是独立编写 BSD 操作系统,开发 Vi 编辑器,创立 Sun 公司,当然,他还是 Java 语言的主要贡献者之一,任何人有幸完成其中一项工作已经足以名垂计算机发展史,而乔伊则通过一己之力完成了这些科技成果,推动了整个计算机科技的发展。
Vim 则诞生的要晚一些,它的第一个版本由布莱姆·米勒在1991年发布,这个兄弟也是一位声名显赫的程序员,80年代买了一台Amiga电脑,打开电脑一看,米勒鼻子差点气歪了,居然没有他最常用的 Vi编辑器!对于米勒来说这是不可接受的。
愤怒的米勒决定自己开发一个文本编辑器,完全复制 Vi 的功能,并起名为Vi IMitation(模拟)。事实证明,牛X的程序员都具备这种德行,感到不爽了,就会写出个什么东西,要么完善一下,要么创新一下,要么是你写,要么是我写,于是很多伟大的软件程序就发明出来了。随着 Vim 的不断发展,更多更好的功能被加了进来,正式名称改成了Vi IMproved(增强),也就形成了现代的 Vim,目前最新的稳定版本是7.3,Vim 的开发语言是 C 和 VimScript(后续我们还会谈到这门语言)。
理念
Vim 是一款完全面向程序员的软件,活了三十多年我还没有见到过用 Vim 编辑文字的普通用户,如果你是,你一定要告诉我。
写过程序的人都知道,编程的时候双手大部分时间都放在键盘上,或编码、或插入、或移动、或定位、或查找,这种连续操作的时间和频率远远大于阅读、翻页、设置字体、摆弄样式等文案工作,而二者往往产生很多停顿和间隙,而编程时的停顿是非常影响编程效率的,所以 Vim 的设计理念就是通过模式的转换、命令的组合和数以万计的插件,保证程序员在编程的过程中,双手尽可能保留在键盘中央的区域,并且,不需要鼠标。
想用好 Vim,先要理解 Vim 的模式转换。Vim 常用的模式有四种:
- 普通模式:Vim 启动后的默认模式,用来移动光标、删除文本、覆盖输入文本、恢复操作、粘贴文本等等。
- 插入模式:输入 i 或 a 进入插入模式,在这个模式下敲击键盘会往文字缓冲区增加文字,相当于普通编辑器的编辑模式。
- 可视模式:选择文本,可以行选、块选和依次选择,选择后可以进行复制、删除、排序等操作。
- 命令模式:执行内部和外部命令,通过「: 」「/」「?」「!」可以进入命令模式,分别对应的是:执行内部命令、向上或向下搜索、执行外部命令。
Vim 的模式和普通的编辑器有所不同,而且命令繁多千变万化,所以初期的学习曲线较高,一旦你坚持练习并且度过了最早的平台期,就会领略 Vim 的妙和全键盘的好。事实上 Vim 除了能够快速编辑文本文件之外,还能够通过简单的命令做更多的事情,所以,「如果你认为Vim只是一个文本编辑器,你就输了!」
举几个例子,大家领略一下 Vim 的风采:
1、如果你想在 Vim 打开的文本中插入一个1到100的序列,执行如下命令:
:r!seq 100
2、如果你想在当前的每一行文字前面增加「序号. 」,那么执行如下命令:
:let i=1 | g /^/ s//\=i.". "/ | let i+=1
3、如果你想把当前目录下(包括子文件夹)所有后缀为 java 的文件中的 apache 替换成 eclipse,那么依次执行如下命令: 在当前目录下执行:
vim
:n **/*.java
:argdo %s/apache/eclipse/ge | update
后续还会为大家介绍一些 Vim 使用技巧,不过这个系列不会去讲如何通过 hjkl 移动光标,如何块选、行选,如何查找、定位,如何跳到行首行尾等等,我会告诉大家如何通过 Vim 自带的帮助去学习这部分内容,当然,如果大家有需要,我可以出一个常用快捷键操作列表。
下一篇 Vim 文章的内容是:「使用帮助」和「环境配置」。
文章内容来自微信公众账号:MacTalk · 微信号:sagacity-mac · 回复 m 可以查阅所有历史文章和Mac Tips · 网站:https://macshuo.com
标明一下从哪个是广告,难道是我看的太认真了?直接藐视了?
终于在网上有一篇中文的vim稍微高级一点的用法介绍了。 期待~~~
等着,慢慢看
谁说没人用vim做普通文字编辑了,还有我呢,还有我呢。
这主要跟我设置默认用vim编辑普通文本文件有关。但是,写东西的时候双手不离主键盘区,这是多么美妙的事情啊。鼠标?触摸板?我连上下左右键都嫌远。
当然了,文本文件在排版上就别多想了,而主流的文字处理工具是Word,所以vim用的还是少了,话说就没人给word开发一个vim控件么?
不过呢,当年上学时写论文倒是主要用vim来着,排版的事儿交给latex了。
可以尝试用 marddown,复杂排班还是得 word、pages 或 latex
markdown?
不怎么适合小白用户了…一上来三个例子都看不懂
以后会在技巧篇解释一下
相对于凡事都要用到ctrl和alt的emacs而言,vim确实快一些。博主是否能从vimscript和lisp这个角度比较一下。
在emacs 上安装 evil 。
然后就像 vim 上工作。
而且还可以使用elisp 的脚本。比vim脚本像样点。
我就是这么工作队的。
evil 相对viper mode有什么优点呢?
收到
一直使用VIM,换了其他也号称各种智能的编辑器都不习惯。
我用vim,我自豪,^.^ 期待更多技巧。
:r!seq 100这个句子实在是太实用了。
但是,这个:let i=1 | g /^/ s//\=i.”. “/ | let i+=1句子,是在是太难记了。
哎,用vim也好几年了。写点小工具的时候还凑合,但是写大工程的时候,文件间的跳转实在是不爽啊。阅读源码的时候更不爽了。用tags也不爽,太不智能了。
:let i=1 | g /^/ s//\=i.”. “/ | let i+=1
==>
:%s/^/\=line(‘.’).”. “/
用YouCompleteMe
有意思,继续期待啊!
为什么我试了一下第一个例子报错呢,“seq不是内部命令或外部命令也不是可运行的程序”。我知道shell里有这个命令,难道是因为我用的是Windows下的vim?
!表示调用外部 shell
一直想知道用惯了vim的人对sublime text有什么客观评价..
define “客观”
还一直以为VIM仅仅是VI增强版,长姿势了。
好像大多数系统自带的VI是不带语法高亮的,
奇怪的是,装了VIM之后VI就多了语法高亮能力。
你那是把 vi 做了 vim 的别名吧
第二个例子 \=i.”. “/ 中 \=i 后面的. 有什么作用,文档哪里可以找到说明呢?
在技巧篇会专门介绍下
好的,期待中..
写得真好!涨知识了