这是一篇发布于 2017 年 7 月的 IDEA 快捷键笔记。当年 IntelliJ IDEA 已经改成年份命名(2017.1/2017.2),macOS Sierra 已是主流,⌘ / ⌥ / ⌃ / ⇧ 四个修饰键的组合在开发圈里基本达成共识。
文中的快捷键按当年笔记的视角整理——以「Mac OS X 10.5+」Keymap 为准(这是 IDEA 在 mac 上最常用的预设键位)。如果你在用其他 Keymap,按对应键位替换即可。
一、键位约定
在开始前,先把 mac 上的修饰键说清楚。JetBrains 全家桶在 mac 上的记号是:
| 符号 | 键名 | 等价 PC 键 |
|---|---|---|
| ⌘ | Command | Ctrl |
| ⌥ | Option / Alt | Alt |
| ⌃ | Control | Ctrl |
| ⇧ | Shift | Shift |
| ⏎ | Return / Enter | Enter |
| ⌫ | Delete(退格) | Backspace |
| fn | 功能键 | — |
IDEA 允许你换 Keymap(Preferences → Keymap),但本文按 Mac OS X 10.5+ 这个默认键位写——绝大多数 mac 用户的现状。
二、配置文件位置
摘自早期笔记的速查。
# IDEA 自定义 JVM 配置
/Users/<用户名>/Library/Preferences/IntelliJIdea<版本>/idea.vmoptions
# IDEA 日志
/Users/<用户名>/Library/Logs/IntelliJIdea<版本>/idea.log
当年 IDEA 还叫 IntelliJIdea2017.1 / IntelliJIdea2017.2 这种目录,结构清晰。如果需要排查启动参数或性能问题,看这两个文件最直接。
三、Postfix 模板(黑魔法)
摘自早期笔记。
Postfix 是 IDEA 的「后缀补全」——你写一个表达式,打个点 + 后缀,IDEA 自动展开成模板代码。比 Live Template(写前缀触发)更顺手,是当年很多人转投 IDEA 的核心理由之一。
| 后缀 | 适用对象 | 展开效果 |
|---|---|---|
100.for | 数字 | for (int i = 0; i < 100; i++) { } |
var.nn | 变量 | if (var != null) |
var.null | 变量 | if (var == null) |
boolean.else | 布尔值 | if (!boolean) |
boolean.if | 布尔值 | if (boolean) |
arr.iter | 数组/集合 | for (Var v : arr) |
Foo.new | 类名 | new Foo() |
var.return | 变量 | return var; |
var.sout | 变量 | System.out.println(var); |
var.synchronized | 变量 | synchronized (var) { } |
var.try | 变量 / 方法 | try { var } catch (Exception e) { } |
boolean.while | 布尔值 | while (boolean) { ... } |
实战对比
普通写法:
public void doSomething(User user) {
if (user != null) {
System.out.println(user);
}
}
Postfix 写法(先写表达式再补后缀):
user.nn {
user.sout
}
提示:在
if/while等控制流里写boolean.else还能反向操作。当年 Postfix 还不支持自定义(2017 年只有内置模板),需要自定义还是得用 Live Template。
四、编辑(Editing)
以下快捷键全部摘自早期笔记,按类别重新整理。
4.1 光标移动
| 快捷键 | 作用 |
|---|---|
| ⌥ + → | 向右跳一个单词或语句 |
| ⌘ + ← / → | 跳到当前行开头 / 结尾 |
| ⌘ + ← / → + ⇧ | 直接选到行开头 / 结尾 |
| ⇧ + ⏎ | 在光标位置下开新行(不管光标在行中何处) |
| ⌃ + ⏎ | 自动补全:行末加分号、自动结束代码 |
4.2 选择
| 快捷键 | 作用 |
|---|---|
| ⌘ + W | 逐级扩大选区(先选中单词,再扩到整行,再扩到方法体……) |
| ⌘ + ⇧ + [ / ] | 向上 / 向下选中到代码块开始 / 结束(配合粘贴板) |
| ⌥ + ⇧ + → | 向右按单词 / 段选 |
| ⌃ + ⌘ + G | 批量选中:在当前文件中所有出现该文本的地方添加光标 |
4.3 复制 / 删除
| 快捷键 | 作用 |
|---|---|
| ⌘ + D | 复制当前行(或选区) |
| ⌘ + ⇧ + V | 打开「最近复制过的缓冲区」,可粘贴前几次 ⌘+C 的内容(神器) |
| ⌘ + ⇧ + Delete | 退回到上次修改的地方 |
| ⌥ + ⌫ | 删除光标前的整个单词或中文句 |
| ⌥ + fn + ⌫ | 删除光标后的整个单词或中文句 |
| ⌃ + ⇧ + J | 将下一行合并到当前行行尾 |
4.4 注释 / 折叠 / 格式化
| 快捷键 | 作用 |
|---|---|
| ⌘ + / | 注释 / 取消注释当前行(按语言自动选 // 或 # 或 <!-- -->) |
| ⌘ + + / - | 展开 / 折叠代码块 |
| ⌘ + ⌥ + L | 格式化代码(对当前类、包目录都可) |
| ⌘ + ⇧ + U | 大小写切换(光标在单词上时全单词切换) |
| ⌥ + ⇧ + F | 把当前光标位置 / 选区添加到收藏(Favorites) |
4.5 编辑技巧
| 操作 | 方法 |
|---|---|
| 一列同位置编辑 | 按住 ⌥ 键下拉鼠标 → 进入「列编辑」模式 |
| 手动加行末分号 | ⌘ + ⇧ + ⏎ |
| 自动生成 getter/setter/构造方法/toString | ⌃ + ⏎ 触发代码生成菜单 |
实战小贴士:⌘ + ⇧ + V(剪贴板历史)是最被低估的快捷键之一。比如你刚刚在文档里复制了一段配置,需要在多个不同位置粘贴——常规 ⌘+V 只能粘贴最新一次,用 ⌘+⇧+V 弹出的历史列表可以精确选 5 分钟前复制的那条。
五、导航(Navigation)
摘自早期笔记。
5.1 文件 / 项目
| 快捷键 | 作用 |
|---|---|
| ⌘ + 1 | 打开左侧项目目录(Project 面板) |
| ⌘ + E | 打开最近打开过的文件列表 |
| ⌘ + F4 | 关闭当前打开的文件 |
| ⌘ + N | 打开符号列表(类成员 / 文件搜索) |
5.2 代码导航
| 快捷键 | 作用 |
|---|---|
| ⌘ + B | 进入声明(等同于 ⌘ + 左键) |
| ⌘ + U | 跳到父类(接口) |
| ⌘ + O | 重写父类方法(Override) |
| ⌃ + ⌥ + H | 查看方法被调用处(Call Hierarchy) |
| ⌘ + F12 | 显示当前类中的全部方法(Structure 弹窗) |
| ⌘ + G | 跳转到指定行 |
| ⌘ + ⌥ + ← | 退回到上一个光标所在位置 |
| ⌘ + ⌥ + → | 前进到下一个光标所在位置 |
| ⌘ + ⇧ + Delete | 退回到上次修改的位置(与编辑一节同源,再列一次) |
5.3 搜索
| 快捷键 | 作用 |
|---|---|
| ⌘ + ⌥ + ⇧ + N | 按方法名查找(Symbol 全局搜索) |
| ⌘ + F | 当前文件查找 |
| ⌘ + R | 当前文件替换 |
| ⌘ + ⇧ + F | 全局查找(Find in Path) |
| ⌘ + ⇧ + R | 全局替换(Replace in Path) |
| ⌥ + F3 | 逐个往下查找相同文本并高亮显示 |
5.4 高亮选中
| 快捷键 | 作用 |
|---|---|
| ⌘ + ⇧ + F7 | 高亮显示当前文件中所有出现选中文本的位置(按 Esc 取消) |
实战小贴士:⌘ + ⇧ + F7 配合 Esc 取消,是临时阅读代码最舒服的方式——一眼看到当前变量/方法在文件里被用了几次,看完按 Esc 立刻消失,不污染视图。
六、重构(Refactor)
| 快捷键 | 作用 |
|---|---|
| ⌘ + ⌥ + C | 把选中的表达式提取为常量(Constant) |
| ⌘ + ⌥ + V | 提取为局部变量(Variable) |
| ⌘ + ⌥ + F | 提取为成员变量(Field) |
| ⌘ + ⌥ + M | 提取为方法(Method)—— 重构最常用 |
| ⌘ + F6 | 移动(Move)/ 重命名文件、类、方法 |
| ⇧ + F6 | 重命名(Refactor → Rename)—— 所有引用同步更新 |
| ⌘ + ⌥ + O | 优化 import(删除无用、按字母排序) |
实战小贴士:当年很多人不知道 ⇧ + F6 和 ⌘ + R 的区别。⇧+F6 是「重命名」——所有引用同步改;⌘+R 是「文本替换」——只改当前文件。改类名/方法名一定要用 ⇧+F6,否则一堆调用方会变成 NPE 大军。
七、运行与调试(Run / Debug)
摘自早期笔记。
7.1 调试
| 快捷键 | 作用 |
|---|---|
| F8 | Step Over:下一步(不进入方法) |
| F7 | Step Into:进入方法 |
| ⌥ + F9 | Run to Cursor:运行到光标位置 |
| F9 | Resume:恢复程序,若有下一个断点则跳到那里 |
7.2 运行
| 快捷键 | 作用 |
|---|---|
| ⌃ + R | 运行(运行上次的 main / Spring Boot / Test) |
| ⌃ + D | Debug 模式运行 |
| ⌘ + ⇧ + F10 | 选择运行配置并启动 |
当年(2017)还没有 ⌘+R / ⌘+D 这种直白键位(那是后年才加入的),都是 ⌃+R / ⌃+D 这种老 Keymap。
八、Postfix 模板与 Live Template 的区别
很多新手会把这两个混在一起,它们是 IDEA 两个不同的补全系统:
| 维度 | Postfix | Live Template |
|---|---|---|
| 触发位置 | 在表达式后打点 + 后缀 | 在空行/前缀上输入缩写 |
| 适用场景 | 给已有变量快速加逻辑 | 生成整段代码骨架 |
| 例子 | user.sout → System.out.println(user) | psfi → public static final int |
| 自定义 | 2017 年还不能自定义 | Settings → Live Templates 可自由加 |
当年最常用的 Live Template 速记:
sout=System.out.println()、psvm=public static void main、fori=for (int i = 0; ...)。
九、IDEA 启动慢的解决
摘自早期笔记,原文是「未尝试方法三」。
在 idea.vmoptions 中加入:
-Djava.net.preferIPv4Stack=true
强制 JVM 使用 IPv4 栈(当年 macOS 上 IPv6 解析问题会导致 IDEA 启动时卡住)。
完整 vmoptions 调优还可以考虑:
-Xms/-Xmx(堆内存)、-XX:ReservedCodeCacheSize(代码缓存)、-XX:+UseG1GC(G1 垃圾回收器)。但当年 2017.1 默认参数对大多数项目已经够用,不建议新手一上来就改。
十、推荐设置:代码补全不区分大小写
摘自早期笔记。
Preferences → Editor → Code Completion,把 Case sensitive completion 设为 None。
效果:string、String、STRING 都能匹配到 java.lang.String。强烈建议打开——Java 类名遵循大驼峰,原本输 S 就想出 String,开了之后输 s 也能出。
十一、IDEA 的其他 mac 友好特性
2017 年的 IDEA 在 mac 上还有几个值得记住的特性:
- Touch Bar 支持(2016 款 MacBook Pro 之后):F8 / F9 / 调试按钮直接出现在 Touch Bar 上
- macOS 全屏模式:⌃ + ⌘ + F 进入全屏,⌘ + ` 在同应用的多个窗口间切换
- Spotlight 集成:⌘ + Space 打开 Spotlight,输入应用名快速启动(虽然不直接是 IDEA 快捷键,但和「快速进入 IDEA」相关)
- iTerm2 + Oh My Zsh:当年 mac 开发者的标配终端组合,配合 IDEA 外部终端配置(Preferences → Tools → Terminal)
十二、给 2017 年读完这篇的你
IDEA 的快捷键不是靠背的,是靠肌肉记忆——刻意用一周,比背一遍表有用得多。建议路径:
- 第 1 周:只练编辑类(⌘+D / ⌘+W / ⌘+⇧+V / ⌘+/)
- 第 2 周:加上导航类(⌘+B / ⌘+O / ⌘+E / ⌘+⇧+F)
- 第 3 周:加上重构类(⇧+F6 / ⌘+⌥+M / ⌘+⌥+V)
- 第 4 周:加上调试类(F7 / F8 / F9 / ⌥+F9)
- 第 2 个月起:开始自定义 Keymap——把不顺手的键换成自己顺手的
一年后回头看,你不再需要鼠标。这是 IDEA 老炮的标志。