IntelliJ IDEA 使用技巧汇总

> 有部分内容来自网络,一般都有注明出处,如若侵权,请联系我删除,谢谢!

> 文章的图片来自github的图床,图片链接存在github图床(https://raw.githubusercontent.com),该地址可能需要翻墙才能访问,所以图片可能存在加载不成功的情况。

# HOTKEY

## Usage Search(使用查询)

key | desc

- | -

cmd+opt+F7 | 搜索文件中用法,以弹窗方式显示

opt+F7 | 全局搜索引用

cmd+shift+F7 | 高亮显示当前代码域使用到的地方

F3 or shift+F3 | 搜索当前文件的模式下,按向下 or F3跳到下一处,按向上 or shift+F3跳到上一处

tab or tab+shift | 在ctrl+shift+f全局搜索的时候,可以通过tab和来移动输入聚焦,可以脱离鼠标来选择右上角的File mask

## Editing(编辑)

key | desc

- | -

cmd+P | 显示方法的参数,这个方法的强大之处在于,展示了参数之后,在写入传参的时候,弹框会一直存在,让参数更加直观

cmd++ | 展开折叠的代码

cmd+- | 折叠代码

shift+上下方向键 | 有时候用vim插件的jk上下移动太慢了,而且又不能明确知道要用emacsIdeas调整到哪里,可以用idea自带的shift+上下方向键来快速上下移动代码

## debug

key | desc

- | -

cmd+shift+F8 | 查看断点信息

shift+F7 | 智能步入,断点所在行上有多个方法调用,会弹出进入哪个方法

^+F5 | 重启debug服务

cmd+F2 | 终止debug服务

^+cmd+W | 将Add to Watches绑定快捷键,可以快速查看变量或者表达式的值

## Spring Boot 微服务

cmd+8 弹出多个微服务的启动控制窗口,可以通过上下左右移动快速定位到某个微服务,通过快捷键^+shiftF10 Runing,或者通过^+shift+F9 Debuging

## General(通用)

key | desc

- | -

^+cmd+F | 切换全屏模式

^+cmd+C | 清理控制台的日志之类的,需要再keymap里面设置Other | Clear All

## Refactoring(重构)

key | desc

- | -

F5 | 复制文件到指定包路径

F6 | 移动文件到指定包路径

opt+cmd+m | 提取代码为方法

opt+cmd+c | 提出代码为常量

opt+cmd+v | 提出代码为变量

opt+cmd+f | 提出代码为成员变量

opt+cmd+p | 提出代码为方法的形参

opt+cmd+o | 快速去掉多余的import

## Navigation(导航)

key | desc

- | -

alt+F1 | 跳转到当前代码文件很多相关的功能(强大)

cmd+u | 前往当前光标所在方法的父类的方法 / 接口定义

cmd+b | 进入定义处

cmd+opt+b | 进入实现处

cmd+o | 查询当前类可以继承实现的所有方法

cmd+F12 | 展示当前文件的结果大纲(可用于查询变量、方法等)

^+shift+B | 跳转到类型声明处,可以直接从类变量跳到对应的类里面

F12 | 返回前一个工具窗口

shift+esc | 隐藏当前或最后一个活动的窗口,且光标进入代码文件窗口

opt+F1 | 显示当前文件选择目标弹出层,弹出层中有很多目标可以进行选择(如在代码编辑窗口可以选择显示该文件的 Finder)

⌃H | 显示当前类的层次结构(在类的任何地方可以快速跳转到父类、父接口、子类)

^+opt+H | 显示所有调用的层次结构

^+h | 显示类的所有子类型的相关内容

shift+F4 | 在新窗口打开文件

^+F2 | 可以快速跳到idea的菜单栏,然后通过方向键和enter,可以快速进行一下菜单栏的操作,这个快捷键适合其他软件

^+opt+cmd+N | 跳到next method,这个是我自定义的

^+opt+cmd+P | 跳到previous method,这个是我自定义的

跳到光标所在方法的方法名 | 先^+opt+cmd+N再^+opt+cmd+P,如果是最后一个方法就反之

# PLUGIN(插件)

## emacsIdeas 最强大没有之一

> 注意如果和IdeaVim一同使用的话,类似^+W的快捷键要更改,不然会和IdeaVim的屏幕分割快捷键冲突了

#### jump

- Plug-ins | emacsIDEAs | AceJumpSelect      选中当前位置到某个字符

- Plug-ins | emacsIDEAs | HighlightPrevSymbol 高亮跳到上一个一样的字符

- Plug-ins | emacsIDEAs | HighlightNextSymbol 高亮跳到下一个一样的字符

#### emacsIdeas copy

- Plug-ins | emacsIDEAs | AceJumpCopy.Block      复制特定代码块到当前光标(可以是函数里面的整个形参定义)

- Plug-ins | emacsIDEAs | AceJumpCopy.Line        复制特定行到当前光标

- Plug-ins | emacsIDEAs | AceJumpCopy.Quote      复制特定的引用到当前光标,比如某个引号里面的内容

- Plug-ins | emacsIDEAs | AceJumpCopy.String      复制特定的代码到当前光标,一般是某块前后由空格隔开的代码

- Plug-ins | emacsIDEAs | AceJumpCopy.ToLineEnd  从当前位置复制到行尾

- Plug-ins | emacsIDEAs | AceJumpCopy.ToLineStart 从当前位置复制到行首

- Plug-ins | emacsIDEAs | AceJumpCopy.Paragraph  复制某个特定段落,比如类的某段注释

- Plug-ins | emacsIDEAs | AceJumpCopy.Group      复制某块代码,可以使某个判断的条件+整个花括号{}里面的内容

#### emacsIdeas delete

- Plug-ins | emacsIDEAs | AceJumpCut                  从当前位置剪切到某个位置

- Plug-ins | emacsIDEAs | AceJumpDelete.Block        删除特定的代码块

- Plug-ins | emacsIDEAs | AceJumpDelete.Line          删除特定的代码行

- Plug-ins | emacsIDEAs | AceJumpDelete.Quote        删除特定的引用代码,比如某个引号里面的内容

- Plug-ins | emacsIDEAs | AceJumpDelete.String        删除特定的二个空格之间的字符

- Plug-ins | emacsIDEAs | AceJumpDelete.Word          删除特定的某个变量方法名(紧挨在一起的代码标识)

- Plug-ins | emacsIDEAs | AceJumpDelete.ToLineEnd    从当前位置删除到行尾

- Plug-ins | emacsIDEAs | AceJumpDelete.ToLineStart  从当前位置删除到行首

- Plug-ins | emacsIDEAs | AceJumpDelete.Paragraph    删除某个特定段落,比如类的某段注释

#### emacsIdeas cut

- Plug-ins | emacsIDEAs | AceJumpCut  从光标当前位置剪切到某个位置

#### emacsIdeas more

AceJumpMove模式,各种快捷键的变种和上面的一样.etc.

## ideaVim

yy 复制当值当前行,或者选中后y复制,然后输入数字n,再输入p,代表连续粘贴n次。

gg 快速移动到文件的开头

G  快速移动到文件的结尾

## CamelCase

opt+shift+u 可以对字符进行驼峰式的不同格式变换,非常实用。

## Grep Console

安装该日志插件,控制台的日志输出可以更加直观,还可以自定义颜色。

## spring assistant(yml或者properties文件编写提示)

编写yml配置文件的时候,可以自动提示,但是这个自动提示貌似自会提示Spring Boot的基础配置,如果是在配置中心的话,其他的第三方依赖配置要在配置中心引入其spring-boot-starter的依赖才能自动提示对应的配置。

***如果对应的依赖引入了之后还不会自动提示,那就需要再idea的模块配置里面将自定义的配置文件加入到配置文件的类别中,如下图:***

![](https://raw.githubusercontent.com/coding-by-feng/oss/master/uPic/EpjOSE.png)

选择右边的第一个Configuration Files,因为通常配置中心新增的都不会是Bootstrap类别的配置文件,如下图,然后点击下面的绿色按钮,也就是最后一个按钮

![](https://raw.githubusercontent.com/coding-by-feng/oss/master/uPic/RWKXhb.png)

再点击下面的+号,选择对一个的yml或者properties,然后确认就ok了。

## RestfulToolkit

这个插件可以自动收集项目的Restful风格的接口,还可以在idea里面直接填写参数调用接口

## MyBatis Log Plugin

自动打印Mybatis的每一个SQL,有时候我们要抽取SQL不是很方便

## Free Mybatis plugin

Mapper与Mapper XML映射之间的调整,方便代码的跟踪查看。

而且还可以自动通过Mapper的方法矫正或者生成Mapper.xml的每个xml节点

# Others(其他)

## 修改包名要注意的地方

修改了包名之后注意在编译输出的目录要清空之前的老的class,不然可能会引起意想不到的冲突。

## 有没有更加智能化的API注释查看方法,比如鼠标+cmd的方式就完整地将注释都展示出来?

ctrl+J

可以搜索keymap需改热键,Quick Documentation

## debug的时候变量的多种不同的View

在Variables右键要跟踪的变量,可以view text,或者view as 其他类型.

## Performance enhancements(性能增加)

idea吃内存确实是有点恐怖,对于调大内存,网上基本都是说调整idea.vmoptions里面的这三个参数:

```

-Xms1024m

-Xmx3000m

-XX:ReservedCodeCacheSize=1024m

```

但是我自己是基于2019.02的版本,发现即使调整了之后重启,idea右下角的内存显示还是原来的Max。

其实要这样调整才能真正生效:

Help->Edit Custom VM Options

打开这个会发现里面的配置还是原来的,在这里更改再重启,右下角的内存Max才会变大,才能生效。

## cmd+shift+A按第二次的时候老是换出Terminal

https://intellij-support.jetbrains.com/hc/en-us/articles/360005137400-Cmd-Shift-A-hotkey-opens-Terminal-with-apropos-search-instead-of-the-Find-Action-dialog

## Bug

有时候会出现复制进来的新文件编译之后没有被输出到target对应的目录,应该是idea潜在的bug,如果点击重新加载文件索引太慢了,一般重启一下重新编译可以解决。

## search(搜索)

全局搜索的时候记得利用好Scope,比如要搜索某个模块,某所最近更改的内容,搜索版本控制的所有更改等等。

## Services

cmd+8可以将多个SpringBoot的服务(微服务)整一个打开控制,可以结合其他快捷键进行启动、重启和停止,不过第一次使用需要再右下角的弹框中点击确认。

此外在Spring Cloud多个微服务的情况下,还可以将不同的微服务分组然后统一对某个组别进行run、debug或者静默断点等操作。

## 使用lombok跟踪bean属性调用栈

opt+F7依然可以看到getter和setter的调用栈。

## SpringBoot Application的热加载

要在debug模式下,设置Hot swap classes and update trigger file if failed,就可以自动热加载class了。

## idea的svn的删除操作

本地删除之后要在,Locally Deleted Files中点击Remove from VCS,然后再回来上面的Default Changelist去执行Commit删除。

# all shortcut

```

新建文件的时候可以这样操作来脱离鼠标:

cmd+1跳到Project目录上下移动到目标目录,然后cmd+shift+A跳出Action,输入new+文件类型或者手动选择文件类型就可以了。

```

```

option+cmd+c 抽取局部字符串为静态变量

cmd+shift+方向键  可以控制模态框的大小,和左右移动编辑区的内容

ctrl+j  展示API文档

ctrl+shift+F,[words 打钩可以搜索是否为单词]

command+D,

commond+F12(file structure)

command+shift+N(search file's name and global)

commond+option+shift+N(search method d variable global)

shirt + option + (向上箭头)/(向下箭头)(move codes up or down)

Command + Option + L(Format code)

option+enter(add javadoc)

option+command+b(jump into the class impl)

command+e(recent file)

command+shift+a(search action)

command+number(window tab jump)

shift(ctrl)+command+del(last(next) edit location)

F11,command+F11,ctrl+number(alphabet)(bookmarks)

option+shift+F(add to favorites)

shift+option+U(toggle case)

command+1,esc(switch between file navigate and edit area)

option+F7(find usage)

shift+option+方向(move caret to next word)

command+方向(move to first or end of line)

ctrl+command+G(sellect all occurrences) HOT

F2(Quickly locate the wrong line)

option+command+V(generate locate variable)

shift+command+enter(generate some code)

option+enter(generate some method)

command+R(replace)

shift+F6(rename)

option+command+V(Extract Variable)

option+command+C(Extract static Variable) HOT

option+command+F(Extract field Variable)

option+command+P(Extract field Variable into method)

option+command+M(Extract some code to be a new method)HOT

shift+command+F8(show all breakPoints)

shift+command+V(copy history)

shift+option+command+U(show maven dependencies)

option+command+U(show class inherit) HOT

ctrl+option+H(call method or be called history)

ctrl+N(Generate anything)

ctrl+w(select something)

ctrl+< or > (move up or down next method) HOT

cmd+option+T (surround) HOT

```

# Problem Solution

## 编译出现莫名其妙的找不到符号的Error

如果找不到符号的错误行数,刚好式同包下的某个类找不到符号报错,那么可能式idea的类编译顺序冲突了,找到报错行上引用到的类,先单独编译应用到的类,再编译报错的类,最后编译整个项目就可以了。

## 非静默模式下断点失效

断点处提示:idea debug no executable code found

这个一般是class和idea的代码不一致导致的。

解决办法:

1、invalidate Caches/Restart

2、rebuild Project

3、class的输出路径正确

4、我自己是因为jboss的On 'update' action 被设置成了Restart Server,热部署应该改为:Update classes and resources

## 某个jar依赖冲突问题的解决

公司项目中cglib的包依赖了二个log4j的包,导致控制台启动会报错。 删除项目输出目录下的lib,设置依赖jar的scope为provided。

![](https://raw.githubusercontent.com/coding-by-feng/oss/master/uPic/7vAT8L.png '')

然后重新部署启动就可以了。

## debug启动微服务莫名其妙卡住的情况

竟然是因为我在某个方法的声明上打了断点,然后我静默断点时就可以debug启动微服务了:

![](https://raw.githubusercontent.com/coding-by-feng/oss/master/uPic/Qtfqng.png '')

于是我果断把断点去掉,然后再检查一遍有没有打到方法声明上的断点,全都取消之后重启debug就可以了。

## 记录Idea关于Maven依赖的一个致命Bug

> 基于版本2019.3.4

公司的微服务架构的用的Maven管理依赖,关于流程flowable的的模块ngbip-flow及其几个子模块我放在一个单独的文件夹下面;

另外的一个项目也是基于微服务架构依赖ngbip-flow及其几个子模块,然后由于启动报了个莫名其妙的错误,于是我删掉了项目对公司自研的所有依赖,重新引入;

但是这个时候idea移动将ngbip-flow的几个模块的依赖强制指向了上面提到的单独的文件夹下面的ngbip-flow几个子模块的代码文件,不走maven去依赖了,我TM是不同的文件夹(不同的工作区间啊,打开的是不同的idea窗口);

最后的硬核解决方法是,将原来的单独文件夹重命名个名字,这个时候另外的项目一下子就自动重新引入ngbip-flow的maven依赖,不会强制走开发机的其他文件夹下面的依赖,然后我再把文件夹名字改回来即可。

## Maven代码不能指向本地工程module代码

如果出现idea的Modules已经存在,但是代码不能通过Maven依赖到已经引入的module时(此时Maven管理界面可能会出现已经引入的model的maven可视化没有出现),这个时候在工程的Modules删除重新引入应该就可以了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342