【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(Live Template&Postfix Completion篇)

本文涉及的产品
视频直播,500GB 1个月
简介: 练武不练功,到老一场空。

在这里插入图片描述

本文已被 https://yourbatman.cn收录; 女娲Knife-Initializr工程可公开访问啦;程序员专用网盘 https://wangpan.yourbatman.cn;技术专栏源代码大本营: https://github.com/yourbatman/tech-column-learning;公号后台回复“ 专栏列表”获取全部小而美的 原创技术专栏

你好,这里是Java方向盘,我是方向盘(YourBatman),坐稳扶好,开始发车。

Title Link
所属专栏 【方向盘】-IntelliJ IDEA
源代码 https://github.com/yourbatman/FXP-java-ee
程序员专用网盘公益上线啦,注册送1G超小容量,帮你实践做减法 https://wangpan.yourbatman.cn
Java开发软件包(Mac) https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit
女娲工程 http://152.136.106.14:8761
版本约定 [Mac OS 12.3],[iTerm2 3.4.15(zsh 5.8)],[IntelliJ IDEA 2021.3.3]

📚前言

本系列上篇文章介绍了IDEA里关于代码重构相关的快捷键,利用好Java强类型语言的特性,加上IDEA的重构快捷键,可以在重构代码时带来大大的便捷及“安全保障”,进而为那颗很想重构但迟迟不敢动手的心提供先决条件。

敲代码过程中,总是“讨厌”经常写些重复代码,如:logger日志声明、main方法、System.out.println() 。。。本文就针对这个“痛点”,一起来学习IDEA的Live Template和Postfix Completion功能,看看能给我们带来多大的便捷。

✍正文

初级程序员热衷于“自动”生成代码,各式各样的代码生成工具,譬如MyBatis逆向工程、easycode插件等等。很多公司在团队内是禁止使用这类工具的,理由很简单:生成出来的垃圾代码太多

但日常编程过程中,我们确实经常会遇到需要重复写的代码片段,怎么破?这就是接下来要讨论的内容,使用IDEA的“工具”来替代这些“重复劳动”。

IntelliJ IDEA快捷键

本文并非直接介绍快捷键,但是Live Template和Postfix Completion都有着类似的作用,因此放在此专栏一并介绍了。

✌Live Template

何为Template? 顾名思义,按照预先定义好的内容、格式执行或者输出。使用模板一般有一些优势:

  1. 写出来的代码风格能保持一致
  2. 仅需输入几个引用字符即可获得完整的代码块逻辑,并能保证正确性
  3. 不会出现CV代码,忘记改某些参数出现的编译甚至运行期问题

何为Live Template呢? 区别在于这个Live,单词直译为:现场直播的,当前所关心的。所以笔者对Live Template的理解是:具有上下文感知能力的模板,相较于普通的Template更为智能、聪明。

网上其实有不少文章“吹嘘” Live Template功能强大、好用的,可谓不吝赞美之词。但是呢,笔者结合自己不短的工作经验以及学习经验,发现此功能吹嘘的人多,用的人是真的少。所以每每看到这类文章时,想问作者三句:这真的是你的使用经验分享吗?那些“强大”的功能真的在用?还是就为了吸引眼球博取流量而已呢?

在这,笔者先将自己个人的观点摆在前头哈:Live Template这个功能确实很强大,支持很多方式甚至groovy脚本,但从效率的角度来讲,它的强大和灵活反倒让 通用性和实用性 变差。因此,即使笔者在刚使用IDEA时(2017年)就已经接触和使用过Live Template,但直到现在对它依旧不感冒,使用的功能点甚至越来越少。

话说回来,仅是个观点而已,这和个人的使用习惯、认知是强相关的嘛。虽然我用得少,但还是在用滴,下面就简单聊聊这个功能吧。如下图所示:这是笔者当前使用的所有Live Template模板了。

Tips:按快捷键 commond + j可显示出当前环境下(类里or方法里)能用的所有的Live Template模板

类里(6个):
在这里插入图片描述
方法里(3个):
在这里插入图片描述
下面是笔者IDEA的设置:
在这里插入图片描述
在这里插入图片描述
由于笔者好些年不写前端、不会写Android,偶尔写写Groovy、Shell等脚本,所以从上图可以看到只打开了Java的几个模板项而已。

效果总览

通过录制的这张动图,能感受到Live Template的强大,感受到其效果:
在这里插入图片描述
这里一共用到了三个模板:

  • psvm:生成main方法
  • fori:生成普通for循环
  • sout:生成标准输出语句

