对神之编辑器和编辑器之神的疑问

其实两大编辑器有没有那么神呢?是不是每个 Linux 使用者 / 开发者都需要学习两大编辑器其中之一呢?

Emacs 和 Vim 的可配置性可能确实无人可比?可是可配置性是一个值得追求的目标吗?这至少是一个可以思考、讨论一下的问题。
例如 fish (the friendly interactive shell) 的开放者就认为「Configurability is the root of all evil」
ridiculousfish.com/shell/user_doc/html/design.html#conf

举个具体的例子来说,Org-mode 虽好,好用过 OneNote 吗?

到底有什么是 Emacs 和 Vim 能做到而 IDE 做不到的?如果说操作习惯的话,其实很多 IDE 也有 Emacs 或 Vim 的模拟插件。就算这些插件模拟可能不完整,但是拘泥于一些编辑操作细节的意义又在哪里呢?相反我倒是发现,随着 IDE 越发强大,把 Emacs 或 Vim 配置得和 IDE 功能等价越来越麻烦了。

最后的最后,大部分 Android,iOS,Mac OS X,Windows 的 GUI 程序还不是用 IDE 的开发的(虽然我没有直接证据证明,不过很多东西不用 IDE 都得麻烦死,比如 Android 开发),最精通 Emacs 和 Vim 的 Unix/Linux 世界倒是很难举出经典 GUI 程序的例子。

不幸的是,用 IDE 开发 Linux 下的 GUI 程序并不是特别流行,所以用那些 IDE 也不一定很顺。之前有位朋友写了一个入门教程,不错。可是搞定了 Hello World 之后,完成一个复杂的程序之前,碰到了问题怎么办?能自己折腾出来吗?有资料可以查找吗?

当然对于这些问题,面对要比逃避要好得多,准备折腾 Emacs 或 Vim 的人,或许也可以折腾下 IDE 看看?

1赞

这两个编辑器更多还是用来写 CLI 程序用的吧,个人猜想。那个什么 qt-creator,貌似就是有人只用他做界面,源代码另外写。

那就是把编辑功能做到最好

有两点:
* 开发不完全等于编辑。拿 Android 开发来举例,如果用一个纯粹的编辑器,可能写个 Hello World 都要大费周折。
* 强大不完全等于最好。举一个不是最恰当的例子,汇编语言可能比 C 要强大,因为有些指令是没有对应的 C 语句的,但这绝对不是说汇编语言是最好的语言。

开发的流程主要编辑、编译、调试等等几个环节,不管你用什么都逃不开这些环节。只要能完成这些环节,IDE 不 IDE 都无所谓,整个系统就是“IDE”。对于那些 IDE 只是“看起来更像 IDE”而已。
对于将 Vim/Emacs 与 IDE 直接比较是存在问题的。一个只是编辑器,另一个则称自身能完成开发的所有功能。应该要么将 Vim/Emacs 与 IDE 中的编辑器相比较,要么将 IDE 与装有全套开发工具的整个 Linux 系统相比较。不管怎么比较,IDE 中的编辑器都比不上 Vim/Emacs。

开发中的编辑、编译、调试不是互相独立的,例如现代 IDE 都能在编辑的过程中实时提示错误,为什么?因为一边编辑一边就在编译。进行调试的过程中,也是能和编辑集成起来最好(能很方便地看到的被调试的程序在执行什么代码)。开发中的编辑,也不是单纯的编辑。举例来说,开发中常有重构(refactoring)的需求,最简单的一种重构可能是重命名,比如将一个工程中所有 func_foo 函数改名为 func_bar,这并不是单靠编辑功能强大就能解决的。

在 Linux 系统中,真正的后台工具其实都差不多,比如用 Vim/Emacs 还是用 Eclipse CDT 开发 C/C++,到头来都是调用 GCC 来编译。但是 Eclipse CDT 是专为 C/C++ 开发而设计,只做一件事(不知道做得好不好),许多方便的特性开箱可用。而 Vim/Emacs 则是万金油,可以只用单纯的编辑特性,也可以配置各种插件来达到 IDE 的效果。

另外再重复一下,编辑器的比较不能拘泥于强大程度,是否容易学习也是一个不可忽视的因素。再举一个不一定恰当的例子,中国的文言文言简意赅,但是现代还是采纳了更为冗长但是容易学习使用的白话文,而现代(当然也因为许多其他因素)的识字率也远远高于古代。不曲高和寡,才能吸引更多的朋友,才能形成一个热闹的社区。另外对于 Vim/Emacs 键绑定依赖度非常高的人,IDE 中多有对应的模拟插件,也可以一试。

