前言

不管是刚刚入门的新手还是经验丰富的大牛程序员,他们都很喜欢集成开发环境(IDE)的概念。它作为兼备文件结构组织、编写、维护、测试和排错工具于一体的应用程序,对程序员们非常有价值。而且,它为各种语言量身定做,提供了类似自动补全、句法检测和高亮等功能。

这样的工具在包括 Linux 和 BSD 在内的主流桌面系统下都可以使用,并且绝大多数都是免费的,在这种情况下你还有什么理由用 Windows 记事本或者 nanocat 来写程序呢。

然而,在 Unix 以及它的现代分支的忠饭血液里流淌着一种文化基因,他们认为“Unix 就是集成开发环境”,因为那些在命令行里的工具可以轻易地实现上面提到的各种桌面版的牛叉IDE。从这一点来说,分歧很大。你可能会对由小小 Bash shell 所能达成的复杂开发环境惊讶,甚至你会觉得 Unix IDE 跟 Eclipse 或 Microsoft Visual Studio之类的IDE根本不是同一意义的。

Unix 怎么就是个IDE了?

使用 IDE 最主要的原因是它集成了你所有要用的工具,而且你可以在不用太费事去配置各个应用的前提下就能很协调地使用它们,并且用户界面还是基本一致的。在图形界面下大家都想要这种能够集成在一起的工具,那是因为这类窗口应用除了用复制粘贴,没有别的方法使他们更好地协同工作,它们缺失一种 共用接口(common interface)

有关这个问题有趣的是,对于 shell 用户来说这些设计巧妙、经久不衰的 Unix 工具已经有共用接口了,要么是以文本流的形式,要么是以持久化文件对象的形式,这用一句 Unix 世界的格言说就是“一切皆文件”。Unix 里几乎所有东西都是围绕这两个基本概念来组建的,加之,这些有着40年历史的高性能工具的用户和开发者都极具一流的互用性,这些都为 Unix 能成为一个足够强大、成熟而全面的 IDE 打下了坚实基础。

正确的观点

对 Unix 作 IDE 的观点并不是古老的 Unix 卫道者遗留下来的。其实你可以用另一种方式去看待,就像 Emacs 和 Vi 这两款古老的文本编辑器的现代化身(GNU Emacs 和 Vim)有着非常活跃的社区为它们开发各种插件用以各种编辑任务。这两种编辑器都有着各种各样的插件足以满足你所有的编程需求,而且就像其他 Vim 热衷者一样,我可以一口气说上至少六七个我觉得是必备的插件。

然而,我经常读到一些文章讲一些开发者如何努力去把这些文本编辑器转变成IDE。比如 never needing to leave Vim,或者 never needing to leave Emacs。但是我认为硬把 Vim 或 Emacs 转变成它们本来不是的东西,是在解决问题的思维方式上出了问题。Vim 的作者 Bram Moolenaar,在某种程度上貌似是同意我的想法的,可见 :help design-not。其实只需要按``Control+Z``就可以回到 Shell,而 Shell 的成熟和高度可组合性的工具组会给你任何编辑器都没法给你的力量。

有关此系列文章

在此系列文章中,我会遍历 IDE 的六大功能,并用一些例子来展现如何轻松地组合使用这些 Linux 里的已有工具。这个系列不会涵盖所有知识,我所演示的工具也不会是唯一的解决方案。

  • 文件和项目管理—— ls, find, grep/ack, bash
  • 文本编辑器和编辑工具—— vim, awk, sort, column
  • 编译器及解释器—— gcc, perl
  • 创建工具—— make
  • 排错器—— gdb, valgrind, ltrace, lsof, pmap
  • 版本控制—— diff, patch, svn, git

别误解我

我不认为 IDE 不好,相反,我觉得它们是很美好的存在,所以我才试图说服你 Unix 可以用作 IDE,或至少可以当作是。我也不是想说 Unix 总是所有编程任务的最佳工具。相比一些像 Java 或 C# 之类的“行业”语言或大量需要编写GUI的项目, Unix 公认地适合做 C, C++, Python, Perl,或者 Shell 之类的开发。尤其是,我更加不是要试图说服你要你放弃来之不易的 Eclipse 或 Microsoft Visual Studio 的知识转而投奔有时有些难以理解的命令行世界。我只是想展示一下栅栏另一边的世界,仅此而已。