Idea一些常用设置和快捷操作(持续更新)

Idea一些常用设置和快捷操作

前文

​ Idea为2019.3.3(Ultimate Edition)版本

破解插件(有条件请支持正版):【File】 -> 【Settings】 -> 【Plugins】->【点击设置按钮】,然后添加第三方插件仓库的ip:https://plugins.zhile.io ,然后在Marketplace搜索IDE Eval Reset,安装后重启。

第一节 配置

1.1 背景替换

Idea可以设置修改背景图片,【Settings】->【Appearance】->【Background Image】

背景替换

1.2 代码提示不区分大小写

代码提示默认会区分大小写,【Settings】->【Editor】->【General】->【Code Completion】默认为 First Letter ,改为 None 或取消 Match case

1.3 显示内存占用

【Settings】->【Appearance & Behavior】->【Appearance】

1.4 CTRL + 滚轮调整字体大小

【Settings】->【Editor】->【General】

可以使用 CTRL + 滚轮 调整字体大小。

1.5 多行显示Tab

Idea默认显示单行Tab,在文件较多时不是很方便,【Settings】->【Editor】->【General】->【Editor Tabs】勾选掉 Show tabs in one row

可以增加打开的Tab个数。

1.6 修改默认注释斜杠位置

Idea默认注释斜杠会位于行首,可以改为位于代码头部,【Settings】->【Editor】->【Code Style】->【Java】->【Code Generation】勾选掉 Line comment at first column

1.7 软分行

软分行只是Idea显示中分行,实际代码并没有分行。

第二节 插件

2.1 代码迷你缩放图-CodeGlance

插件可以在Idea中联网下载(或者自行下载后安装),【Settings】->【Plugins】->【CodeGlance】

代码迷你缩放图

安装完毕重启,效果如下。

代码迷你缩放图-效果

2.2 翻译-Translation

【Settings】->【Plugins】->【Translation】

代码迷你缩放图-效果

重启后,可勾选一段文字,右击后选择Translate进行翻译。

代码迷你缩放图-效果

​ 效果如下:

代码迷你缩放图-效果

2.3 彩虹括号-Rainbow Brackets

【Settings】->【Plugins】->【Rainbow Brackets】

代码迷你缩放图-效果

​ 重启后,观察效果。

代码迷你缩放图-效果

2.4 代码统计-Statistic

【Settings】->【Plugins】->【Statistic】

代码迷你缩放图-效果

​ 重启后,将统计工具添加到显示栏,【View】->【Tool Windows】->【Statistic】

代码迷你缩放图-效果

​ 效果如下:

代码迷你缩放图-效果

2.5 接口工具-RestfulToolkit

Idea 新版本自带Web,这里使用插件RestfulToolkit,【Settings】->【Plugins】->【RestfulToolkit】

代码迷你缩放图-效果

​ 重启后,可在侧栏的RestServices查看项目所有接口API,也可以直接进行接口测试。

代码迷你缩放图-效果

2.6 Json代码生成-GsonFormat

​ 【Settings】->【Plugins】->【GsonFormat】

代码迷你缩放图-效果

​ 重启后,新建一个类Test,类中鼠标右键,选择Generate。

代码迷你缩放图-效果

​ 然后点选GsonFormat。

代码迷你缩放图-效果

​ 在弹出的输入框中键入要转换的Json串。

代码迷你缩放图-效果

​ 插件会自动识别数据类型。

代码迷你缩放图-效果

​ 最终会生成如下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class Test {

/**
* id : 1
* name : demoData
* sort : 1
* enabled : true
*/

private int id;
private String name;
private int sort;
private boolean enabled;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getSort() {
return sort;
}

public void setSort(int sort) {
this.sort = sort;
}

public boolean isEnabled() {
return enabled;
}

public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}

2.7 其它

还未试用:

  • Key Promoter X
  • SequenceDiagram
  • Maven Helper
  • GenerateAllSetter
  • JUnitGenerator

第三节 常用操作

3.1 生成serialVersionUID

设置:【File】->【Settings】->【Editor】->【Inspections】->【Java】->【Serialization issues】->【Serializable class without ‘serialVersionUID’】

设置生成serialVersionUID

鼠标移动到类名处,【Alt】+【Enter】,即可生成serialVersionUID。

生成serialVersionUID

3.2 查看类继承关系

第一种:Ctrl + H

可以看向上和向下的继承关系,但只能看继承关系,不能看实现了哪些接口。

第二种:指定类右键查看 diagramCtrl + Alt + U

