这篇文章受到 IntelliJ 官方插件 IDE Features Trainer 的启发,学习一个编辑器应该归类,从不同的操作学习。从基本的编辑,到代码导航,再到辅助,到重构,重要的不是学习这些快捷键,而是学习可以怎么样做,并且用这样的思考方式用到不同的编辑器中。

Mac 上常见的四个快捷键对应关系,简单的可以将 Alt 对应 Mac 下的 Option,而在 Mac 下 Cmd 和 Ctrl 被人为的分隔开来,Cmd 大多数与GUI相关,Cmd+Q退出应用,Cmd+W关闭一个Tab,而Ctrl和终端相关,Ctrl+a则是跳转到行首,Ctrl+e跳转到行尾。然后和Shift,Option结合就能组合成非常多常用的功能。Windows下不足的一个地方就是将 Win 键的功能单一化了,大部分的情况下Win 键是鸡肋。

另外 Shift 可以认为是一个相反的操作,比如 Cmd+Tab 是切换应用,那么 Cmd+Shift+Tab 就是反向切换应用。再比如在 IntelliJ IDEA 中 Cmd+z 是 undo,那么 Cmd+Shift+z 就是 redo,撤销之前的撤销。

Basics

一个编辑器基本的操作,包括复制,剪切,粘贴,选择,多点选择,折叠代码块等等。而关于复制,剪切,粘贴 IdeaVim 已经完全满足需求,不需要用 IntelliJ 内置的任何命令。

Selection

选择,块选择,本来 Vim 的选择模式也已经足够强大,不过 IntelliJ 提供了如下两个方式相较于 Vim 的块选稍微强大一些。

  • Alt + Shift + Up 扩展选择区块
  • Alt + Shift + Down 缩减选择区块

原来 Vim 的块选,比如想要选择某一个方法,大致可以使用 vap,或者选择花括号内容 vi{ 等等,在非常清楚需求的情况下非常方便,但是比如有些时候不想选择整个段落,想要可视化的选择一些代码块,不妨试试上面两个快捷键。

Collapse

代码的折叠与展开,倒是不复杂。

  • Ctrl -/+ Collapse/Expand a code region
  • Ctrl Shift -/+ Collapse/Expand all regions in a file

Multiple Selections

多选,比较常见地一种场景就是变量重命名,当然有些时候比如编辑 html 时批量替换某些标签,有很多方法可以实现,比如变量重命名功能,或者批量替换,又或者使用 vim 的 dot 命令。

  • Alt + j 选择光标下的内容
  • Alt + j 选择下一个
  • Alt + Shift + j 取消选择最后一个
  • Ctrl + Alt + Shift + j 选择文件中所有出现的字符

IntelliJ 当然也提供了很多方式,上面提到的只是其中的一种。

Generate

生成一些模板方法,默认的快捷键是 Cmd+n, 自动生成构造方法,toString 方法,get-set 方法,或者 override 方法等等。

Live template

Refactorings

Rename 重命名

批量重命名,很有用的快捷键,必须知道。

  • Shift + F6

借助 IdeaVim 在我的配置文件中, 我把 ,+r 映射成了变量重命名:

nnoremap <Leader>r :<C-u>action RenameElement<CR>

Extract Variable/Field 提取变量

Ctrl + Alt + V

Extract Method 提取方法

个人对方法提取用的还是比较多的,重构代码或者重新规划代码时非常有用。

  • Ctrl + Alt + M 提取选择到方法
  • Ctrl + Alt + C 提取选择到 Constant
  • Ctrl + Alt + P 提取选择到参数

Code Assistance

Formatting

格式化,对于格式化的要求应该在任何保存的时候进行格式化,应该在提交代码前强制进行格式化。当然用快捷键时不时的格式化一下也可以。

  • Ctrl + Alt + L

Parameter Info

显示参数

  • Ctrl + P

Quick Popups

  • Ctrl + Q
  • Esc
  • Ctrl + Shift + I 查看光标下方法定义

Editor Coding Assistance

  • F2 遍历错误
  • Ctrl + F1 查看错误明细
  • Ctrl + Alt + T 在选择区域周围嵌套代码。

Vim 插件已经能够做到非常好的在单文件内浏览了,无论是上下,或者翻页,或者查询特定变量,方法。如果要做到查询方法的父类或者接口就不得不借助 IntelliJ 自身的快捷键。

我借助 IdeaVim 插件的魔力,将常见的代码流量都映射成了 g 开头的操作,比如跳转到超类就是 go to super, 快捷键就是 gs

Jump to Source

在阅读代码时有几个操作经常会用到:

  • 查看接口或者抽象类的具体实现 Ctrl + T
  • 跳转到超类 Ctrl + B Super method
  • 查看当前方法被调用的地方 Ctrl + G
  • 跳转到类实现 F3

Next/Previous Occurrences

个人使用 Vim 的 *np 基本满足了查询当前字符串的需求,所以这里也就不列举 IDE 自带的快捷键了。

IntelliJ 独有的功能快捷键

Search Everywhere

全局搜索,默认的快捷键是 Shift + Shift, 这是一个非常有用的快捷键,可以搜索 IntelliJ IDEA 内部的功能,同时也可以模糊搜索项目代码文件,执行任务,跳转等等。

Intention Action

默认的快捷键是 Alt+Enter

Editor 内快速跳转到 Terminal

默认的快捷键是 Alt(Option)+F12

Invoke refactoring

重构代码,会弹出一个功能选单 Refactor this,在这个功能选单中可以做如下事情。

停留在变量上,方法名,类名上:

  • rename, 重命名光标下的变量名, 方法名,类名
  • change signature, 改变方法签名
  • copy class, 复制类
  • move class, 移动类

整理总结

Cmd 系列

快捷键 功能描述
Cmd+q Q退出应用
Cmd+c/v/x copy/paste/cut
Cmd+z  
Cmd+w close Tab
Cmd+e recent file
Cmd+n generate
Cmd+o file structure

Ctrl 系列

快捷键 功能描述
Ctrl+a/e 行首行尾
Ctrl+n/p next line/Previous line
Ctrl+b go to super class
Ctrl+g find usage
Ctrl+h find in path
Ctrl+Option+b go to implements