写 bug 速度提升200%!吊爆的 IDEA 使用技巧

来源:blog.xiaohansong.com/idea-live-templates.html

今天分享一篇idea技巧,让我们少写一些重复代码,提高效率~

背景

Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等。对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates功能。刚开始觉得它只是一个简单的Code Snippet,后来发现它支持变量函数配置,可以支持很复杂的代码生成。下面我来介绍一下Live Templates的用法。

基本使用

IDEA 自带很多常用的动态模板,在 Java 代码中输入fori,回车就会出现

for (int i = 0; i < ; i++) {}

按Tab可以在各个空白处跳转,手动填值。

fe4f1d522137e91a832bdd1240a4dc1a.gif

自定义 Template

官方自带模板毕竟不能满足我们个人编码风格的需要,Live Templates提供了变量函数的方式供我们自定义。

简单用法

新增自定义模板,首先需要填写触发单词(即 Abbreviation),描述是可选的,然后定义模板的上下文,点击define选择Java,这样在编辑 Java 的时候就会触发当前模板,定义完上下文之后,就可以填写模板了。

9bc9af60daf129f1852673427283e425.gif

下面列举几个我常用的简单模板

==========
<out>
----------
System.out.println($END$)
==========
<pfs>
----------
private final static String $varName$ = "$var$";`
==========
<privateField>
----------
/*** $COMMENT$*/
@Getter
@Setter
private $TYPE$ $NAME$;
==========
<main>
----------
public static void main(String[] args) {$END$
}
==========

模板支持变量的定义,使用$$包围的字符表示一个变量。是一个特殊的预定义变量,表示光标最后跳转的位置。每个变量的位置都可以跳转过去。

高级用法

如果你用过 vim 的Code Sinppet插件,你会发现模板里面是可以执行函数的,强大的 Live Templates当然也支持,而且 IDEA 能够感知代码的语义,例如说当前编辑的函数的参数。但这一点就能够让我们玩出花来。我们从易到难来研究模板函数的功能。

7ea6b584af51618835e7e2730165104f.gif

前面我们提到的变量可以绑定函数,配置方式如上图所示。

快速声明变量

声明变量是一个常用的操作,特别是需要声明变量需要加注解,注释的时候,这些代码写起来就很枯燥。下面是我定义的模板:

<osgiRef>
----------
/*** $END$*/
@OsgiReference
@Setter
private $TYPE$ $NAME$;

乍一看这个模板跟我上面定义的privateField差不多,唯一的不同在于我给这些变量绑定了函数。

  • clipboard():返回当前粘贴板的字符串

  • decapitalize():将输入的字符串首字母变为小写

下面我们演示一下,我们先拷贝当前类名,然后输入osgiRef

e8b4b7d49cf86c4a47941eefba87e788.gif

快速声明 logger

声明 logger 也是一个常用的操作,上面我们是利用了粘贴函数来快速声明变量,现在我们来利用另一个函数className(),顾名思义,它的作用就是返回当前类名。

<logger>
----------
/** logger */
private static final Logger LOGGER = LoggerFactory.getLogger($CLASS$.class);

最强大的 groovyScript()

如果说上面用到的函数提供的能力有限,不够灵活,那么groovyScript()提供了一切你想要的能力,它支持执行 Groovy 脚本处理输入,然后输出处理后的字符串。

groovyScript("code", ...)| code |   一段Groovy代码或者Groovy脚本代码绝对路径 |
|  ... | 可选入参,这些参数会绑定到`_1, _2, _3, ..._n`, 在 Groovy 代码中使用。|

下面我们来看一下它的实际应用。

快速 bean 配置

新增一个服务都要在 Spring 中注册一个 bean,一般这个配置无非就是将指明id和class,由于我们是在 xml 中配置,所以不能利用className()函数,但是我们可以利用clipboard()函数获取到类的全引用,在 IDEA 中我们直接右键类名,点击Copy Reference就行。然后执行 groovy 脚本获取类名。

<bean>
----------
<bean id="$id$" class="$REF$" />

id绑定decapitalize(groovyScript("_1.tokenize('.')[-1]", clipboard())),首先取clipboard()的值得到类的全引用,然后执行 groovy 代码_1.tokenize('.')[-1](按.分割为字符串数组,然后取最后一个即可得到类名,然后用decapitalize()将首字母小写即可得到id。

ab486240742579dee6c36c367ec35699.gif

快速打印当前上下文信息

打印错误日志的时候需要打印当前上下文信息的,例如说入参,有时候入参很多的时候,写起来很痛苦,好在有模板函数methodParameters(),返回当前函数参数的列表,当然这个列表我们不能直接使用,需要结合groovyScript对它进行转化。

<printContext>
---------------
LogUtil.$TYPE$(LOGGER, "$MSG$ " + $params$);

将params绑定到groovyScript("'"' + _1.collect { it + ' = [" + ' + it + ' + "]'}.join(', ') + '"'", methodParameters()),就能够自动将当前函数的参数格式化后输出。

67757dca1ec1da1c5dd51f125832d225.gif

总结

上面我们简单介绍了常用的模板函数,其实 IDEA 还有很多其它模板函数,具体参考Creating and Editing Template Variables。IDEA 是一个很强大的工具,善用工具能够极大的提高工作效率,将精力投入到关键的事情上,而不是将时间浪费在编写重复代码上面。一些更高级的用法还有待大家去发掘。最后推广一波我写的代码生成插件CodeMaker,好好利用也能节省很多重复编写代码的时间。

------

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取!

推荐阅读

  • 还在用开源软件搭建ChatGPT网站?小心别人花你的钱!

  • 真刑啊!几行代码端了整个教务系统

  • 必须掌握!MySQL binlog的这三个业务应用场景

··································

你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书创过业、国企4年互联网6年。从普通开发到架构师、再到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27071.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能Python-python886

Python886&#xff1a;一款优秀的Python IDE 作为一款Python开发的强大IDE&#xff0c;Python886 绝对不会让您失望。Python886 是 Python 编程语言的一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;支持C、C、Python、PHP、Ruby、Perl等多种编程语言。Python886 具…

IntelliJ IDEA 2023.1 发布:新UI、支持Java 20、简化Git Commit、重新设计 “Run”

出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013) IntelliJ IDEA 2023.1 现已发布。此版本包括对新 UI 的改进&#xff0c;根据从用户那里收到的反馈进行了彻底改造。此外还实现了性能增强&#xff0c;从而在打开项目时更快地导入 Maven 和更早地使用 IDE 功能。由于…

npm安装教程

一、使用之前&#xff0c;我们先来掌握3个东西是用来干什么的。 npm: Nodejs下的包管理器。 webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备&#xff0c;比如资源的合并和打包。 vue-cli: 用户生成Vue工程模板。&#xff08;帮你快…

实用工具 | <01>ChatGPT-4——Cursor(AI代码神器)

目录 一、简单介绍 二、安装教程 三、使用教程 四、总结 一、简单介绍 ChatGPT是一个大型多模态模型&#xff0c;可以接受图像和文本输入&#xff0c;并生成文本输出。GPT-4是基于Transformer的模型&#xff0c;经过训练后可以预测文档中的next token。为了提高准确性和确保G…

分割一切后,Segment Anything又能分辨类别了:Meta/UTAustin提出全新开放类分割模型...

点击上方“AI遇见机器学习”&#xff0c;选择“星标”公众号 第一时间获取价值内容 前几日&#xff0c;Meta 推出了「分割一切」AI 模型 Segment Anything&#xff0c;令网友直呼 CV 不存在了&#xff1f;&#xff01;而在另一篇被 CVPR 2023 收录的论文中&#xff0c;Meta、UT…

无线电的节日

昨天坐车看东西&#xff0c;司机又拉过了&#xff0c;终于到家了 冥冥之中选择电磁场与无线电这个专业。这个专业就业方向包括射频、雷达和微波。后来跟着师傅选择了射频这条道路。 我老师当年说过你们要学英语&#xff0c;甚至还要学日语和德语&#xff0c;因为先进的创造来自…

Kotlin 集合操作符

集合操作符 集合操作符 一 (首字母 a - f) 这篇文章介绍下 Kotlin 集合中的操作符&#xff0c;本文中 Kotlin 所用版本是 1.8.10 all 判断集合中的所有元素是否满足需求&#xff0c;返回值为 Boolean 例如我们需要判断字符串的长度是否大于4 val songs listOf("一路…

讯飞星火认知大模型成果发布会举行

目录 一、提出通用人工智能七大维度481项评测体系 二、讯飞星火认知大模型三大能力已超ChatGPT 现场语音输入流畅 多维实测燃爆全场 写邮件、做方案、讲故事&#xff0c;讯飞星火大模型到底有多会写&#xff1f; 中文理解十级测试&#xff0c;现场观众&#xff1a;讯飞星火…

OpenAI 推出漏洞赏金计划,最高奖励 2 万美元;京东零售开启 5 年来最大组织变革;​Django 4.2|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

“三项能力超过ChatGPT”,科大讯飞星火大模型现场接受观众挑战,写稿制表PPT通通拿下...

杨净 发自 合肥量子位 | 公众号 QbitAI “三项能力超过ChatGPT” “1024将整体超过GPT水平&#xff01;” 在科大讯飞星火认知大模型发布会现场&#xff0c;董事长刘庆峰拍着胸脯保证&#xff0c;引起现场掌声雷动&#xff01; 而真机演示效果和多场景产品展示直接把观众们看呆…

自然机器人最新发布:智能流程助手,与GPT深度融合

ChatGPT自2022年11月上线后就受到现象级地广泛关注&#xff0c;5天时间用户就已经突破百万&#xff0c;仅2个月时间月活用户就突破1亿&#xff0c;成为史上增速最快的消费级应用&#xff0c;远超TikTok、Facebook、Google等全球应用。它展现了类似人类的语言理解和对话交互能力…

go语言实现聊天服务器(多人聊天)

用go语言实现一个server作中转群发消息&#xff0c;多个客户端聊天 1&#xff09;服务器开启&#xff0c;等待来自客户端的连接&#xff0c;把每一个客户端存储在map中 2&#xff09;客户端连接服务器&#xff0c;给自己取一个别名&#xff0c;存储在服务器 3&#xff09;服…

Golang 从零开始实现多人聊天室(三)上线通知与公屏聊天

系列文章目录 跟着&#x1f63d;猫猫学Golang&#xff0c;快人一步 系列初开&#xff0c;跟着我走进Go 语言的世界里&#x1f30d; 系列目录 Golang 从零开始实现多人聊天室&#xff08;一&#xff09;服务端监听 Golang 从零开始实现多人聊天室&#xff08;二&#xff09;客…

商务人士邮箱推荐?高大上邮箱来了!

既然点进文章那不用多说&#xff0c;大家肯定都是商务人士。在普通人眼里商务人士就等于精英人士&#xff0c;他们的行头都是一身西装梳着根根分明的大背头&#xff0c;他们会多国语言精通各种数字&#xff0c;总之就是看起来很厉害每天很精致。那商务人士到底是不是这样呢我也…

商务人士适合用什么邮箱?一款商务人士必备的邮箱推荐

在商务及办公场合中&#xff0c;电子邮箱的使用越加频繁&#xff0c;对于邮箱的选择安全及易用性成为了重中之重。 如果你是金融、互联网、法律、机关单位等领域的商务人士&#xff0c;或者你需要将邮箱作为对外的入口&#xff0c;对你而言&#xff0c;一个可靠的付费邮箱是非…

国内好用的邮箱评选,电子邮箱大全有你的吗?

国内邮箱、好用的邮箱、电子邮箱大全、163邮箱、TOM邮箱、邮箱品牌 早在三国时期&#xff0c;一种说法便流传至今&#xff0c;这酒是“三分天下”&#xff0c;最早是指三国时期魏、蜀、吴三国鼎立并且互相牵制的局面。在现代&#xff0c;也常常引用“三分天下”来形容某市场或…

你知道大量群发邮件用什么邮箱好吗?

随着社会的发展&#xff0c;我们的销售模式也在发生这巨大的变化&#xff0c;在之前我们的销售模式主要靠在线下的各种人的走街串巷的来进行营销&#xff0c;但是随着我们科技的进步&#xff0c;互联网也成为了我们生活中密不可分的一部分&#xff0c;在这时候一种全新的营销模…

堪称最佳邮箱Gmail邮箱的神奇的一号多名功能

QQ邮箱支持添加一个英文用户名的foxmail邮箱&#xff0c;已经比很多邮箱好用&#xff0c;但是gmail邮箱的一号多名的功能更为神奇&#xff0c;一个邮箱账号可以变成无数个邮箱&#xff0c;对于需要很多邮箱账号的情形&#xff0c;比如注册网络小号&#xff0c;非常有用&#xf…

推荐国内外,安全好用的电子邮箱

众多邮箱品牌&#xff0c;人们熟悉QQ、网易、新浪&#xff0c;较之而言&#xff0c;TOM邮箱更具安全性、实用性。小编整理分析详情如下。 性价比高、功能实用&#xff1a;TOM含免费邮箱&#xff0c;又相继推出了极致邮、畅享邮&#xff0c;后两款为VIP付费邮箱&#xff0c;容量…

最近沉迷美女图片无法自拔,所以我决定用PHP扒海量妹子图

为什么80%的码农都做不了架构师&#xff1f;>>> 学习PHPMySQL制作WEB应用有一阵子了&#xff0c;没有上过学所以只能学习到CURD的地步。 最近对国产美女图片、私房写真特别感兴趣&#xff0c;什么周妍希、刘飞儿、李可可、推女郎我一个都不知道~~ 经常调查我发现一…