话不多说,下面通过介绍笔者自己用的模板,来简单感受一下Live Template吧。

main和psvm

使用方式:在类内任意地方,敲main或者psvm,然后按tab键触发。
在这里插入图片描述
在这里插入图片描述
效果:快速生成/声明main方法
在这里插入图片描述
值得注意,在早期的IDEA版本中只支持psvm这一个Live Template,从xxx版本开始(具体从哪个版本开始我记不得了)也支持main了(这对eclipse转过来的开发者是福音呀),效果完全同psvm。本人偏爱使用main,明显更见名知意些嘛。

sout、serr

方法内部触发,快速“生成”标准输出和错误输出语句。

sout:

System.out.println(); // sout标准输出

serr

System.err.println(); // serr错误输出

下面介绍的Postfix Completion也有类似功能,可联系在一起做对比,下同。

soutc、serrc

使用条件:方法引用/lamda表达式里。可以看到,这哥俩的触发条件还是蛮苛刻的。
在这里插入图片描述
soutc:

System.out::println

serrc:

System.err::println

结束。笔者常用的就这么几个Live Template,发现没fori都没用。当然喽,笔者还自定义了几个Live Template,用于应对特殊场景。

doc、docc

快速生成类的java doc。做开发时,一般而言,类是要求必须写 java doc的,而对于每个方法的java doc要求会松一些,不做强制,这两个Template就是来帮我解决类上的java doc问题的。

doc:

/**
 * 在此处添加备注信息
 *
 * @author YourBatman. <a href=mailto:yourbatman@aliyun.com>Send email to me</a>
 * @site https://yourbatman.cn
 * @date 2022/5/1 22:29
 * @since 0.0.1
 */
public class Demo { ... }

docc:

/**
 * 在此处添加备注信息
 *
 * @author YourBatman. <a href=mailto:公司的邮箱>Send email to me</a>
 * @site 公司网址or项目地址or文件的git地址
 * @date 2022/5/1 22:29
 * @since 0.0.1
 */
public class Demo { ... }

为什么有两个?doc是笔者写自己的时候代码用,docc是在公司做开发用。

logger

快速声明logger日志实例属性
在这里插入图片描述
logger:

private final Logger logger = LoggerFactory.getLogger(this.getClass());

有可能有同学会问,logger很多时候不是static的吗?就像这样:

private static final Logger LOGGER = LoggerFactory.getLogger(Demo.getClass());

是的,很多时候logger确实是静态的,而这个时候笔者就会用lombok的@Slf4j注解代替,而非“手敲”。

唠叨一句:初学者学习时常常有个误区: 偏爱使用static静态(变量、方法)。笔者的建议一般是: 实例(变量、方法)优先,理由很简单, 在工程领域,面向对象编程的优势远大于面向过程编程。

自定义Live Template

额,这个,晒一下我的一个自定义详情应该就差不多了:
在这里插入图片描述
当然,Live Template的强大之处远远不止这样。比如它内置有上百个变量,你可以随意组合来灵活定义模板,甚至还支持自定义Groovy脚本,简直强大到没有朋友。

但是,你懂的。一方面我觉得复杂点的结构代码还是手敲来得更稳妥,也能锻炼敲代码的手速不是;另一方面觉得,若非及其特殊、并且还重复出现需要重复“劳动”的场景,是完全没必要定义复杂模板的。

✌Postfix Completion(后缀补全)

这才是IDEA代码补全方面的一大利器,在实用性上远远优于Live Template(个人意见,非喜勿喷)。如果说Live Templates更智能,那么Postfix Completion给使用者的感觉是更佳的确定性易用性

说明:前面文章有提到过,使用快捷键提高效率非常非常非常重要的一个前提:确定性。 只有确定性方可一步到位,只有一步到位方可直接提效

顾名思义,后缀补全功能自动补全代码的触发方式为:在语句的后面输入特定的元素,键入tab键就能完成自动补全了。

下面截图是笔者使用Postfix Completion的情况:
在这里插入图片描述
在这里插入图片描述

Postfix Completion笔者使用得还是比较频繁的,数量上也有十几个样子。下面简单介绍几个

!

用于bool表达式语句上,表示。如:

if (relation == Relation.GOOD!) { ... }
键入tab触发后自动变为:
if (relation != Relation.GOOD) { ... }

boolean bool = nums.size() > 3!;
键入tab触发后自动变为:
boolean bool = nums.size() <= 3;

boolean bool = nums.contains(3)!;
键入tab触发后自动变为:
boolean bool = !nums.contains(3);

