在前面的文章里,我介绍了IntelliJ IDEA(以下称IntelliJ)中与代码补全及重构相关的特性。今天我将介绍另外一个利器——IntelliJ的导航(Navigation),只要运用得当,它将节约你大把的时间。

作为一个IntelliJ的用户,你应先明确一点——IntelliJ是用来让你专注于代码的工具。只有这样我们才能充分利用并享受它的魔力。因此,大部分的时间里你应该专心工作于代码编辑器中,仅把导航当做在不同位置的代码间快速切换的好帮手。

本文旨在介绍IntelliJ的导航在工程文件(project files)、代码块(block of code),及工具窗口(tool window)、编辑器标签等UI元素上的特性。

1、最近编辑的文件

如果停下来仔细分析你所有的导航行为(Navigation Pattern),你会意识到,在大部分的时间里你只固定的一些文件上工作。这就很好地解释了为什么Recent files是IntelliJ用户的常用特性。一旦能熟练使用它,你就会将其逐渐引入到你大部分的导航操作中去。而使用这一特性只需使用快捷键Ctrl+E(OS X为Cmd+E)。

请注意,该功能默认选中最后访问的文档,所以只需使用回车或者鼠标单击便能跳转到此文件。如果想减少列表中的候选项,则可以借助Speed Search 功能——输入目标文件名中的一部分,列表将仅显示匹配项。

2、结构菜单(Structure popup)

另一个你每天都会做的,就是要在当前打开的文件中四处奔波,而文件有一个共性:它们有自己的文件结构。例如,一个Java的类文件含有字段和方等成员组成的结构。XML和HTML文 件包含一个标签树(tags tree)结构。如果想快速的导航到文件结构的某一部分,那就快按下Ctrl+F12(OS X 上为Cmd+F12)来选 择想跳转的地方吧。(同样的,Speed  Search亦可用于减少列表中的候选项)

有时,你对信息的需求可能会影响Structure popup中显示的内容。例如,一个Java类的结构图可能包含了与其相关的基类或接口的结构信息。不过在默认情况下,IntelliJ会隐藏它们,如果确实需要,那么再按一次快捷键即可。

IntelliJ会贴心地记录你在Structure popup中的操作偏好,并在下一次调用它时体现出来。

3、跳转至导航栏

通常,屏幕中只显示含代码的编辑器是一件喜闻乐见的事情。但也有人希望看到项目树(project tree),因为它有助于理解或者快速修改项目的上下文。 事 实上,在项目树和编辑器之间切换是IntelliJ中极其容易的事情。不过事实上,项目树并非最佳选择。老练的IntelliJ用户知道一个更好的替代 品:导航栏。新用户常以为那只不过是一个面包屑菜单(breadcrumb)罢了,但在有经验的开发者眼中,这可是一把瑞士军刀!按下快捷键 Alt+Home(OS X为Alt + ↖  )执行Jump to navigation bar的操作,我们就能感受到它的威力——利用它我们可以跳转至项目的每一处,可以创建和修改任一文件以及其他许许多多有意义的事情。

值得一提的是,即便在导航栏隐藏时,我们也可以执行此操作。

4、跳转至指定类

你可能会想:Go to a class这么一个简单的操作有什么好说的?也许你已经知道Ctrl+N(OS X中为Cmd+N)能够在类之间跳转,但不见得你就知道这个功能比它看起来强大得多。除了各家IDE都支持的简单通配符、驼峰式命名、包名前缀以外,IntelliJ还可以将中间名匹配(middle name matching)、行号后缀、快速文档、定义菜单(definition popups)等方法引入这一功能:

默认情况下,Go to a class功能的搜索仅会在你的项目中执行。若没有匹配项,再按一下快捷键,搜索将在项目引用的库中展开。

在IntelliJ中,我们完全可以不借用鼠标便轻易地执行类间跳转:当菜单出现的时候,输入或修改查询语句,最后利用键盘的上下键选择目标即可。若你曾试图在其他IDE中尝试这种方法,你肯定知道我在说什么。

5、跳转至指定的文件或目录