既能看继承关系,也能看实现了哪些接口。

按住 Alt 放大。

不需要的类或接口可以选中并按 delete 删除。

右键并选择 Add Class to Diagram 添加新的类。

更多功能可以通过右键选择。

3.3 groovy 脚本生成entity

自定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import com.intellij.database.model.DasTable
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.io.*

/*
* Available context bindings:
* SELECTION Iterable<DasObject>
* PROJECT project
* FILES files helper
*/

packageName = ""
typeMapping = [
(~/(?i)tinyint|smallint|mediumint/) : "Integer",
(~/(?i)int/) : "Long",
(~/(?i)float|double|decimal|real/) : "Double",
(~/(?i)datetime|timestamp/) : "java.sql.Timestamp",
(~/(?i)date/) : "java.sql.Date",
(~/(?i)time/) : "java.sql.Time",
(~/(?i)blob|binary|bfile|clob|raw|image/) : "InputStream",
(~/(?i)/) : "String"
]

FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
SELECTION.filter { it instanceof DasTable }.each { generate(it, dir) }
}

def generate(table, dir) {
def className = javaNameRemovePrefix(table.getName(), true)
def fields = calcFields(table)
packageName = getPackageName(dir)
new File(dir, className + ".java").withPrintWriter("UTF-8") { out -> generate(out, table, className, fields) }
}

// 获取包所在文件夹路径
def getPackageName(dir){
return String.valueOf(dir).replaceAll( "\\\\", ".").replaceAll( "^.*src(.main.java.)?", "") + ";"
}

def generate(out, table, className, fields) {
out.println "package $packageName"
out.println ""
out.println "import com.lai.birdnestcommon.base.BaseEntity;"
out.println "import io.swagger.annotations.ApiModelProperty;"
out.println "import lombok.Data;"
out.println "import lombok.NoArgsConstructor;"
out.println "import lombok.ToString;"
out.println "import javax.persistence.*;"
out.println "import java.io.Serializable;"
// 加载所有字段数据类型
// Set types = newHashSet
// fields.each {
// types.add(it.type)
// }
// if(types.contains( "Date")) {
// out.println "import java.util.Date;"
// }
// if(types.contains( "InputStream")) {
// out.println "import java.io.InputStream;"
// }

out.println ""
out.println "/**"
out.println " * "
out.println " * @author enix"
out.println " * @Date: " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yy-MM-dd HH:mm:ss")).toString()
out.println " */"
out.println "@NoArgsConstructor"
out.println "@Data"
out.println "@ToString"
out.println "@Entity"
out.println "@Table(name = \"" + table.getName() + "\")"
out.println "public class $className extends BaseEntity implements Serializable {"
out.println ""
out.println " @Id"
fields.each() {
// 过滤掉base字段
if (it.name != "createTime" && it.name != "operateTime" && it.name != "userCreate" && it.name != "userOperate") {
if (it.annos != "") out.println " ${it.annos}"
// 添加swagger注解
out.println " @ApiModelProperty(value=\"${it.commoent}\")"
out.println " private ${it.type} ${it.name};"
out.println ""
}
}
// lombok代替getter和setter
// out.println ""
// fields.each() {
// out.println ""
// out.println " public ${it.type} get${it.name.capitalize()}() {"
// out.println " return ${it.name};"
// out.println " }"
// out.println ""
// out.println " public void set${it.name.capitalize()}(${it.type} ${it.name}) {"
// out.println " this.${it.name} = ${it.name};"
// out.println " }"
// out.println ""
// }
out.println "}"
}

def calcFields(table) {
DasUtil.getColumns(table).reduce([]) { fields, col ->
def spec = Case.LOWER.apply(col.getDataType().getSpecification())
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
fields += [[
name : javaName(col.getName(), false),
type : typeStr,
filed: col.getName(),
commoent: col.getComment(),
annos: ""]]
}
}

// 获取Java类名
def javaName(str, capitalize) {
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
.collect { Case.LOWER.apply(it).capitalize() }
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
}

// 获取Java类名-去除模块名
// 移除第一个下划线前的内容
def javaNameRemovePrefix(str, capitalize){
// 获取第一个下划线前一个元素坐标
int firstSubscript = str.indexOf("_")
if (firstSubscript < 0) firstSubscript = 0
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
.collect { Case.LOWER.apply(it).capitalize() }
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
// 去除前缀
s = s[firstSubscript..s.length() - 1]
capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
}

参考:

🔗 《IDEA 2020.3 插件大合集