本文为零散的功能点分享, 所以并不会面面俱到
图片很多也很大, 注意流量
图中涉及敏感信息较多, 所以有打码, 可能会影响观感, 见谅!
这个叫[Action...]
, 掌握了这个快捷键, 就等于掌握了所有快捷键。例如重构, 输入refactor this:
全局搜索:
格式化代码:
甚至支持fuzzy search:
所以, 即便你懒到无可救药, 也请你一定要记住这个快捷键
由于大家使用的系统不一样, 以及本人对许多快捷键作了修改, 后文涉及到的所有操作都会用类似于[Find in Path]
这样的格式标出。只要将方括号内的字符串(的一部分)输入到上图中的框内, 就可以完成相关动作。同时, 可以在mac系统上可以直接看到它的快捷键。
实际上IDEA内置了一份常用快捷键pdf文档, 输入action: [Keymap Reference]
即可查看。
这是本人使用频率最高的快捷键之一, 但似乎在windows下的键位非常难按, 建议改一下。重构将在后文重点介绍
页面左上方是当前文件的路径, 可以每一个都可以点击进入
右上方则是几个最常用的按钮(可以在设置里面自己定制, 不展开)
功能则分别是:
[Run Anything]
(最新功能, 双击Ctrl呼出, 但因为太新了, 没接入几个java相关的功能, 不好用)- build
- 选择run configuration, 也就是选择要启动什么东西(tomcat/main方法启动类/springboot工程等等)
- 启动/调试/代码覆盖率测试/profile/concurrency diagram(这两个没用过, 不懂..)/停止
- 更新git(后文详述)/commit/从版本库中查看历史文件/revert代码
- 项目结构(太复杂了, 本文不涉及)
[Search Everywhere]
(双击shift呼出)
重点: 这几个按钮会在mac的touch bar上出现。
左右两边以及底部就是tool window的标签,单击可以打开(废话)。但其实有更优雅的方式: 标签上有个数字, cmd(win下为alt)+数字就可以直接打开或关闭这个窗口
使用完窗口之后, 不需要鼠标单击, 直接按escape键就可以回到编辑窗口。
有人说看不到这几个标签按钮, 按两下cmd(win下为alt), 第二下按住, 就能看到了, 建议把这个功能去掉, 截图的这个选项勾上就可以了:
有一个非常迷但是还蛮好用的功能叫split mode。表面上看tool分为左右下三部分, 但其实每一边都被分成了两部分, 所以其实有六部分。以左边为例:
Structure勾选了split mode, 则标签被安排在了左下方, project没勾选split mode, 则在左上方。其唯一的区别是, 在同一边的不能同时显示, 不在同一边的就可以分列显示:
其余同理, 还有floating mode, windowed mode, 字面就看得出来啥意思, 自己实验吧。
接下来就按主题分块介绍
上面的截图再放一遍:
首先最常见的当然是Project窗口, 这里只讲一个, 一个我相见恨晚的按钮:
按这个可以迅速定位到当前正在编辑的文件所在位置。
Structure就不详细介绍了, 浏览代码的时候可以查看所有成员变量/方法等, 以及可以快速定位。上面的按钮选项也很有用, 可以自己试一下。
包括了文件/类/符号(field/method), 甚至Action..
不过稍微大一点的项目就不是很实用了, 因为搜索结果太多了
个人最常用的也就个search:
- 文件: cmd+shift+o
[File...]
- 类: cmd+o
[Class...]
快捷键分别是cmd+f/cmd+shift+f, 有这几个选项:
[Replace...]
& [Replace in Path...]
与前者快捷键很相似, cmd+r/cmd+shift+r
实践过程中发现正则表达式的一个高级特性非常重要: 零宽断言(不展开)
例如我们打算把掉user1/user2/user3替换成client1/client2/client3, 就可以这么做(没看懂就好好复习一下正则吧):
IDEA也开始支持了sublime一类编辑器提供的功能: 批量选中编辑
不过好像前端的同学更习惯于这种模式。
搜索的filter选项比较实用, 可以选定搜索上下文, 是代码, 字符串还是注释:
可以全部替换, 也可以一个个换, 也可以排除掉几个再全部替换
[Replace in Path]
也差不多, 注意多了一个file mask选项, 以及四个选择范围的选项卡(自己研究去吧):
如果打算慢慢替换, 可以点击Open in Find Window, delete键排除:
结果如下
记得左下角的favorate标签吗?打开来长这样
favorate有点鸡肋, 跳过不讲, 这里重点讲讲bookmark
[Show Bookmarks]
, [Toggle Bookmark]
我自定义了快捷键, 分别是ctrl+b和ctrl+鼠标单击
显示所有书签之后, 就能看到所有书签以及其对应的代码位置, 还可以进行标记, 可以说很贴心了。
整一个流程就是这样的:
[Back]
cmd+'['/[Foward]
cmd+']' 代码前进/后退[Select Previous Tab]
cmd+shift+'['/[Select Next Tab]
cmd+shift+']' 上一个/下一个tab- 代码左侧子类父类导航
实际上IDEA的基本操作就已经十分方便了:
[Generate]
cmd+n 看图自然懂得
代码补全分为[Base Completion]
(ctrl+space)和[Smart Completion]
(ctrl+shift+space)
重点: 只要填写驼峰首字母就可以了, 不用写全, 比如toString直接打ts即可
smart completion的特点是基于类型的补全, 在填写枚举的时候比较实用
重要 最好取消勾选 match case:
自动补全以及显示参数(cmd+p)
这可能是普通人想也想不出来的需求, 比较强大, 动图里展示最常用的几个操作:
- .var (提取变量)
- .for
- .if
- .par (括号包围)
还有一个.field提取成员变量, 频率稍低。其实还有很多, 自己去实验吧
这是体现intelliJ"智能"的一个功能: intention, 往往与inspection配合出现, 后者为一些代码优化点的标识, 如标黄、波浪线等, 而前者则为对用户意图的猜测, 不仅限于优化点, 也包括一些用户可能需要的操作, 包括重构、language inject等。
这个比较多 就不详述了, 总之在编码与重构的时候刻意使用intention能够节约一些时间, 例如:
看图。
foreach, 不过和postfix completion一比就相形见绌了
在用字符串编写一些代码的时候(例如SQL), 容易出现拼写错误、语法错误等问题。在字符串处触发intention即可, 效果如下:
提供的补全还算流畅:
如果事先在[Database]
中加入了相关的数据库配置, IDEA还会根据数据库的schema进行错误提示:
ReGex:
发现一个intention:
java: 使用前
使用后(不过也仅限于词法分析级别的注入)
重构的操作非常多, 快捷键也很多。但只用记一个[Refactor This]
就够了:
rename就不解释了, change signature:
提取操作除了前面提到的提取参数外, 还可以提取至local变量/常量/成员字段。
此外, 除了与变量相关的提取, 还有提取到接口/父类以及提取到方法等常用重构。这里结合日常需求展示一下method:
字面意思:
有意触发intention可以实现一些重构的目的, 这里仅举两例:
前面添加参数事实上意味着要使用这个参数, 那么就可以有意的触发intention:
上图同时覆盖了提取变量/成员字段的重构。
避免写接口与实现时重复编写签名, 以及避免编写返回类型(尤其在返回类型很复杂时适用):
其实类似的操作有很多, 原理都是利用IDEA会通过以来分析推测用户的可能产生的意图, 达到辅助的目的。
基本上看一下就能知道是干啥的, 框选的按钮比较实用, 选中之后, 在合并分支的提交之后, 优先显示合并分支的提交
选中前
选中后
可以迅速看出分支合并的情况
和重构一样, 版本管理部分可以只记忆一个快捷键[VCS Operations Popup]
(好像默认是没快捷键的):
打开后长这样:
不过IDE窗口右上角的Update按钮, 在这里没有..
不用讲了, 和git命令的逻辑一样
实际上update经历了一下过程:
- stash, 将未提交的修改暂存, 保证本地仓库clean
- fetch, 拉取远程所有分支
- 如果当前分支绑定的远程分支有新提交, 则merge(有冲突则弹出merge窗口手动操作)
- unstash, 有冲突则弹出merge窗口
尽量避免在公共分支上修改代码, 则可以避免不必要的merge操作
如果不想合并当前分支绑定的远程分支, 但又想要合并其他分支, 则不能update, 而是fetch, 然后将其他分支合入。
如遇到紧急bug, 但是如果此时手头在其他分支, 而且有大量未提交代码, 就需要暂存当前工作:
如果bug是改一行配置就能解决的, 或者确定不会产生影响, 可以不用新建分支, 否则需要新建一个fix分支, 修复bug后将fix分支合入(如有)
接下来就是还原之前的工作:
可勾选pop stash, 成功unstash之后这个stash会被删除
断点可以右键:
点击more统一管理以及详细配置(基本上覆盖了所有需求):
图中所示的其实是spring boot的run dashboard, 左侧竖排按钮分别是:
- |
- run模式重启
- debug模式重启
- 停止
- |
- update(热部署)
- |
- 继续
- 暂停
- 显示所有断点(和前面的窗口一样)
- mute(暂时关闭断点监听)
右上角几个按钮:
中间几个就不介绍了 左1: 跳转回当前断点所在位置 右2计算器: 在断点所在上下文计算表达式 最右: Stream API调试, 后面讲
最右边两个按钮, 分别可以查看断点命中统计, 以及堆空间内的对象
中间的栈帧、线程、变量就不多说了
说出来你可能不信, 远程调试非常简单
第一步, run configuration里新建Remote
第二步, 填写相关参数: ip、port、启动类, 把生成的启动项复制下来
第三步, 将复制的启动项加入到远程jvm
第四步, 启动调试
注意 这个操作有一定危险性, 一定不要把这个启动项传播到线上!!
热部署是一个重要功能, 可以避免重启, 合理使用的话, 可以显著减小debug时间, 适合以下场景(仅为举例):
- 拼写错误
- sql语句调试
- restTemplate调试(结合表达式计算不断尝试)
- 请求参数修正
- 响应解析失败先查看body(Dto.class换成String.class)
以前用过tomcat的热部署, 需要稍微配置下, 贴个文档, 不详细介绍了: https://blog.csdn.net/wei19880402/article/details/75529231
springboot其实原生支持热部署, 在idea的run configuration里稍微修改下就能启用
这样单击update按钮(不是git那个)就能更新类文件
也可以使用on frame deactivation, 文件修改的时候就触发, 但是个人不推荐, 因为太过频繁更新可能导致不稳定, 而且在修改过大的时候(例如添加新方法)会导致交换类文件失败, 不注意的话很容易搞不清到底会执行啥代码
收费, 没用过, 买不起
- 对注解等无效
- 无法添加新方法, 修改方法签名
- 不要过分信任这个功能, 过于复杂的修改后后update, 可能会导致无法预期的行为
新版本更新了一个惊为天人的功能
敏感信息太多, 自己研究下吧= =