跳转到主要内容
重构 菜单提供 IntelliJ IDEA 的各项重构,快捷键也和 IDEA 一致。大多数重构由文件的语言服务器完成,所以能用哪些取决于语言:重命名几乎处处可用,而提取方法、内联、更改签名只在服务器提供时出现。如果光标处无法执行某项重构,会有提示说明原因(例如“Cannot perform refactoring. Select the code to extract”)。

重构此项

重构此项… 只列出在当前光标或选区处适用的重构:先是下表中的重构,然后是语言服务器在此处提供的其他重构(例如 TypeScript 的“Convert to arrow function”)。

可用的重构

重命名

1

开始重命名

把光标放在名称上,按 ⇧F6 / Shift+F6。名称会变成可在原地编辑,文件中的其他出现位置随输入同步变化。
2

完成或取消

按 ↵ / Enter 或 ⇥ / Tab 在整个项目中应用重命名,按 Esc 恢复原名。
3

需要更多选项时用对话框

再按一次 ⇧F6 / Shift+F6 改为打开重命名对话框。
如果改动涉及多个文件,或者会重命名、移动文件,写入之前会先显示预览,列出受影响的文件,点击 执行重构 确认。如果服务器可能漏掉了一些用法(例如项目还在加载),预览会给出说明,按钮变为 仍然重命名。 没有运行中的语言服务器时,只能根据语法树重命名局部变量;成员、类型和其他跨文件的符号要等服务器就绪。

引入与提取

引入变量、引入常量、引入字段、引入参数 和 提取方法 的用法相同:
  1. 选中表达式或语句。只放了光标时,会弹出光标周围的表达式供选择,在列表中移动时对应的表达式会被高亮。
  2. 如果表达式出现了多次,选择只替换这一处还是全部替换(找到多个匹配项)。
  3. 接着在原地编辑新名称,↑ / ↓ 在推荐名称之间切换,↵ / Enter 确认。
语言服务器帮不上忙时,引入变量和引入常量仍能在情况明确时根据语法树完成,否则会给出提示并拒绝执行。

移动、复制和重命名文件

在项目视图中,重命名…(⇧F6 / Shift+F6)、移动…(F6、拖放或剪切后粘贴)和 复制…(F5、复制后粘贴,或按住 ⌥ / Alt 拖动)会打开对话框。勾选 搜索引用 后,支持此功能的语言服务器会更新对该文件的引用(例如 TypeScript 的 import);在注释和字符串中搜索 会把注释和字符串也算进去。改动会先显示预览。 在编辑器中对符号执行 移动…,会调用该语言服务器的移动重构(如果有的话)。

安全删除

1

开始

把光标放在声明上按 ⌘⌦ / Alt+Delete,或在项目视图中对文件使用 安全删除…。
2

确认

确认删除,可以选择同时搜索注释和字符串。
3

检查用法

如果符号仍被使用,会弹出 检测到用法,可以选择 查看用法、仍然删除 或 取消。没有用法时,声明连同它的文档注释和注解一起删除,整体算一步撤销。

上拉成员与下推成员

用于在 Java 类和它的父类或子类之间移动字段和方法。在对话框中选择成员和目标类;移动会引起的问题会先在 检测到问题 中列出,再决定是否继续。这两项由 OpenIDEA 自带的 Java 扩展提供,其他语言不可用。

撤销

一次重构就是一步撤销,即使它改了多个文件。多文件重构完成后,通知中会提供 撤消(撤销后变为 重做)。

限制

  • 除了重命名、安全删除和基于语法树的兜底实现,其他重构都需要语言服务器运行并提供相应功能。缺少时先看状态栏的 语言服务 微件。
  • 只有当服务器把签名重写作为代码操作提供时,才会出现更改签名。
  • 这个菜单里没有结构化搜索替换;见 代码检查 中的 编辑 › 查找 › 结构化替换…。