当你需要打开项目中特定的文件,利用快捷键Ctrl+Shift+N(OS X中为Cmd + Shift + N )是个不二的选择。除了实现其基本的功能外,你还可以借由通配符、驼峰式命名以及目录名前缀等方法进行搜索。

6、跳转至指定符号

终于要介绍Go to…特性家族里的最后一位重要成员了——Go to a symbol。 通过快捷键Ctrl + Shift + Alt + N (OS X为Cmd + Shift + Alt + N ),便能在不用全文搜索(full-text search)的情况下导航到指定的符号处。因为IntelliJ会一直维护项目及库中所有符号的索引,所以无论项目规模多么庞大,它依旧可以在通过相应 表达式在几秒内轻易地找到匹配的方法或字段。

7、在…中选定

如果需要在特定的工具窗口(如Project/Changes View,甚至Explorer/Finder)中选定正在编辑的文件,那么通过快捷键Alt+F1来使用Select in…的功能是再方便不过了。

8、切换至指定的工具窗口

IntelliJ的大多数工具窗口都分配了简单的快捷键组合。通过快捷 键,你便能快速呼出对应的工具窗口并使其获得焦点。在工具窗口获得焦点时再按一次快捷键,工具窗口将会隐藏,你便能返回编辑器上工作啦。这种方法实在是方 便,更重要的是,它让你完全摆脱了鼠标——每当需要某一个特定的工具窗口或者想返回编辑器,按快捷键就好了。

确保你至少能记住以下几个快捷键:

  • Project工具窗口:Alt + 1 (OS X中为Cmd + 1)
  • Changes工具窗口:Alt + 9(OS X中为Cmd + 9)
  • Terminal工具窗口:Alt + F12

9、返回编辑器

很多人都不知道IntelliJ的一个小窍门——按下Escape就能返回编辑器。当你使用这种方法时,此前被呼出的工具窗口仍保持其可视状态。当然啦,如 果你不想看到这些窗口,按下快捷键Ctrl + Alt + F12(OS X为Cmd+ Alt + F12)即可。

(译注: 在本地测试时该快捷键对应File Path,而Shift+F12才是正确的快捷键)

10、跳转至关联的单元测试

当你正在编写代码,特别是想同时确保代码顺心如意,常用的导航功能是什么呢?当然是在类和对应的单元测试中来回切换啦。IntelliJ可以识别每一个类所关联的测试,并且提供Go to a test的工能。按下Ctrl + Shift + T (OS X 为Cmd + Shift + T),便能在它们之间来去自如:

如果在使用这一功能的类没有相关联的测试,则IntelliJ会好心地帮你生成一个。

11、跳至上方的层级

另 一个常见的行为是,你会为了某个类或者其某个方法,需要浏览该类的层级结构。在大多数IDE中,你能看到一个图标出现在与方法定义处于同一行的 gutter里(译注:gutter即编辑器左侧的窄条,可见特性21)。通过点击这个图标,就导航到了父类(或接口)中该方法定义的位置。除此以 外,IntelliJ独创了一个叫Super Method的功能,按下快捷键Ctrl + U (OS X为Cmd + U )即可。它在无不借助鼠标的情况下实现向上跳转一级。

12、跳至下方的层级

既然可以向上跳转,凭啥不能向下呢?话虽如此,事实上,鲜有 IDE实现了这一功能,所幸IntelliJ就是其中的一个。除了提供跳转至父类的图标,IntelliJ同样提供一个可导航至子类对应方法的定义位置的 图标,所以,在IntelliJ的世界,可谓“上天入地”(up and down)无所不能。

如果想不用鼠标,并更快地导航至下层,那就使用快捷键Ctrl + Alt + B (OS X 为 Cmd + Alt + B for OS X)调用Implementations来实现吧,它将列出所有实现了当前类的子类让你挑选:

13、方法层级图

那要是想查看有关所有实现或者覆写了当前方法的类的结构图呢?在IntelliJ中,有一个Method Hierarchy的功能,可以通过快捷键Ctrl + Shift + H (OS X 为 Cmd + Shift + H )来调用。这个功能让你能导航至所有符合这一关系的类中:

14、图解菜单(Diagram popup)

