本文并不打算简单罗列 IntelliJ IDEA 快捷键,而是教你如何通过刻意的练习,来掌握IntelliJ IDEA 快捷键的操作。需要注意的是本文操作均使用Mac进行演示。文中会介绍如何查看 Windows 快捷键。
「程序员修炼之道」中有一段关于使用编辑器的内容如下:
❝要用好你的编辑器,在你开发时将其操作变成你的本能反应,使编辑器变成你双手的延伸。
❞
这样做的好处是:可以大大提高我们的开发效率。而一名优秀的程序员必备的特性之一就是:开发效率高
。
为了强调其重要性,作者并专门将其提炼成一个珠玑:
❝Use a Single Editor Well 用好一种编辑器
❞
针对用好编辑器书中给出如下操作方式指导:
如果这听起来像你...... | 那么考虑...... |
---|---|
我使用许多不同的编辑器,但是只使用其基本特性。 | 选择一种强大的编辑器,好好学习它。 |
我有最喜欢的编辑器,但不使用其全部特性。 | 学习它们,减少你需要敲击的键数。 |
我有最喜欢的编辑器,只要可能就使用它。 | 设法扩展它,并将其用于比现在更多的任务。 |
我认为你们在胡说,notepad 就是有史以来最好的编辑器 | 只要你愿意,并且生产效率很高,那就这样吧!但如果你发现自己在羡慕别人的编辑器,你可能要重新评估自己的位置了。 |
正是由于本书的启发,我下定决心想写一篇关于 IntelliJ IDEA 开发工具快捷键的介绍。闲话少说,接下来开始正式IDEA 操作之旅!
首选需要说明的是本文内容是基于Mac系统进行演示的,因为在IntelliJ IDEA 中快捷键都是通过键盘符号来展示的,所以在介绍快捷操作前,我们需要先了解一下 Mac系统键盘符号。如果你已了解,可以绕过该小节内容。
Mac Intelli IDEA 中使用频率比较高按键有:
Command(或 Cmd)⌘
Shift ⇧
Option(或 Alt)⌥
Control(或 Ctrl)⌃
Return ↩︎
Delete ⌫
Tab ⇥
上箭头 ↑
下箭头 ↓
左箭头 ←
右箭头 →
Page Up(Fn+↑)⇞
Page Down(Fn+↓)⇟
右制表符(Tab键)⇥
左制表符(Shift+Tab)⇤
Escape (Esc) ⎋
基础操作包括:选择、注释、删除、复制、移动、多重选择。还有一个最重要的操作就是:快捷键搜索,可以通过搜索方式查询忘记的快捷键。
Command+Shift+A (⌘⇧A) 搜索快捷键。
例如:你想查询注释行的快捷键,执行 Command+Shift+A 然后输入 Comment Line 就可以看到注释行的快捷键就是 Cmd+/
image.png
选择操作更多是能让你解脱鼠标或控制面板。
Alt+Shift+右箭头(⌥⇧→):一个一个单词进行选中。
Alt+上箭头(⌥↑):按照代码块进行选中。
Alt+下箭头(⌥↓):减少代码块选中。
Cmd+A(⌘A):全选。
Cmd+/(⌘/):注释光标所在行代码,再次执行则取消注释。也可以选中多行后注释多行。
Cmd+删除键(⌘⌫):删除光标所在行内容。
Cmd+Z(⌘z): 撤销刚才的操作。
Cmd+D(⌘d):复制光标所在行内容,你也可以选择多行进行复制。
Alt+Shift+下箭头(⌥⇧↓):向下移动光标所在行代码。
Alt+Shift+上箭头(⌥⇧↑):向上移动光标所在行代码。
Cmd+Shift+下箭头(⌘⇧↓):向下移动光标所在方法的代码。
Cmd+Shift+上箭头(⌘⇧↑):向上移动光标所在方法的代码。
Ctrl+G(⌃g):选择下一个需要批处理的符号。
Ctrl+Shift+G(⌃⇧g):取消最后需要批处理的符号。
ESC:取消所有批处理操作。
Cmd+Ctrl+G(⌘⌃g):全选批处理符号内容。
Cmd+-
(⌘-):折叠光标所在方法代码。
Cmd++
(⌘+):展开光标所在方法的代码。
Cmd+Shift++
(⌘⇧+):展开所有方法代码。
Cmd+Shift+-
(⌘⇧-):折叠所有方法代码。
当执行代码智能提示快捷键后会弹出可能补全的代码,可以通过回车或者Tab 键进行选择。
Ctrl+空格(⌃Space):对于未完成代码进行智能补全提示。
Ctrl+2次空格(⌃2Space):对于未完成代码进行智能补全提示。
Ctrl+Shift+空格(⌃⇧Space):对于未完成代码进行智能类型补全提示。
Ctrl+Shift+2次空格(⌃⇧2Space):对于未完成代码进行智能类型补全提示。
Postfix Completion 是通过 .+后缀的方式完成类似 Live Template 的操作。Postfix Completion可以通过简单的后缀可以快捷生成你想要的代码,大大提高开发的效率。
我经常使用的Postfix列表:
.sout:快速为字符串生成打印代码。
.if:为条件判断生成if判断结构代码。
.notnull/.nn:生成对象不为null if判断结构代码。
.null:生成对象为null if判断结构代码。
.renturn:生成返回对象代码,map.rentrun == rentrun map
.new:生成对象代码,Person.new == new Person();
.fori:生成普通for循环代码结构。
.for:生成增强for循环代码结构。
sout 和 if 使用示例如下:
image.png
image.png
如果你想了解更多 Postfix 可以通过 Find Action(⌘⇧A)搜索 Postfix Completion 点击进入。
image.png
如下图所示,你可以看到所有的 Postfix 介绍和使用方式。
Cmd+Shift+回车(⌘⇧↩︎):自动添加结束符号;或者{}
Ctrl+空格(⌃Space)+Tab:智能提示列表的切换。例如:弹出公共字典类常量列表,然后使用Tab 使用选中的常量。
Shift+F6(⇧F6):重新命名类名、方法名、文件名、变量名。
Cmd+Alt+V(⌘⌥V):快速将代码中重复内容变成统一的变量。
Cmd+Alt+C(⌘⌥C):快速将代码中重复内容变成统一的静态常量。
Cmd+Alt+M(⌘⌥M):快速将多行代码提取成一个方法。
Cmd+Alt+P(⌘⌥P):快速将方法内的变量提取为方法的参数。
Cmd+Alt+L(⌘⌥L):格式化文件的代码。
Cmd+P(⌘P):显示光标所在方法参数信息。
F1/Ctl+J(⌃J):查看方法文档信息。(光标在方法上)。
ESC(⎋ ):退出查看方法文档信息。
Alt+Space(⌥Space):查看方法具体逻辑(光标在方法上)。
F2:跳转到有错误信息代码处。Cmd+F1(⌘F1):查看错误信息。
Alt+回车(⌥↩︎):快速处理错误信息。
Cmd+Alt+T(⌘⌥T):快速添加try catch 待修改
Cmd+Shift+F7(⌘⇧F7):高亮显示和选中文本相同的变量。
Cmd+下箭头(⌘↓):跳转查看源码。
Cmd+B(⌘B):跳转到一个类或者接口。Cmd+Alt+B:查看类或者接口的实现。
Cmd+F12(⌘F12):查看类的大纲视图。
Cmd+F(⌘F):搜索文件中的字符。
回车/Cmd+G(⌘G):查找下一个匹配的字符。
Cmd+Shift+G(⌘⇧G):查找上一个匹配的字符。
❝关闭 查找窗口后你仍然可以使用选中进行上一个/下一个查找。
❞
到这里一些常用最为基础的快捷键操作介绍完毕,看到这里你是不是也还是很....
你在开头不是说你不是简单罗列 Intelli IDEA 快捷键吗!
不要急,不要急。听我说。接下来我将隆重介绍一款IDEA快捷键操作神器:IDE Features Trainer。上述操作介绍均来自该插件实际操作内容。
当你安装完这个插件后会看到一个 Learn的图标,如下图所示:
image.png
点击每个小结进入后跟着提示进行操作,当你操作完毕后需要执行的内容会变灰,直到最后一个操作执行完毕后,会提示你进入下一个学习。具体效果如下:
如何你是Windows 系统用户,在你的IDEA中安装这个插件即可练习快捷键了。
文章最后我特意又搞了几个小练习,也是对你操作的小测试。需要注意的是以下练习均不能使用鼠标进行操作。
完成下面一段代码操作,操作步骤如下:
复制 System.out.println("select") 到下一行20次。
选中整个select方法并复制到下一行,并将复制方法名改为fun
修改fun方法中的20个select为fun
删除掉一个打印fun代码
未修改前的代码:
public class EditorBasic {
public void select(){
System.out.println("select");
//Cmd+D 19次
//Cmd+Shift+右箭头 选中一个打印语句
//Alt+上箭头选中整个方法
// Cmd+D 复制选中的方法
}
}
按照操作步骤执行后的代码:
public class EditorBasic {
public void select(){
System.out.println("select");
//省略19行一样的代码
}
public void fun(){
System.out.println("fun");
//省略18行一样的代码
}
}
未修改前的代码:
public class Person {
private String name;
private Integer type;
}
```java
public class CommonConstants {
public static final int VIP = 1;
public static final int ORDINARY=0;
}
public class CodeCompletion {
private String name="name";
private String age="age";
Map map = null;
public void fun() {
initMap();
map.forEach((k,v)->{
Person person = new Person();
person.setName(k);
person.setType(CommonConstants.VIP);//Ctrl+空格 Tab
//if (k.startsWith("zhuoqianmingyue")) Cmd+Shift+回车
if
/*
if (k.startsWith("zhuoqianmingyue")) {
person.setType(CommonConstants.VIP);//Ctrl+空格 Tab
}
*/
});
}
private Map initMap() {
map = buildMap();
map.put(name, "zhuoqianmingyue_1");
map.put(name, "zhuoqianmingyue_2");
map.put(name, "zhangsan");
map.put(name, "lishi");//Ctrl+Shift+空格
return //Ctrl+Shift+空格
}
private Map buildMap() {
return Collections.emptyMap(); //Ctrl+Shift+空格
}
}
操作后的代码:
操作步骤请参考注释
public class CodeCompletion {
private String name="name";
private String age="age";
Map map = null;
public void fun() {
initMap();
map.forEach((k,v)->{
Person person = new Person();
person.setName(k);
person.setType(CommonConstants.ORDINARY);
if (k.startsWith("zhuoqianmingyue")) {
person.setType(CommonConstants.VIP);
}
});
}
private Map initMap() {
map = buildMap();
map.put(name, "zhuoqianmingyue_1");
map.put(name, "zhuoqianmingyue_2");
map.put(name, "zhangsan");
map.put(name, "lishi");
return map;
}
private Map buildMap() {
return Collections.emptyMap();
}
}
这个练习不给任何提示,通过前后代码对比,你可以使用到哪些快捷键?自己探索一下。
操作前的代码:
public class HuMan {
private String name;
private String type;
public void say(String content){
System.out.println(content);
}
//省略getter and setter
}
public class Refactorings {
public void fun(){
//结巴男
HuMan man = new HuMan();
man.setType("man");
man.say("a");
man.say("a");
man.say("a");
//正常女
HuMan woman = new HuMan();
woman.setType("woman");
woman.say("a");
}
}
操作后的代码
public class Refactorings {
public void fun(){
//结巴男
String content = "a";
HuMan man = manSay(new HuMan(), content);
//正常女
woManSay(man, content);
}
private HuMan manSay(HuMan man, String content) {
man.setType("man");
man.say(content);
man.say(content);
man.say(content);
return man;
}
private void woManSay(HuMan man, String content) {
HuMan woman = new HuMan();
woman.setType("woman");
woman.say(content);
}
}
练好一个工具操作没有什么捷径可走,唯有不断的刻意练习方能掌握。最后需要说明的是IDE Features Trainer 中仅提供常用快捷键操作,正所谓:快捷无止境,劝君继续探索。