var

这个使用得太太太频繁了,非常好用。它能为你快速生成局部变量的前半部分(声明部分),典型应用在getXXX的时候:

Country country = new Country();

country.getId().var
键入tab触发后自动变为:
Long id = country.getId();

country.getCnName().var
键入tab触发后自动变为:
String cnName = country.getCnName();

country.getEnName().var
键入tab触发后自动变为:
String enName = country.getEnName();

cast、castvar

强转、强转并生成变量。大都情况下,后者使用得会更多些,castvar = cast + var的结合体,将两步合为一步。
在这里插入图片描述

Object str = "hello yourbatman";
str.castvar
键入tab触发后自动变为:
Object str = "hello yourbatman";
String s = (String) str;

Object nums = Arrays.asList(1, 2, 3);
nums.castvar
键入tab触发后自动变为:
Object nums = Arrays.asList(1, 2, 3);
List<输入状态> objects = (List<?>) nums;

nums这个例子,当IDEA推断不出泛型时,光标会停在不确定的地方让你输入,使用起来非常流畅。

for、fori、forr、iter

这些后缀,快速生成遍历代码。下面笔者将示例几类能遍历的类型,分别看看它哥几个有啥异同。

Array数组:

String[] strArr = {"a", "b", "c"};

// strArr.for 增强for循环
for (String s : strArr) {

}
// strArr.fori 正序遍历
for (int i = 0; i < strArr.length; i++) {

}
// strArr.forr 倒序遍历
for (int i = strArr.length - 1; i >= 0; i--) {

}
// strArr.iter 同strArr.for增强for循环
for (String s : strArr) {

}

Collection集合:

Collection<String> coll = Arrays.asList( "a", "b", "c");

// coll.for 增强for循环
for (String s : coll) {

}
// coll.fori 正序遍历
for (int i = 0; i < coll.size(); i++) {

}
// coll.forr 倒序遍历
for (int i = coll.size() - 1; i >= 0; i--) {

}
// coll.iter 同strArr.for增强for循环
for (String s : coll) {

}

可看到,Collection和Array的表现是一样的。

最后再看看Map:
在这里插入图片描述
Map并不能使用for直接遍历,而是使用foreach迭代。除此之外呢,map还可以先“转为Collection”后再使用for循环遍历,就像这样:

Map<String,Integer> map = Collections.emptyMap();

Set<String> mapKeys = map.keySet();
Collection<Integer> maoValues = map.values();
Set<Entry<String, Integer>> mapEntries = map.entrySet();

对于Map的遍历,笔者最推荐的是foreach迭代的遍历方式,使用起来最方便。当然喽,有的时候也会使用for循环方式进行遍历(先转为Collection),这时我更偏爱使用Entry方式,你呢?

Tips:对于遍历,还有一种 Iterator方式,你还记得如何使用它吗?

new

使用构造器new对象。
在这里插入图片描述
有的同学会问这个和new Demo()写法差不多呀,确实差不多。但当你后缀补全这个功能用得多后,就会发现它真的很有用。

return

快速返回,也是非常的好用。

result.return -> return result;

除了这些,其它常用且非常好用的后缀:opt、serr、sout、throw、while等等。

自定义Postfix Completion

这么好用的功能,若现有的还不能满足,当然也可自定义一个。

以笔者自定义的一个json后缀为例:将任意值序列化为json字符串。定义如下:
在这里插入图片描述
因为可以将任意类型序列化为JSON串,因此这里Applicable expression types就没写任何内容。

Tips:平时开发中,我司是禁止使用Fastjson的,这里只是做演示用哈

有的后缀使用是有“前提”条件的,比如必须是集合类型,或者必须是字符串类型等等,这个时候就可以通过Applicable expression types缩小范围(如下图所示,可以多选哟),以达到更好的确定性正确性
在这里插入图片描述

✍总结

本文介绍了IDEA的Live Template功能Postfix Completion后缀补全功能,看起来哥俩都能完全“代码生成”。但区别还是很明显的:

  • Live Template功能强大、灵活,它并不是简单的Code Snippet,支持随意组合、定制,甚至还支持 Groovy函数配置,可以定制很复杂的模板逻辑,最终一键生成
  • Postfix Completion通过指定后缀触发,在触发的时候它已经拥有了前提条件(上下文),所以使用和理解起来更容易,也就是我理解的更具有确定性些

