vim 和 emacs 的圣战相信大家并不陌生。很多人对这两款编辑器爱不释手,有一个很大的原因是,它们通过多种插件和快捷键,可以完全脱离鼠标操作,并且效率更高。
但在平时工作中,相比 vim 或 emacs,我始终认为好的 IDE 才是第一选择,因为 IDE 做好了各种功能的集成,节约了我们自己调教 vim、emacs 的时间。
IDEA 是我心目中毫无疑问的最好 Java IDE(没有之一)。但平时观察发现,大多数同学使用 IDEA 时,在鼠标和键盘键频繁切换,效率不免大打折扣。因此总结了一些平时我对 IDEA 键盘操作的实践,以供大家参考,希望能有所帮助。
本文中涉及的快捷键基于 IDEA 的默认快捷键配置(Mac OS 10.5+)。
窗口和视图切换
以我个人的使用经验来说,最常用的视图和窗口切换的快捷键操作有:
- 多个窗口间切换:
⌘\
或
⌘⇧` ` - 多个编辑器间切换:顺序切换
⌘⇧[
或⌘⇧]
,切换到上一个或下一个⌘[
或⌘]
,类似于⌘⇥
的 switcher⌃⇥
- project 视图:
⌘1
- debug 视图:
⌘5
(run 为⌘4
,但相对不如 debug 常用) - 版本控制视图:
⌘9
- 焦点由视图返回编辑器:
⎋
- 打开其他常用视图:
⌘⇧E
或⌃⇥
以上这些操作,基本可以概括 90% 以上的使用场景,完全避免鼠标操作。
另外要单独一提的是,大多数 IDEA 中不能输入的视图、弹出框等场景下,可以通过直接键入内容进行搜索,用上下箭头选择确认。如在 project 视图中,可以通过这个操作,快速定位到某个文件夹。
打开文件
强烈推荐的两种打开文件方式
- 打开类:
⌘O
- 打开所有类型的文件:
⌘⇧O
打开 Java 文件时强烈建议仅使用⌘O
,这将极大的减少筛选文件的范围,尤其是在项目中有大量配置文件的情况下。
不建议使用双击⇧
(打开 search anywhere),一方面可能和第三方中文输入法中英文切换键冲突;另一方面搜索范围太广,筛选不如上面两种方式高效,默认情况下 ⌘O
和 ⌘⇧O
只搜索项目代码内的文件,当项目内匹配不到关键字或再次按下相同的快捷键时,搜索范围才会扩大到引用的包。
此外,⌘⇧E
可以打开弹框,可以很方便的选择最近编辑过的文件。
对于 Java,IDEA 提供了完整的文件间导航
- 调用和定义间跳转:
⌘B
- 从声明跳转到实现:
⌘⌥B
- 跳转到父类/方法:
⌘U
编辑器操作
编辑器中的光标定位
最广为人知的方法就是通过查找定位:
- 编辑器中通过
⌘F
唤出搜索框 - 键入关键字,按上下箭头定位到目标位置
- 按
⎋
退出搜索,光标定位到关键词末尾
下面介绍几种同样很实用的定位方式。
通过结构定位
几乎所有常用的文件格式都可以通过这种方式定位,包括不限于 Java,XML,properties,HTML/JavaScript/CSS。
通过⌘F12
,唤出当前编辑状态的文件结构。通过搜索可以快速定义到 Java/Javascript 的方法和属性,XML/properties/HTML/CSS 的节点。
通过行号定位
试想以下场景:查看生产环境日志中打印了一个错误信息,显示 *ErrorClassName * 类的 veryLongMethodName 方法抛出了一个异常,具体行数是 300。
怎么样最快的定位到代码的这个位置呢?首先通过⌘O
打开类,这一步应该没什么疑问。接下来怎么做呢?通过⌘F
或者⌘F12
找到这个方法吗?如果方法名前缀重复较多不利于索引筛选,或者方法体过长,定位到最终目标都要废很大劲。
我推荐的做法是,定位到类后,通过 ⌘L
直接输入行号进行定位。在某些知道列号的场景下,输入 行号 列号
还可以直接将光标定位到更准确的位置(按提示可使用 行号:列号
,但冒号显然不如空格输入方便)。
精准定位
当我们通过以上的一种或几种方式,将期望的光标位置放到了可视区域中,多数同学可能会通过鼠标直接点击或者箭头移动。但既然我们的目标是抛弃鼠标的同时进行高效操作,这些方法当然不能够满足。
这里推荐插件AceJump
。它实现了类似emacs
的 Ace-Jump-Mode。大致步骤如下:
-
⌃;
进入AceJump
模式,光标当前位置会出现高亮。 - 输入要定位的文本。在依次键入的过程中,匹配当前键入的位置会有高亮并且显示相应 tag。
- 键入 tag 的内容光标定位到该 tag 位置。
如当前可视区域中,我想将光标移动到「varName」前,首先进入 AceJump
模式,然后依次键入「varName」。理想情况下,键入 v 后,由于命中数量较少,tag 为单个字符,此时再键入该 tag,就完成了一次定位。相比方向键移动,效率提升很多。
使用时有三点需要注意:
-
AceJump
支持全文索引,但跳转到可视范围外需要的操作相对繁琐,因此建议使用上述的其他方式先移动到可视区域。 - 同样是基于以上理由,如果硬件配置不够好,在大文件中(如文件有上千行时)不推荐使用。
- 由于光标默认移到关键词前,所以想要定位准确,最好用目标位置后的内容作为关键词。
模糊定位
假设一时间还没办法习惯这些定位技巧,仍然习惯用方向键定位,不妨试试这样操作:
- 用
⇞
&⇟
快速地上下移动光标( mac 原生键盘使用fn↑
&fn↓
) - 用
⌥←
&⌥→
快速地左右移动光标
编辑文件
介绍完窗口、视图、文件的导航,接下来的重头戏就是内容编辑了。所有平台通用的复制粘贴就不再赘述了。下面介绍一些我认为较为常用的往往被大家忽视的、可以替换鼠标操作的编辑快捷键。
- 弹出提示:
⌘↩
,最实用的快捷键之一,尤其当有错误或警告时可以按照 IDEA 的建议进行快速修改(当然 IDEA 的建议不一定是对的)。 - 生成代码:
⌘N
,最实用的快捷键之一,快速生成构造函数、Getter/Setter、toString() 方法(代替这三者我认为更好的方案是lombok
)接口实现、单元测试等通用的代码片段。 - 选中整个单词:
⌥↑
,代替双击单词(实际上是选中上一级文字,选中单词后再次使用会选中语句,再次使用会选中更上一级代码块,以此类推)。 - 注释/取消注释:
⌘/
- 复制整行:
⌘D
- 删除整行:
⌘⌫
- 上 / 下移整行:
⌥⇧↑
或⌥⇧↓
- 格式化内容:
⌥⌘L
运行调试
照例介绍几个最常用的快捷键:
- 切换 Run Configuration:
⌥⌃D
- 启动运行:
⌃R
- 启动调试:
⌃D
- 停止运行 / 调试:
⌘F12
- 添加 / 删除当前行的断点:
⌘F8
。小心不要误操作在方法上加上断点,旧版的 IDEA 中,方法断点会非常消耗性能。 - 到下一断点:
⌥⌘R
- 单步:
F8
- 步入:
F7
,如果当前行有多个方法调用,会按执行顺序进入方法内部,通常需要搭配跳出⇧F8
使用。
版本控制
同样,以 Git 为例,80% 的操作可以通过下面几个快捷键完成。
- pull:
⌘T
。要注意的是在 Git 下只会从当前本地分支关联的远程分支拉取 - commit:
⌘K
。遗憾的是,默认的 commit 行为会提交整个 changelist,要提交单个文件还得自己手选。 - push:
⌘⇧K
以上当然只是 CMS 操作中极少的一部分。但考虑到 coding 中对 CMS 的操作明显不如其他操作高频,另一方面我们也可以在设置中对自己常用的操作设置新的快捷键,这里
小结
以上是我在工作中最常用到的快捷键。作为一篇入门教程,所列举的这些快捷键并不全面。毕竟最佳的实践方案,是根据自己的使用习惯,在 Setting > Keymap
中设置自己最常用、最顺手的快捷键组合。
最后留几个默认的快捷键给感兴趣的同学尝试。
⌥F1
⌘⇧U
-
⌘⌥⇧[
&⌘⌥⇧]
⌘Y
完