扔掉鼠标,提高效率。 本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;
你好,我是方向盘(YourBatman)。笔者的公号是保留地,只分享原创,不转载、不发商务广告!
春节快乐,阖家幸福! 今天,你能阅读完这篇技术文吗?
上篇文章(【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(操作系统、终端篇))向jar人们介绍了笔者在操作系统、终端层面经常使用的一些快捷键,本文继续,上主菜:IntelliJ IDEA
快捷键。
在Java开发者中,一直存在着很多鄙视链。如(前者bs后者):
就笔者自己来讲,算是一个IDEA快捷键重度依赖患者,一个在IDEA里不使用快捷键,几乎没法工作的选手。
各行各业从业人员都有自己吃饭的“饭碗”,对于一枚Java程序员来讲,这个吃饭的家伙毫无疑问是:IntelliJ IDEA
。
几乎每个软件或多或少都会有快捷键,由此来提高使用效率。几乎每个人都愿意相信快捷键是能够提高效率的,但常常还是一个鼠标走天下。
鼠标,鼠标,还是tm的鼠标。
诚然,鼠标是现代计算机不可或缺的外设。它极大程度降低了使用计算机的门槛,但作为各自领域的专业人士,追求效率应当:重(双手操作的)键盘,轻(单手操作的)鼠标。
本文将以IDEA为例,笔者分享自己在使用快捷键上的一些实战心得。
说明:每个软件的快捷键,(没有冲突的情况下)保持默认是最好的,十分不建议自定义
关于IDEA快捷键模板这块,笔者得承认自己是走了好几年“弯路”的,经验教训在这里分享出来。
如下图所示,这是笔者很长时间(2017-2021长达4年之久)使用的快捷键模板:基于Eclipse快捷键模板的私人定制版。
下面对这两个“关键词”进行解释解释。
对于大多数新生代程序员(2016年之后入行)来讲,Eclipse大概率只听过但没用过,那值得恭喜:没有快捷键切换的包袱。
IntelliJ IDEA相较于Eclipse是后起之秀,早已成为JVM生态IDE领域绝对霸主。如下图所示(2021年统计的结果):JVM圈最受欢迎的IDE,IntelliJ IDEA可谓遥遥领先。
IDEA超越Eclipse有几个关键时间点,留个印象:
奈何笔者入行较早,2015年8月就已入行(开始使用基于Eclipse的STS),2017年8月入职新公司才首次接触到IntelliJ IDEA。2年,你知道这2年我怎么过的吗?
这2年经过不断操练,Eclipse快捷键早已成为肌肉记忆,难以“摆脱”。
2017年入职新公司必须使用IntelliJ IDEA的时候,碍于工作压力,我毅然决定沿用Eclipse的快捷键习惯,该决定便是我走弯路的开始。
当初为何没有选择适应IntelliJ IDEA而选择沿用Eclipse的快捷键呢?这可能就是没有逃脱人性的弱点喽:舒适区。
回头想想,这是一个只看到短期收益而忽略了长期价值的决定,是不明智的。如果上天再给我一次机会,我觉得正确的做法是:短期内(比如半年内)先沿用Eclipse的快捷键方案以确保入职新公司后不会因为IDE问题而让开发效率打折扣,但之后(比如半年以后)对公司业务、人员比较熟悉后,能腾出时间了就一定要记得回归“正道”,全面拥抱变化。
笔者目前情况:已全部切回IntelliJ IDEA原生方式(默认的Mac OS快捷键模板),可喜可贺😄。
每个IDE都提供自定义快捷键的能力,IntelliJ IDEA自然也不例外。所以,我在这里又走了弯路:自定义了很多快捷键。
我自定义了不少快捷键,好处是:自个用起来更顺手。但缺点非常明显:在其它人电脑上,我就像个“盲人”。
自定义虽好,但也不要贪用哦。个人经验,若真需要DIY快捷键,那么:只做增加,不做修改,以保持和别人的最大公约数不会改变,自然也就拥有更好的“兼容性”。
说明:快捷键表面看起来是私有行为,但其实它的普适性也是非常重要的
接下就是“正文”了,笔者将自己常用的一些快捷键分享出来,供你参考。按照功能大类,分别展开。
在我眼中,这部分最重要的。
查找的重要性不言而喻,如何能快速定位到自己想要的类、文件、地点,将能直接体现出对IDEA的熟练程度,自然也会节约你非常非常多的时间。
Action Name | Key |
---|---|
Find Action… | command + shift + A |
上来就放大招:终极导航。一般的快捷键是执行某个Action,而它是查找Action,只需知道Action Name就能通过它(间接)导航过去,并且还帮你显示了对应快捷键哦。
说实话,此快捷键笔者使用得并不多,毕竟通过它得经过2步才能“到达”目的地,但它对“新手”是很友好的,所以也推荐一下。
Action Name | Key |
---|---|
Go to Class… | command + o |
IntelliJ IDEA里笔者认为最最最常用的快捷键,甚至没有之一。
command + o
在整个操作系统层面都具有非常明确的语义,所有用户都知道不需要“教训”。该快捷键在IDEA里被定义为查找/打开类,足矣见得它的高频性和重要性。
其实,不仅仅是IDEA,IntelliJ旗下的其它IDE产品都赋予了command + o
非常重要的语义,如:goland和DataGrip
Tips:这种查找方式只匹配类名/表名/go文件名,不关心里面的内容,所以检索速度非常非常非常快。
有时候需要打开某个二方、三方库里的某个类的源代码,使用command + o
找对应的类可能找不到:如ArrayList
默认情况下command + o
检索的scope范围是:Project Files(当前工程)。上图可以看到(当前工程)没有找到ArrayList,IDEA非常“智能”的告诉了你如何去做:将搜索范围改为All places
。
说明:具有确定性的搜索结果能给予用户最好的使用体验,而并非检索出来一大推结果还需人工二次筛选,(无法盲操作)大大降低效率。确定性一般通过缩小检索范围 + AI人工智能推测来实现,IntelliJ IDEA就是这么做的,很高级
将搜索范围改为All places
有两种做法:
command + o
可以实现Project Files和All Places的自由切换,非常方便。另外,还有一个查找小技巧是模糊搜索,也很常用。比如你在检索时是否遇到这种情况:
举个栗子,要打开EntityManagerFactoryDependsOnPostProcessor
这个类,我的做法是只在搜索框里这么输入就可以迅速打开我想要的:
说明:从Eclipse迁移过来的小伙伴喜欢使用*
这列通配符去模糊匹配,在IntelliJ IDEA里就duck不必这么做了,因为它足够智能(当然你写*
也是阔以的)。
非常非常非常多同学在查找/打开类时有个使用误区:使用File in Files
搜索一切,就像这样
对于这样的结果,你不觉得乱花渐欲迷人眼么?如果你也是这么做的,那么从看到笔者这篇文章开始就默默的改正哈。
问题来了,这两种检索有什么区别呢?
总结:如若你现在还使用Find in Files来进行打开类的话,会发现可能90%都是干扰项,觉得还能提高效率嘛?那你还会继续使用吗?
Action Name | Key |
---|---|
Go to File… | command + shift + o |
它用于根据文件名查找/打开文件。
可以看到,它会将文件的后缀名也显示出来。理由很简单:它检索的是文件,文件,文件(后缀名不一样就是不同文件)。
我再“变个戏法”以加深理解:
可以看到,“同样名称”的.java
和.class
文件都被搜到了,这就是查找文件的“强大之处”。
一般来讲,shift功能键是同类功能做加强,这里应该能体会到吧
笔者眼中的最佳实践:找类用command + o
,而command + shift + o
专用来找配置文件(当前project或者lib包内)、普通文件。
Action Name | Key |
---|---|
Go to Symbol… | command + option + o |
理解这个快捷键的关键,在于理解什么叫Symbol(符号),笔者根据自己的使用经验,尝试帮你总结一下,包括:
非常“强悍”有木有,总而言之,能够成为类的一部分的都可以通过它找到,这得益于Java强类型、静态语言的特性,用好了可大大提效,谁还说Java语言编程没有脚本语言快呢?
Tips:这个检索的内容虽然多,但速度也还是非常快的。道理很简单:结构化的元素找起来就是快。
Action Name | Key |
---|---|
Go to Test | command + shift + t |
光标定位在类内部的任何位置,可快速跳转到对应的测试类or快速创建该类的测试用例。
如果你也“喜欢”写UT,保证代码质量,相信这个快捷键能节约你不少时间。
类似于全文查找,功能强大。
Action Name | Key |
---|---|
Find… | command + f |
Replace… | command + r(查找并替换) |
Action Name | Key |
---|---|
Find in Files… | command + shift + f |
Replace in Files… | command + shift + r(查找并替换) |
是查找当前文件的加强版(所以看到没,加了shift功能键)。
Tips:默认情况下也只会在当前项目(In Project)下查找。如上图所示,Scope也是可调整的哈
这个快捷键因为“强大”,被很多同学误用。正所谓通用性和精确性往往不可兼得,建议专键专用。再提醒一次:不要误用,不要误用,不要误用
查找代码是个很宽泛的说法,比如说我们经常需要知道这个类/变量在哪些地方被用到了、类的继承结构是怎么样的、在哪儿申明的…这些都可认为是查找代码的范畴。
Action Name | Key |
---|---|
Find Usages in File… | option + F7 |
注意:这个快捷键不是command组合哟
选中类元素(类、接口、变量、属性、方法…),按此快捷键可以显示出该元素在哪些地方被使用到了。
这种窗口方式对于某元素被很多地方使用的时候比较有好,因为可以分工程、分jar包、分目录的进行展示,清晰明了,一般用于查找中大型框架里面的引用情况(如Spring框架、MyBatis框架等)。
但是,对于我们自己书写的一些元素,毕竟不太可能被很多地方用到,这个时候使用下面的列表形式可能更为合适。
Action Name | Key |
---|---|
Show Usages… | command + option + F7 |
这种方式显示的信息没有那么的全,所以快捷性更强,操作方便。
笔者的习惯是,使用它为主,使用上面的窗口形式为辅。
Action Name | Key |
---|---|
Go to Declaration or Usages… | command + b |
该快捷键有两个作用:
option + command + F7
现在知道笔者为何喜欢使用列表形式了吧,因为大部分情况下这一个快捷键搞定:声明、使用两大功能,岂不快哉。
Tips:该快捷键功能同鼠标操作的 按住command + 鼠标单击。即使如此,还是建议,远离鼠标,远离鼠标,远离鼠标
Action Name | Key |
---|---|
Go to implement(s)… | command + option + b |
注意:接口的实现、类的继承都属于该范畴。这里笔者以一个抽象类为例:
若某接口/类的实现有多个,则会弹窗让你选择,否则(只有一个实现)就直导航过去了。当然喽,若没有任何实现,就会弹窗提示说没有任何实现。
Tips:该快捷键功能同鼠标操作的 按住command + option + 鼠标单击。即使如此,还是建议,远离鼠标,远离鼠标,远离鼠标
请注意本功能和上面的“元素声明处/使用处”的区别哈,前者要求必须要有继承/实现关系,后者只需有使用就能查找到(毕竟,继承/实现也属于一种使用嘛)。
Action Name | Key |
---|---|
Type Hierarchy | control + h |
某些复杂的场景,某个类的继承关系相当的多,这个时候通过层次/树的方式来查看是最好的。
该快捷键很好的对上面的command + option + b
(实现)形成了补充:
command + option + b
即可快速导航Action Name | Key |
---|---|
File Structure | command + F12 |
结构就相当于“解刨”,该快捷键可以快速看到某个类的所有元素,包括:所有成员、所有方法。
说明:加入某个类的结构元素很多,那在下面的窗口方式查看更为合适。
Action Name | Key |
---|---|
File Structure | command + 7 |
该窗口上面附有工具栏,可格局需要进行展示、隐藏、展开、排序等操作,非常方便。
其它导航并非不重要,而是不方便分大类,所以列为其它吧。
Action Name | Key |
---|---|
Last Edit Location | command + shift + delete |
这个快捷键巨好用且非常智能。
比如你在浏览了其它代码、框架源码若干时间后,不知道自己写到哪了,使用它即可一键召回。按1次回到上次编辑处,按2次回到上上次,3次就是上上上次,依此类推…
Tips:IDEA会记住你最近编辑的地方,所以能快速回去。但是,一旦重启IDEA就会清空“记忆”哈
你可能会问有没有Next Edit Location
(下一次修改)的功能,答案是有的,但IDEA默认并没有帮你绑定快捷键,笔者估计是IDEA觉得(大部分场景下)这可以使用前进、后退快捷键代替,让使用者可以少记忆一个吧。
Action Name | Key |
---|---|
Next Highlighted Error | F2 |
Previous Highlighted Error | shift + F2 |
当一个类里错误较多时,使用该快捷键可快速定位错误所在地,非常方便和快速。
用鼠标操作看似问题不大,但谨记咱们的目标:尽量的脱离鼠标。
Action Name | Key |
---|---|
Back | command + [ 或 command + option + ← |
Forward | command + ] 或 command + option + → |
这两个快捷键非常非常非常常用,不解释。
Action Name | Key |
---|---|
Go to Line:Column | command + l |
快速定位到当前文件的行、列位置。
该快捷键最常见的使用场景:
使用此快捷键可快速定位到错误处,非常方便。
Action Name | Key |
---|---|
Move Caret to Line Start | command + ←或者option + a |
Move Caret to Line end | command + →或者option + e |
还记得操作系统级别的行头、行尾快捷键吗?回忆一下下图:
IDEA因为处在编辑框里,因此针对性的提供了响应快捷键。
Tips:总结来看,回到行头/行尾的快捷键有好几个了,具体使用哪个?根据个人习惯使用即可
另外,还有些基础键可结合(以上快捷键)一起使用:
21世纪的今天,没有导航软件,如同盲人?在IDEA里亦是如此,没有(快捷键)导航,使用的效率将大打折扣。
本文主要介绍了IDEA快捷键—导航篇,提纲挈领了一下,剩下的就是练习,练习,再练习了!快捷键没有任何技巧性,练就完了!假期里多操练几遍,你就是下一个高手。
下篇继续介绍Intellij IDEA的实用快捷键。那,咱们下篇再见!