我们刚学习了一些在有关方法定义的层级结构中导航的门路。可能在某些时候还要在当前的类(或者说光标所处的类,无论它有多少的方法)的层次结构中使用导航。大多数IDE通过提供单个类或接口的层级结构,以实现这一需求。在IntelliJ里这种功能称为类型层级(Type Hierarchy),其快捷键为Ctrl+H。

如你所见,该功能返回一个树形结构。有些人可能觉得这种格式难以理解,所以IntelliJ同时提供了另一个称为Diagram popup——快捷键为Ctrl + Alt + U (OS X 为Cmd + Alt + U)——的功能,以UML图的方式替代树形结构来描述给定的类的层级结构:

不用提醒你就能知道,通过它我们可以导航到任何由图形所表示的类或接口中。

15、方法调用层级结构

除了类和方法定义的层级结构以外,我们还有一个特殊的导航行为:在方法调用的层级结构中导航。每一个方法会调用很多调用另一些方法的方法,以此类推。这就是为什么有时你需要导航到被当前方法所调用或者调用了它的方法中去。通过快捷键Ctrl + Alt + H来借助Call Hierarchy功能,便可让IntelliJ为你快速地呈现当前方法的调用层级结构:

16、显示使用情况

导航到使用了光标指定的符号的位置,亦是一件常有的事。为了做到这一点,每个IDE都会提供一个Find usages的功能。但这个功能的缺点在于,它通常实现得十分“笨重”——它不仅要单独启动一个长时间运行的进程,还需要创建一个工具窗口来显示结果。为此IntelliJ提供了一个轻量级的解决方案——Show usages,其快捷键为Alt + Ctrl + F7 (OS X 为Cmd + Alt + F7 ):

这个功能以菜单的形式展示结果,并且默认情况下只在工程级别(Project level)的范围内运行。如果再调用一次该功能,其运行范围将扩充至工程和库级别(Project and libraries level)。

17、最近编辑的文件

在前面的内容中我介绍了如何导航至最近访问的文件。那么如果我希望在筛选出最近被编辑过的文件呢?在IntelliJ中只需通过快捷键Ctrl + Shift + E (OS X中为Cmd + Shift + E)调用Recently Edited Files功能便能轻易满足这一需求:

18、在视图与控制器中间导航

你认为一个IDE只了解项目的文件中最基本的关系(如类的层次结构,测 试覆盖率,使用情况等)便够了吗?那些特殊的关系呢?按下Ctrl+ Alt + Home (OS X为Cmd + Alt + Home),即可借助IntelliJ IDEA 提供的Related symbol的功能,让你能够获得基于这些特殊关系(如在Sping MVC、Grails、甚至JavaFX应用的views和controllers之间)的导航功能。

