16 强力编辑
先前我们说过,工具是手的延伸。噢,与任何其他软件工具相比,这都更适用于编辑器。你需要能尽可能不费力气地操纵文本,因为文本是编程的基本原材料。让我们来看一些能帮助你最大限度地利用编辑环境的一些常见特性和功能。
一种编辑器
我们认为你最好是精通一种编辑器,并将其用于所有编辑任务:代码、文档、备忘录、系统管理,等等。如果不坚持使用一种编辑器,你就可能会面临现代的巴别塔大混乱。你可能必须用每种语言的IDE内建的编辑器进行编码,用“all-in-one”办公软件编辑文档,或是用另一种内建的编辑器发送电子邮件。甚至你用于在shell中编辑命令行的键击都有可能不同。如果你在每种环境中有不同的编辑约定和命令,要精通这些环境中的任何一种都会很困难。
你需要的是精通。只是依次输入、并使用鼠标进行剪贴是不够的。那样,在你的手中有了一个强大的编辑器,你却无法发挥出它的效能。敲击十次<-或BACKSPACE,把光标左移到行首,不会像敲击一次^A、Home或0那样高效。
|
提示22 |
|
|
Use a Single Editor Well |
|
选一种编辑器,彻底了解它,并将其用于所有的编辑任务。如果你用一种编辑器(或一组键绑定)进行所有的文本编辑活动,你就不必停下来思考怎样完成文本操纵:必需的键击将成为本能反应。编辑器将成为你双手的延伸;键会在滑过文本和思想时歌唱起来。这就是我们的目标。
确保你选择的编辑器能在你使用的所有平台上使用。Emacs、vi、CRiSP、Brief及其他一些编辑器可在多种平台上使用,并且常常既有GUI版本,也有非GUI(文本屏幕)版本。
编辑器特性
除了你认为特别有用、使用时特别舒适的特性之外,还有一些基本能力,我们认为每个像样的编辑器都应该具备。如果你的编辑器缺少其中的任何能力,那么你或许就应该考虑换一种更高级的编辑器了。
l 可配置。编辑器的所有方面都应该能按你的偏好(preference)配置,包括字体、颜色、窗口尺寸以及键击绑定(什么键执行什么命令)。对于常见的编辑操作,与鼠标或菜单驱动的命令相比,只使用键击效率更高,因为你的手无须离开键盘。
l 可扩展。编辑器不应该只因为出现了新的编程语言就变得过时。它应该能集成你在使用的任何编译器环境。你应该能把任何新语言或文本格式(XML、HTML第9版,等等)的各种细微差别“教”给它。
l 可编程。你应该能对编辑器编程,让它执行复杂的、多步骤的任务。可以通过宏或内建的脚本编程语言(例如,Emacs使用了Lisp的一个变种)进行这样的编程。
此外,许多编辑器支持针对特定编程语言的特性,比如:
l 语法突显
l 自动完成
l 自动缩进
l 初始代码或文档样板
l 与帮助系统挂接
l 类IDE特性(编译、调试,等等)
像语法突显这样的特性听起来也许像是无关紧要的附加物,但实际上却可能非常有用,而且还能提高你的生产率。一旦你习惯了看到关键字以不同的颜色或字体出现,远在你启动编译器之前,没有以那样的方式出现的、敲错的关键字就会在你面前跳出来。
对于大型项目,能够在编辑器环境中进行编译、并直接转到出错处非常方便。Emacs特别擅长进行这种方式的交互。
生产率
我们遇到的用Windows notepad编辑源码的人数量惊人。这就像是把茶匙当做铁锹——只是敲键和使用基本的基于鼠标的剪贴是不够的。
有什么样的事情需要你做,你却无法以这样的方式做到呢?
嗯,让我们以光标移动的例子作为开始。与重复击键、一个字符一个字符或一行一行移动相比,按一次键、就以词、行、块或函数为单位移动光标,效率要高得多。
再假设你在编写Java代码。你想要按字母顺序排列import语句,而另外有人签入(check in)了一些文件,没有遵守这一标准(这听起来也许很极端,但在大型项目中,这可以让你节省大量时间,不用逐行检查一大堆import语句)。你想要快速地从头到尾检查一些文件,并对它们的一小部分区域进行排序。在像vi和Emacs这样的编辑器中,你可以很容易完成这样的任务(参见图3.1)。用notepad试试看!
|
图3.1 在编辑器中对文本行进行排序
|
有些编辑器能帮助你使常用操作流水线化。例如,当你创建特定语言的新文件时,编辑器可以为你提供模板。其中也许包括:
l 填好的类名或模块名(根据文件名派生)
l 你的姓名和/或版权声明
l 该语言中的各种构造体(construct)的骨架(例如,构造器与析构器声明)
自动缩进是另一种有用的特性。你不必(使用空格或tab)进行手工缩进,编辑器会自动在适当的时候(例如,在敲入左花括号时)为你进行缩进。这一特性让人愉快的地方是,你可以用编辑器为你的项目提供一致的缩进风格[20]。
然后做什么
这种建议特别难写,因为实际上每个读者对他们所用编辑器的熟悉程度和相关经验都有所不同。那么,作为总结,并为下一步该做什么提出一些指导方针,在下面的左边一栏中找到与你的情况相符的情况,然后看右边一栏,看你应该做什么。
|
如果这听起来像你…… |
那么考虑…… |
|
我使用许多不同的编辑器,但只使用其基本特性。 |
选一种强大的编辑器,好好学习它。 |
|
我有最喜欢的编辑器,但不使用其全部特性。 |
学习它们。减少你需要敲击的键数。 |
|
我有最喜欢的编辑器,只要可能就使用它。 |
设法扩展它,并将其用于比现在更多的任务。 |
|
我认为你们在胡说。notepad就是有史以来最好的编辑器。 |
只要你愿意,并且生产率很高,那就这样吧!但如果你发现自己在“羡慕”别人的编辑器,你可能就需要重新评估自己的位置了。 |
有哪些编辑器可用
此前我们建议你掌握一种像样的编辑器,那么我们推荐哪种编辑器呢?嗯,我们要回避这个问题;你对编辑器的选择是一个个人问题(有人甚至会说这是个“信仰问题”!)。但是,在附录A(266页)中,我们列出了许多流行的编辑器和获取它们的途径。
挑战
l 有些编辑器使用完备的语言进行定制和脚本编写。例如,Emacs采用了Lisp。作为本年度你将学习的新语言之一,学习你的编辑器使用的语言。如果你发现自己在重复做任何事情,开发一套宏(或等价的东西)加以处理。
l 你是否知道你的编辑器所能做的每一件事情?设法难倒使用同样的编辑器的同事。设法通过尽可能少的键击完成任何给定的编辑任务。