功能没有孰优孰劣,重点在于使用的人如何使用。尊重每个人的使用偏好,更支持极客风格的同学将某些功能用到极致甚至研究其原理。Live Template&Postfix Completion需要记忆的看似很多,但本质和快捷键一样,用着用着就成肌肉记忆了。

还是补上那句话:快捷键没有任何技巧性,练就完了!下篇继续介绍Intellij IDEA的实用快捷键。那,咱们还是下次再见!

推荐阅读

在这里插入图片描述

我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖...是我不可抹灭的黑标签

  • 🎓2013.07 清考、毕业答辩3次未通过、延期毕业
  • 🏷2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作
  • ️️🏷2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作
  • 🏷2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人
  • 🏷2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer
  • 🙅🏻‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委
  • 📚高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍《Spring奇淫巧技》

在这里插入图片描述

序号 专栏名称 简介
01 【方向盘】-程序人生 程序人生,人生程序
02 【方向盘】-资讯/新特性 IDEA、JDK、Spring技术栈......新特性
03 【方向盘】-IntelliJ IDEA 熟练使用IDEA就相当拥有物理外挂,助你高效编码
04 【方向盘】-Bean Validation 熟练掌握数据校验,减少90%的垃圾代码
05 【方向盘】-日期时间 帮你解决JDK Date、JSR 310日期/其实 的一切问题
06 【方向盘】-Spring类型转换 Spring类型转换-框架设计的基石
07 【方向盘】-Spring static static关键字在Spring里的应用
08 【方向盘】-Cors跨域 关于跨域请求问题,本专栏足矣
09 【方向盘】-Jackson Almost Maybe是最好的Jackson专栏
10 【方向盘】-Spring配置类 专讲@Configuration配置类,你懂的
11 【方向盘】-Spring技术栈 暂无所属小分类的,Spring技术栈大分类
12 【方向盘】-JDK 暂无所属小分类的,JDK技术栈大分类
13 【方向盘】-Servlet Servlet规范、Web相关内容专题
14 【方向盘】-Java EE 从Java EE到Jakarta EE,30年弹指一挥间
15 【方向盘】-工具/提效 开发工具、软件工具,目标是提效
16 【方向盘】-Spring技术栈新特性 Spring Framework、Spring Boot、Spring Cloud、Spring其它技术
17 【方向盘】-基本功 每个Javaer,都需要有扎实的基本功
... ... ...
99 源代码库 大多数专栏均配有源代码,都在这里
目录
相关文章
|
2月前
|
Linux Android开发 Windows
IDEA如何设置成Eclipse的快捷键
【10月更文挑战第9天】这段内容介绍了如何在 IntelliJ IDEA 中设置类似 Eclipse 的快捷键。主要包括:1) 打开设置;2) 进入快捷键设置页面;3) 选择 Eclipse 快捷键方案;4) 可选的自定义调整。通过这些步骤,可以让熟悉 Eclipse 的用户更快适应 IDEA。
369 4
|
3月前
|
安全 Java
IntelliJ Idea 常用快捷键列表
这是一份IntelliJ IDEA常用快捷键列表,涵盖了代码编辑、文件操作、重构、查找及调试等多种开发场景。例如,使用Ctrl+Shift+Enter完成语句,Ctrl+E打开最近的文件,Ctrl+Shift+E查看最近更改的文件,以及Alt+Q预览当前方法声明等,极大地提升了开发效率。
IDEA中返回上一步和下一步快捷键失效【Ctrl+Alt+左箭头】
这篇文章提供了解决IntelliJ IDEA中"返回上一步"和"下一步"快捷键失效的方法,通常是因为与其他软件的快捷键发生冲突,解决方法是更改快捷键设置。
|
5月前
|
Java Android开发 Spring
idea开发常用快捷键总结
idea开发常用快捷键总结
186 9
|
4月前
|
Java
IDEA常用快捷键
本文为IDEA用户,特别是Java新手总结了一系列实用快捷键,包括快速生成main方法(psvm)、输出语句(sout)、删除行(Ctrl + X/Y)等,以及代码搜索、调试模式启动等高级功能,并提供了自定义快捷键的方法及示例图片,助你提升开发效率。
|
API C++ Windows
【Live555】Live555 Windows下使用VS2017编译教程
【Live555】Live555 Windows下使用VS2017编译教程
【Live555】Live555 Windows下使用VS2017编译教程
|
数据建模 C++ Windows
live555开发笔记(一):live555介绍、windows上msvc2017编译和工程模板
live555开发笔记(一):live555介绍、windows上msvc2017编译和工程模板
live555开发笔记(一):live555介绍、windows上msvc2017编译和工程模板