在前面的文章里,我介绍了IntelliJ IDEA(如下称IntelliJ)中与代码补全及重构相关的特性。今天我将介绍另一个利器——IntelliJ的导航(Navigation),只要运用得当,它将节约你大把的时间。数据库
做为一个IntelliJ的用户,你应先明确一点——IntelliJ是用来让你专一于代码的工具。只有这样咱们才能充分利用并享受它的魔力。所以,大部分的时间里你应该专心工做于代码编辑器中,仅把导航当作在不一样位置的代码间快速切换的好帮手。编程
本文旨在介绍IntelliJ的导航在工程文件(project files)、代码块(block of code),及工具窗口(tool window)、编辑器标签等UI元素上的特性。intellij-idea
一、最近编辑的文件
若是停下来仔细分析你全部的导航行为(Navigation Pattern),你会意识到,在大部分的时间里你只固定的一些文件上工做。这就很好地解释了为何Recent files是IntelliJ用户的经常使用特性。一旦能熟练使用它,你就会将其逐渐引入到你大部分的导航操做中去。而使用这一特性只需使用快捷键Ctrl+E(OS X为Cmd+E)。编辑器
请注意,该功能默认选中最后访问的文档,因此只需使用回车或者鼠标单击便能跳转到此文件。若是想减小列表中的候选项,则能够借助Speed Search 功能——输入目标文件名中的一部分,列表将仅显示匹配项。ide
二、结构菜单(Structure popup)
另外一个你天天都会作的,就是要在当前打开的文件中四处奔波,而文件有一个共性:它们有本身的文件结构。例如,一个Java的类文件含有字段和方等成员组成的结构。XML和HTML文 件包含一个标签树(tags tree)结构。若是想快速的导航到文件结构的某一部分,那就快按下Ctrl+F12(OS X 上为Cmd+F12)来选 择想跳转的地方吧。(一样的,Speed Search亦可用于减小列表中的候选项)工具
有时,你对信息的需求可能会影响Structure popup中显示的内容。例如,一个Java类的结构图可能包含了与其相关的基类或接口的结构信息。不过在默认状况下,IntelliJ会隐藏它们,若是确实须要,那么再按一次快捷键便可。单元测试
IntelliJ会贴心地记录你在Structure popup中的操做偏好,并在下一次调用它时体现出来。学习
三、跳转至导航栏
一般,屏幕中只显示含代码的编辑器是一件喜闻乐见的事情。但也有人但愿看到项目树(project tree),由于它有助于理解或者快速修改项目的上下文。 事 实上,在项目树和编辑器之间切换是IntelliJ中极其容易的事情。不过事实上,项目树并不是最佳选择。老练的IntelliJ用户知道一个更好的替代 品:导航栏。新用户常觉得那只不过是一个面包屑菜单(breadcrumb)罢了,但在有经验的开发者眼中,这但是一把瑞士军刀!按下快捷键 Alt+Home(OS X为Alt + ↖ )执行Jump to navigation bar的操做,咱们就能感觉到它的威力——利用它咱们能够跳转至项目的每一处,能够建立和修改任一文件以及其余许许多多有意义的事情。测试
值得一提的是,即使在导航栏隐藏时,咱们也能够执行此操做。url
四、跳转至指定类
你可能会想:Go to a class这么一个简单的操做有什么好说的?也许你已经知道Ctrl+N(OS X中为Cmd+N)可以在类之间跳转,但不见得你就知道这个功能比它看起来强大得多。除了各家IDE都支持的简单通配符、驼峰式命名、包名前缀之外,IntelliJ还能够将中间名匹配(middle name matching)、行号后缀、快速文档、定义菜单(definition popups)等方法引入这一功能:
默认状况下,Go to a class功能的搜索仅会在你的项目中执行。若没有匹配项,再按一下快捷键,搜索将在项目引用的库中展开。
在IntelliJ中,咱们彻底能够不借用鼠标便轻易地执行类间跳转:当菜单出现的时候,输入或修改查询语句,最后利用键盘的上下键选择目标便可。若你曾试图在其余IDE中尝试这种方法,你确定知道我在说什么。
五、跳转至指定的文件或目录
当你须要打开项目中特定的文件,利用快捷键Ctrl+Shift+N(OS X中为Cmd + Shift + N )是个不二的选择。除了实现其基本的功能外,你还能够借由通配符、驼峰式命名以及目录名前缀等方法进行搜索。
六、跳转至指定符号
终于要介绍Go to…特性家族里的最后一位重要成员了——Go to a symbol。 经过快捷键Ctrl + Shift + Alt + N (OS X为Cmd + Shift + Alt + N ),便能在不用全文搜索(full-text search)的状况下导航到指定的符号处。由于IntelliJ会一直维护项目及库中全部符号的索引,因此不管项目规模多么庞大,它依旧能够在经过相应 表达式在几秒内轻易地找到匹配的方法或字段。
七、在…中选定
若是须要在特定的工具窗口(如Project/Changes View,甚至Explorer/Finder)中选定正在编辑的文件,那么经过快捷键Alt+F1来使用Select in…的功能是再方便不过了。
八、切换至指定的工具窗口
IntelliJ的大多数工具窗口都分配了简单的快捷键组合。经过快捷 键,你便能快速呼出对应的工具窗口并使其得到焦点。在工具窗口得到焦点时再按一次快捷键,工具窗口将会隐藏,你便能返回编辑器上工做啦。这种方法实在是方 便,更重要的是,它让你彻底摆脱了鼠标——每当须要某一个特定的工具窗口或者想返回编辑器,按快捷键就行了。
确保你至少能记住如下几个快捷键:
- Project工具窗口:Alt + 1 (OS X中为Cmd + 1)
- Changes工具窗口:Alt + 9(OS X中为Cmd + 9)
- Terminal工具窗口:Alt + F12
九、返回编辑器
不少人都不知道IntelliJ的一个小窍门——按下Escape就能返回编辑器。当你使用这种方法时,此前被呼出的工具窗口仍保持其可视状态。固然啦,如 果你不想看到这些窗口,按下快捷键Ctrl + Alt + F12(OS X为Cmd+ Alt + F12)便可。
(译注: 在本地测试时该快捷键对应File Path,而Shift+F12才是正确的快捷键)
十、跳转相当联的单元测试
当你正在编写代码,特别是想同时确保代码顺心如意,经常使用的导航功能是什么呢?固然是在类和对应的单元测试中来回切换啦。IntelliJ能够识别每个类所关联的测试,而且提供Go to a test的工能。按下Ctrl + Shift + T (OS X 为Cmd + Shift + T),便能在它们之间来去自如:
若是在使用这一功能的类没有相关联的测试,则IntelliJ会好心地帮你生成一个。
十一、跳至上方的层级
另 一个常见的行为是,你会为了某个类或者其某个方法,须要浏览该类的层级结构。在大多数IDE中,你能看到一个图标出如今与方法定义处于同一行的 gutter里(译注:gutter即编辑器左侧的窄条,可见特性21)。经过点击这个图标,就导航到了父类(或接口)中该方法定义的位置。除此以 外,IntelliJ首创了一个叫Super Method的功能,按下快捷键Ctrl + U (OS X为Cmd + U )便可。它在无不借助鼠标的状况下实现向上跳转一级。
十二、跳至下方的层级
既然能够向上跳转,凭啥不能向下呢?话虽如此,事实上,鲜有 IDE实现了这一功能,所幸IntelliJ就是其中的一个。除了提供跳转至父类的图标,IntelliJ一样提供一个可导航至子类对应方法的定义位置的 图标,因此,在IntelliJ的世界,可谓“上天入地”(up and down)无所不能。
若是想不用鼠标,并更快地导航至下层,那就使用快捷键Ctrl + Alt + B (OS X 为 Cmd + Alt + B for OS X)调用Implementations来实现吧,它将列出全部实现了当前类的子类让你挑选:
1三、方法层级图
那要是想查看有关全部实现或者覆写了当前方法的类的结构图呢?在IntelliJ中,有一个Method Hierarchy的功能,能够经过快捷键Ctrl + Shift + H (OS X 为 Cmd + Shift + H )来调用。这个功能让你能导航至全部符合这一关系的类中:
1四、图解菜单(Diagram popup)
咱们刚学习了一些在有关方法定义的层级结构中导航的门路。可能在某些时候还要在当前的类(或者说光标所处的类,不管它有多少的方法)的层次结构中使用导航。大多数IDE经过提供单个类或接口的层级结构,以实现这一需求。在IntelliJ里这种功能称为类型层级(Type Hierarchy),其快捷键为Ctrl+H。
如你所见,该功能返回一个树形结构。有些人可能以为这种格式难以理解,因此IntelliJ同时提供了另外一个称为Diagram popup——快捷键为Ctrl + Alt + U (OS X 为Cmd + Alt + U)——的功能,以UML图的方式替代树形结构来描述给定的类的层级结构:
不用提醒你就能知道,经过它咱们能够导航到任何由图形所表示的类或接口中。
1五、方法调用层级结构
除了类和方法定义的层级结构之外,咱们还有一个特殊的导航行为:在方法调用的层级结构中导航。每个方法会调用不少调用另外一些方法的方法,以此类推。这就是为何有时你须要导航到被当前方法所调用或者调用了它的方法中去。经过快捷键Ctrl + Alt + H来借助Call Hierarchy功能,即可让IntelliJ为你快速地呈现当前方法的调用层级结构:
1六、显示使用状况
导航到使用了光标指定的符号的位置,亦是一件常有的事。为了作到这一点,每一个IDE都会提供一个Find usages的功能。但这个功能的缺点在于,它一般实现得十分“笨重”——它不只要单独启动一个长时间运行的进程,还须要建立一个工具窗口来显示结果。为此IntelliJ提供了一个轻量级的解决方案——Show usages,其快捷键为Alt + Ctrl + F7 (OS X 为Cmd + Alt + F7 ):
这个功能以菜单的形式展现结果,而且默认状况下只在工程级别(Project level)的范围内运行。若是再调用一次该功能,其运行范围将扩充至工程和库级别(Project and libraries level)。
1七、最近编辑的文件
在前面的内容中我介绍了如何导航至最近访问的文件。那么若是我但愿在筛选出最近被编辑过的文件呢?在IntelliJ中只需经过快捷键Ctrl + Shift + E (OS X中为Cmd + Shift + E)调用Recently Edited Files功能便能轻易知足这一需求:
1八、在视图与控制器中间导航
你认为一个IDE只了解项目的文件中最基本的关系(如类的层次结构,测 试覆盖率,使用状况等)便够了吗?那些特殊的关系呢?按下Ctrl+ Alt + Home (OS X为Cmd + Alt + Home),便可借助IntelliJ IDEA 提供的Related symbol的功能,让你可以得到基于这些特殊关系(如在Sping MVC、Grails、甚至JavaFX应用的views和controllers之间)的导航功能。
1九、导航至特性视图控制器(View controller)
既然IntelliJ可以弄清项目中的一些特殊关系,那么它还具备哪些专用的导航功能呢?若是你是一个Web App开发者,能够经过输入与view controller相关联的URL,调用Go to a symbol功能,快捷地找到它:
20、数据库相关导航模式
IntelliJ的那些数据库工具也提供特殊的导航行为。在数据库工具窗口中,调用Go to a symbol,并键入表(table)的名字,便能快速地跳转至表中:
若是在一个表或者一个列(column)中使用Find usages功能,IntelliJ便将展现全部引用了它的表:
更让人欣喜若狂的是,IntelliJ能够根据主键的使用状况,将你导航到其它表中。好比,你能够要求IDE显示在其它表中,哪些行引用了当前行的主键值:
2一、书签
我 们接着来看看最后一个重要的行为——经过书签导航导航至任何你感兴趣的位置。IntelliJ提供了很是方便的工具实现这一功能。按下F11,即可将当前 的位置在书签表中添加(或删除)。一旦完成添加操做,你便能在gutter里看到一个相应的图标。以后,每当想返回保存为书签的那个位置,按一下 Shift+F11,而后从列表中选择便可:
总结
但愿这篇文章让你初步了解了如何利用IntelliJ强大的导航功能,实如今本身工做的代码中快速地切换,以保证本身专一于代码之中。换句话说,若是能让本身在切换上所花的时间越少,你的生产效率就会越高。
另外,请记住——对本身所使用的IDE了解得更多,你的编程生活就会变得更加惬意。