我用 Emacs 写了 7 年的 C++ 代码。 4 年前,当我换了工作,开始使用 IntelliJ IDEA 转向 Java 开发。毫无疑问,比起 Emacs,我在 IntelliJ IDEA 上写代码更有效率。
导航
代码好像真的是80%由导航生成,只有20%是实际写作的结果,IntelliJ IDEA的真正亮点所在是导航到代码库。例如,假设你要添加功能到现有的类,即使你对那个类很熟悉,你还是需要检查新代码该放在哪里比较合适,需要添加一个新的声明吗?还有什么其他的类在使用你现在修改的方法?这些都需要查看现有代码。
甚至在你写代码时也会有很多导航,你想要使用的那个方法的名称是什么?参数的序列是什么-是先有一个string,然后一个
整型,或是其他方式?枚举可能的取值是什么?
有一些些导航存在于一个文件中,而在一个文件中我最常用的操作有:跳转到文件的顶部或底部,转到一行的开始或结束,选择文本,剪切,复制,粘贴,向前向后搜索,注释以及取消注释代码。 Emacs 和IntelliJ IDEA对这些操作都有很好的
命令和快捷键支持。
但是,当涉及到文件之间的导航时,IntelliJ IDEA就有很大的优势。其中一个最有用的命令是Ctrl + B(转到声明),正如其名所暗示的,你可以转到变量,方法,以及类的声明处,即使它在另一个文件中。Ctrl + Alt + 左键可以返回上一级,我时刻都在用它,经常会在跳几级后回到开始的地方。
另一个相关的导航命令是Ctrl + Alt + B(转向定义)。在一个接口的方法名处使用此命令,你将会得到一个弹出的列表显示着这个方法所有实现的地方,然后你可以选择一个你需要转向的,(如果只有一个实现,你就可以直接转到哪儿)。重载方法是同样的道理。
与此相反的是Ctrl + U (转向父类方法或父类)。如果插入符在一个接口函数的实现处(一个小小的界面符号在方法名的左侧),这个命令将会带你转到接口本身。
当我想查看一个方法或变量被使用的所有地方时,我使用Ctrl + Alt + F7(显示用法)。这个命令弹出一个包含所有使用处
的列表,你可以很容易地转向任意一个。如果要查找类,我使用Ctrl + N ( 转到类),它可以让你使用大写字母和*通配符搜索类名。我也经常用ctrl + E。他会弹出一个窗口包含了最近最常使用的15个文件(最常使用的在最上面)。你只需要向下选择一个你想要的,然后按下回车转到它。
另一个有用的命令是Ctrl + P(参数信息),在方法和构造函数的参数处使用它来获得一个弹出窗口显示参数的名称和类型。而在Emacs中,从某种意义上来说这不是导航,你将不得不去方法或构造函数的定义处去找到这些信息。
上述所有的命令是难以置信的节省时间。在Emacs中,你需要自己转到文件以便找到你所需要的。而在IntelliJ IDEA中,它是自动的。事实上,我注意到,在我使用C++和Emacs的日子里,比起Java我定义的类趋向于更大,方法少而且长。我想一个原因是,当一切操作都在同一个文件中时Emacs导航更加容易,但是对于具有巨大导航功能的 IntelliJ IDEA来说,如果功能分散在多个文件中也并没有多大的关系.
其他优势
除了导航,IntelliJ IDEA在很多方面都具备优势。虽然这两种环境都有语法高亮, IntelliJ IDEA在此之上增加了一个新的有用功能。静态的方法和变量以斜体显示,没有使用的变量或方法会变灰。当然,IntelliJ IDEA会用红色标注任何你输入的语法错误。没有必要再去为了检查错误编译程序-它会实时地帮你完成。
在实际编码时IntelliJ IDEA也会有一些非常有用的功能。首先就是名称的自动补全,键入一个变量或方法名的几个字母,按Ctrl+空格键,名称会被补全。或者在点后按Ctrl+空格可以查看一个对象的可用方法。
另一个功能,根据IntelliJ IDEA的使用统计数据,是我用的最多的一个单一功能,那就是语法的自动选择。当你反复按下 Ctrl + W,他对代码的选择部分会越来越大。例如,它就会选择一个方法名,然后是一个表达式,再然后是整个语句,最后是整个代码块。这在搜索,排版缩进,注释代码时非常有用。
当然,还有重命名支持。在Emacs中,如果我重命名一个方法名称,我需要做查找和替换。但是对于每一个替换,我不得不检查以确保我不会一不小心改变不应该改变的东西。如果方法是公有的,我又必须在其他类中找到出现的地方。在IntellJ IDEA中,这就变成一件非常容易的事情。仅仅需要选择方法名,按下Ctrl+F6,输入新的名字,然后敲回车。所有文件中方法名出现的所有地方都将会被替换。
对IDE毫无根据的顾虑