补充说明一下,我自己也会一些 Vim,也觉得 Vim/Emacs 是很强大的编辑器,我发此帖只是觉得他们有一些被过度神化了。

爱折腾,或者想了解 Unix 两大传统全屏编辑器(早期好像只有 ed 这样的行编辑器)的朋友,自然是不会被我的这些说法所动摇的。

但是只是想学习开发技术,或者想在 Linux 写出一些酷 GUI 程序的朋友,其实选择一个顺手的 IDE 来工作也是完全可以的。要知道,有些 IDE/IDE 插件甚至是可以作为私有软件卖钱的(如 IntelliJ、CodeRush),可见 IDE 对于开发有其价值所在。

更一般地,自由软件、开源软件,应该能包容不同喜好的人,喜好 IDE 并没有什么不妥的,甚至有人用 Eclipse 做内核相关的开发。

个人喜欢啊,有的人用 vim 和 emacs 更能有效率的工作那就用好了,用 IDE 比较顺手也没要求一定要改用 vi 和 emacs 啊。如果是一个开源项目什么的,项目管理员才不关心你提交上来的代码是用什么写的呢。只要他是符合项目要求就好了嘛

VIM 其实,总体来说,在 GUI 下面,是不如 SublimeText 神的 :smirk:

但是,这东西不用你出天价的 70 刀啊!而且支持 console(好吧,人家天生是 console 的,只是有 GVIM 顺便支持下 GUI 而已)。而且折腾好以后可以用一辈子!而且也只是个别功能略有不如 SublimeText 而已。VIM 的缺点只是一些快捷键啦、插件啦机制还是太过于古老了(8.0 能重写吗?我做梦……),感觉继续扩展功能有点后劲不足。

而且在笔记本这种小尺寸键盘上 VIM 的操控方式效率秒杀其他所有编辑器哦!所以世界上很多编辑器都内建了 VI 模式用来方便笔记本用户编辑,包括 SublimeText。

不过现在很多 GUI 的编辑器战斗力也已经非常强大了。例如 Kate、例如 Scribes、例如 SublimeText、例如……,但是总体来说,VIM 我都觉得是必学必用的东东。

在桌面应用中,还是尽量别用 vim,毕竟学习成本太高。

Sent from my MI-ONE Plus using Tapatalk 2

有些人总会在折腾中找到乐趣。这是他们喜欢的原因

其实嘛,也不是太高,我虽然前面学了几遍不会,但是后来用 vim+zencoding 做了 5~6 个 html 后就学会了。

当你听闻有那么两个神奇东西存在的时候你就不好奇,就不想去看看到底是什么样的东西?至于学习成本嘛,本人非计算机专业大学生,纯属业余爱好。不考虑学习成本。

  1. 拿 android 开发来说之前,你起码得作过 android 开发,我还没见过哪个 IDE 能用下面的命令简单的:
    android create project --target --name MyFirstApp
    –path /MyFirstApp --activity MainActivity
    –package com.example.myfirstapp

脱离原理空谈理论,牛都在天上飘着;然后你可能会说这跟编辑器没关系,那是,你觉得 Emacs 和 Vim 难道不自带命令执行接口?

  1. 例子确实不恰当,语言以及编辑器之争都是 a waste of time。

你估计没有用过 eclipse+android 插件开发过真实项目吧,你多半也没有体会到 find reference 的重要性吧

indeed
Sent from my MI-ONE Plus using Tapatalk 2

  1. 就是 eclipse + adt 用多了,才返璞归真,我没觉得哪个 IDE 的 find reference 的能力能有 grep 强,当然 如果用 git 就更强了,比如 git grep

A 类有方法 meth1,B 类有方法 meth1, 我想找出那些地方调用了 B 类的 meth1 方法,grep 能处理吗?

自己试试

一,我懒。所以喜欢用 HHKB 这种手指不用移出主键区的键盘,对应的也就喜欢用 vim。甚至懒得用鼠标…这也是为什么我用 Mac 都是启动到 verbose mode 的原因。
二,vim 也是 IDE。可以写,可以调试,可以编译,只要配置一下就行。IDE 能做的,vim 都能做,vim 能做的(让我的手指不用移出主键区),IDE 不一定能做得到。
三,工作写 C/C++ 的,主要也就是 CLI 这种,所以也犯不着用什么 Interface Builder 之类的。。再说了,像 C# 这种,其实也能用 vim 写。即使是 Android/WP 的开发,xml 和 xaml 不能用 vim 写么?

OneNote 完爆所有文本编辑器,代码 + 任意多媒体,呵呵。