19、导航至特性视图控制器(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显示在其它表中,哪些行引用了当前行的主键值:

21、书签

我 们接着来看看最后一个重要的行为——通过书签导航导航至任何你感兴趣的位置。IntelliJ提供了非常方便的工具实现这一功能。按下F11,便可将当前 的位置在书签表中添加(或删除)。一旦完成添加操作,你便能在gutter里看到一个相应的图标。之后,每当想返回保存为书签的那个位置,按一下 Shift+F11,然后从列表中选择即可:

总结

希望这篇文章让你初步了解了如何利用IntelliJ强大的导航功能,实现在自己工作的代码中快速地切换,以保证自己专注于代码之中。换句话说,如果能让自己在切换上所花的时间越少,你的生产效率就会越高。

另外,请记住——对自己所使用的IDE了解得更多,你的编程生活就会变得更加惬意。

原文链接:  dzone  翻译:  ImportNew.com  -  elviskang

译文链接: http://www.importnew.com/15462.html

IntelliJ IDEA导航特性Top20相关推荐

  1. 将vim变得简单:如何在vim中得到你最喜爱的IDE特性

    原文出处:这里 摘要: 开源的vim文本编辑器提供许多灵活而强大的功能,但是vim自身是很难被配置使用的,在本教材中,我们将向你显示通过几个简单的方式使得你的vim具有集成开发环境IDE的行为 vim ...

  2. Delphi Code Editor 之 几个特性

    Delphi Code Editor有几个特性在编写大规模代码时非常有用.下面分别进行介绍: 1.Code Templates(代码模板) 使用代码模板可把任意预定义代码(或正文)插入到单元文件中.当 ...

  3. IntelliJ IDEA 中文官方文档

    目录 认识IntelliJ IDEA IntelliJ IDEA 安装和设置 IntelliJ IDEA如何使用 IntelliJ IDEA中不容错过的快捷键 IntelliJ IDEA专业的使用技巧 ...

  4. 在VS 2010中查询和导航代码

    为什么80%的码农都做不了架构师?>>>    [原文地址]Searching and Navigating Code in VS 2010 (VS 2010 and .NET 4. ...

  5. 时空数据可视化_穿越时空的可视化4陆地导航的上半生

    时空数据可视化 從陸地導航的歷史設計,圍繞朝聖.郵驛.商隊的旅行和導航需求,了解信息設計在實際導航運用中所扮演的角色. 从陆地导航的历史设计,围绕朝圣,邮寄,商队的旅行和导航需求,了解信息设计在实际导 ...

  6. 「 机器人学 」“Human-aware机器人导航技术”浅谈

    一.前言 Human-aware机器人导航是人机交互和运动规划的交叉研究方向,它同时考虑机器人导航问题和导航时与环境中的行人交互问题. 二.Human-aware机器人导航应用领域 机器人引导问题.机 ...

  7. 组合导航的简单介绍和应用

    组合导航 介绍 总体介绍 特点 应用领域 介绍 总体介绍 组合导航是指综合各种导航设备,由监视器和计算机进行控制的导航系统.大多数组合导航系统以惯导系统为主,其原因主要是由于惯性导航能够提供比较多的导 ...

  8. 组合导航的介绍和应用

    介绍 总体介绍 组合导航是指综合各种导航设备,由监视器和计算机进行控制的导航系统.大多数组合导航系统以惯导系统为主,其原因主要是由于惯性导航能够提供比较多的导航参数,还能够提供全姿态信息参数,这是其他 ...

  9. 在ASP.NET 2.0中建立站点导航层次

    站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局.默认的站点导航提供程序是基于XML的,但是你 ...

最新文章

  1. [BZOJ2693]jzptab
  2. python 统计list中各个元素出现的次数
  3. angularJS前台传list数组,后台springMVC接收数组
  4. java中菜单分几级_JavaWeb三级菜单分类查询详解
  5. 查询数据库中所有表名
  6. 基于java ssm springboot女士电商平台系统源码+文档设计
  7. oracle mseq,一次RMAN备份报错的诊断过程(一)
  8. python如何创建一个列表,在python中创建一个由列表索引的字典
  9. 业内对楼市回暖时间几成共识:尚需一年
  10. python中sqrt函数用法_Python : sqrt() 函数
  11. 猫哥教你写爬虫 044--模拟浏览器-作业
  12. poj2287田忌赛马
  13. Java实现 | 基于朴素贝叶斯的情感词分析
  14. 新年第一天 | 恶补新一季《黑镜》的同时,营长又深入扒了扒它那擅长机器学习的新爸爸是如何赚钱的
  15. 软件架构--架构设计的整体介绍
  16. 有奖调研 | 让虚拟照入现实的完美AR开发平台长什么样?
  17. 拍摄独特人像的技巧(下)
  18. SpringSecurity,jwt oathu sso,YeZiJie
  19. 省级森林防火应急指挥系统
  20. html车票查询表单,火车票订单查询系统

热门文章

  1. 【采用】机器学习在金融大数据风险建模中的应用
  2. 获香港证监会颁发牌照的弘量研究,正用智能投顾帮助金融机构降低成本,提升资产管理能力 By 藤子2017年10月09日 17:16 撰文 | 藤子 2015 年,雷春然和黄耀东都是在香港科技大学的
  3. 机器学习(二) 如何做到Kaggle排名前2%
  4. Growth Hacking背后,数据分析平台的架构调整
  5. 没好域名?就得给自己换个名
  6. 史蒂夫·乔布斯很懂团队建设
  7. 催收成本在单体经济中的分析
  8. 将pdf转换html_pdf文件怎么转换成html网页格式?用什么方法来转换?
  9. 解决Mac上VSCdoe断点失效问题
  10. Java 8 - 收集器Collectors_实战