用了这么久 IDEA,你竟然不知道 Live Templates ?

标签: idea 知道 live | 发表时间:2023-01-09 09:59 | 作者:古时的风筝
出处:https://juejin.cn/backend

highlight: a11y-dark theme: orange

大家好,我是风筝。公众号「古时的风筝」,专注于后端技术,尤其是 Java 及周边生态。文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。

Live Templates 是什么,听上去感觉挺玄乎的。有的同学用过之后觉得简直太好用了,不能说大大提高了开发效率吧,至少也是小小的提高一下,节省了很多敲重复代码的时间。有的同学用过之后说:没什么用,奇技淫巧罢了。

就算你没听过这个概念,但是或多或少你可能都用到过一点,就算没有用过的话,也可能见到过一些,没吃过猪肉可能也见过猪跑,就像下面这样的操作。

总结一下呢,它就类似于一种快捷指令(神奇代码),只要你在 IDEA 中输入特定的字母组合,IDEA 就会帮你在当前输入的位置插入一段预先定义好的代码,代码可以是固定的,也可以定义一些上下文变量,适用于那些常用的、使用频率较高的声明或重复代码段。

比如声明静态 finalString,在不用 Live Tmeplates 的情况下,我们会手动在 IDEA 中依次敲出 "public static final String" 这一行代码,当然可能借助 IDEA 的只能提示,每个单词只需要敲前两个字母。在使用了 Live Tmeplates 的情况下, 我们只需要敲出 psfs这四个字母,然后按回车键,IDEA 就会帮我们在 psfs这个位置插入 "public static final String" 这一行。

没用过的同学是不是赶紧打开 IDEA 试一下呢?在设置界面,输入 Live Templates,然后找到右侧的 Java就可以看到内置的模板。不光有 Java 的,对于多种文件类型都有支持,比如 SQL 、JavaScript、JSP 、Kotlin 等。

下面介绍几个 IDEA 内置的、常用的模板。

常用的 Live Templates

main 和 psvm

main 方法插入,虽然我们已经可以很熟练的盲打出下面这一段代码,但是只敲四个字母是不是会更快呢。

  public static void main(String[] args){
}

变量声明

下面一些是常用的变量声明

psfs

  public static final String 

psfi

  public static final int 

prsf

  private static final 

St

  String 

控制台输出

下面是控制台输出,还有一些,不一一列举了。

sout

文本输出,最常用到的。

  System.out.println();

souf

带格式化的文本输出。

  System.out.printf();

循环迭代

fori

输入完,按回车后,光标会在 i<的位置,等待输入临界值。

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

    }

iter

用 forEach 的方式循环,在一个数组或者列表变量下方使用。

  List<String> array = new ArrayList<>();
for (String s1 : array) {

}

itco

用迭代器的方式迭代,同样是在一个列表变量下方使用。

  List<String> array = new ArrayList<>();
for (Iterator<String> iterator = array.iterator(); iterator.hasNext(); ) {
  String next =  iterator.next();
}

Surround Templates

这种模板是在选中一段代码后,然后使用快捷键 option+ command+ j调出提示框,然后选择一个模板类型。

这个快捷键是 MAC 系统下的,如果你用的是 windows,可以通过点击 code菜单项,找到 Sorround With,看看快捷键是什么。

C

实现一个 Callable

  Callable<Object> callable = new Callable<Object>() {
  public Object call() throws Exception {
    System.out.println("hello");
  }
};

RL 和 WL

插入一段读锁或写锁加解锁代码。

  // 要先声明一个读写锁实例
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readWriteLock.readLock().lock();
try {
  System.out.println("hello");
} finally {
  readWriteLock.readLock().unlock();
}

自定义 Template

有时候我们经常会高频词的使用一段相似的代码, 比如做网络开发的同学,会经常用到 Socket 相关的初始化代码。

对于这种我们自己经常要写的某些类似的代码段,就可以抽取出一个 Template 出来,方便我们使用。

下面我就实现一个自定的 Template,来看一下是不是大大简化了重复性劳动。有的同学可能觉得无所谓的事儿,复制、粘贴也挺省事儿。见仁见智吧,觉得有用的可以尝试一下,觉得鸡肋的也无所谓,反正也不影响最后的功能实现。

比如我最新在做一些系统优化的工作,这个过程中,我会频繁的用 commons-lang3StopWatch来看某些方法或者某些代码段的执行时间。比如下面的代码段:

  StopWatch stopWatch = new StopWatch("代码段");
stopWatch.start();
try {
  Thread.sleep(1000);
} catch (InterruptedException e) {
  throw new RuntimeException(e);
}
stopWatch.stop();
System.out.printf("执行时间 %s%n",stopWatch.toString());

由于我比较懒,所以我不想每次都敲重复的内容,连粘贴复制都不想。所以就想到了 Live Template。

1、打开 IDEA 的设置窗口,找到 Editor 下的 Live Templates,在右侧找到 Java,点击最右侧的加号。

image-20230103224026372

2、输入这个 Template 的名字,到时候可以在编辑器中通过输入这个名字来插入这个模板。

输入描述,帮助我们记忆。

最后输入模板的内容。

image-20230103224347657

我给这个模板起名为 watch,模板内容如下:

  StopWatch stopWatch = new StopWatch("$MESSAGE$");
stopWatch.start();
$SELECTION$
stopWatch.stop();
System.out.printf("执行时间 %s%n",stopWatch.toString());

$SELECTION$表示选中的部分,我们要监控的正好是某个方法或者某个代码段,所以正好可以用 Surround Templates,并且在内容中用了 $SELECTION$,模板就默认为 Surround Templates了。

$MESSAGE$就是一个占位符的作用,当我们插入这个模板后,光标会定位到这个占位符,我们就可以在需要定制的地方输入我们想要的内容了。在这里呢,由于我的一个方法中可能用到多个 StopWatch,所以正好在这儿占位,给不同的 StopWatch 赋予不同的名字。

可以通过下面的演示看一下效果。

Live Template 支持的变量

有一些情况下,我们希望插入的内容不只是固定不变的代码段,而是希望加入一些上下文相关的内容,比如当前方法的入参,比如当前类名,比如当前方法名等。用下面这个例子说明一下。

有一个内置的模板叫做 soutm,它的描述是这样的:Prints current class and method names to System.out,打印当前类和方法名,我们看一下效果,直接将当前类和方法名 Study.main填充到了 println参数位置上。

模板内容是这样的,其中用到了两个变量是表示当前类名的 $CLASS_NAME$和表示当前方法名的 $METHOD_NAME$

  System.out.println("$CLASS_NAME$.$METHOD_NAME$");

更多的可用变量可以到 IDEA 官网查看,看到这些变量后,可能会打开你的思路,更近一步的为你提高开发效率。不过不用这些变量也没关系,上面这写其实差不多也够用了。

官网地址:https://www.jetbrains.com/help/idea/template-variables.html#predefined_functions

各位如果觉得有用的话,给个赞吧!还可以关注我的公众号「古时的风筝」,等着你来呦

相关 [idea 知道 live] 推荐:

用了这么久 IDEA,你竟然不知道 Live Templates ?

- - 掘金 后端
公众号「古时的风筝」,专注于后端技术,尤其是 Java 及周边生态. JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. Live Templates 是什么,听上去感觉挺玄乎的. 有的同学用过之后觉得简直太好用了,不能说大大提高了开发效率吧,至少也是小小的提高一下,节省了很多敲重复代码的时间.

Guru Fuel:引爆idea

- Robert - I&#39;m TualatriX
咳咳…好久没更新日志了,这实际上是有原因的. 一方面是来帝都后还没完全进入状态,二是半个月前iPhone被偷,失去了一个重要的乐趣来源(悲剧…). 今天给大家介绍一个有意思的东西,它就是Guru Fuel. 今年四月份的时候,我曾经去上海的GuruDigger参加过一个有意思的活动——PythonVSRuby(详见《PythonVsRuby:让编程更有乐趣》).

微软关闭Windows Live Spaces

- 柑桔 - 月光博客
  微软今天发布消息称,微软即将关闭已经运营了四年的Windows Live Spaces服务,并在未来六个月中将用户转移至WordPress.com博客平台.   微软和Wordpress共同宣布了这一消息,目前Windows Live Spaces拥有3000万用户,而WordPress拥有2600万用户.

Sony Ericsson Live With Walkman 评测

- 品味视界 - Engadget 中国版
刚刚一个九月,推出的手机不多,值得让我们去详细试玩评测的更少. 不过,作为 Walkman 系列中规格比较象样的一部手机,Live With Walkman 我们还是一定要评测的,虽然整体和其他 Xperia 系列手机的分别不大,但加上 Walkman 的标记,难免会让人有所期望. 到底 Live With Walkman 能不能让 Walkman 手机复活,以一部手机而言它又是否出色.

Windows Live支持XMPP协议

- 康爷 - Solidot
微软在BUILD会议上宣布Windows Live Messenger将支持开放标准网络即时消息协议XMPP. Google Talk、Facebook聊天服务和IBM Lotus Sametime都等支持XMPP. 微软表示,Windows Live Messenger将提供XMPP接口,允许用户将Messenger整合到基于Web、桌面和移动IM产品中.

基于云的Live Debian系统

- greenar - Solidot
goofegg 写道 "中国科技大学的学生建造了一套校内使用的基于云的Live Debian系统. 文章称:“借助于科大PXE服务(校外无法访问),我们正在定制一个‘云存储’Linux 系统. 此前,科大校园内通过PXE启动可以进入一些Live Linux系统,但在这些系统中的 所有修改都仅存在于内存中,关机后就丢失了.

Linkin Park - Rolling In The Deep(live中英字幕)

- Alen - 音动我心 – Mtime时光网

Xbox Live 确认将会登陆 Windows 8

- ts - Engadget 中国版
看过 Windows 8 新功能总整理后,感觉上缺了一些东西. 没错了,就是在 Windows Phone 7 上也能看见的 Xbox Live. 数天前,微软全球市场及互动娱乐部门的副执行长 Mike Delman 曾经在 The Seattle Times 上说过「Xbox Live 已在 Windows Phone 上取得成就」,「Xbox Live 将会内置于 PC 中.

Nginx+ffmpeg搭建Apple Http Live Streaming笔记

- - 移动开发 - ITeye博客
起始Nginx来搭建HLS步骤非常少. 安装好Nginx,然后跑起来. 把切片好的视频和m3u8文件放到部署目录,直接访问就可以了. 网上国内国外的找了好多博客. 这里一定注意一点,不要用VLC播放器来测试,最好用iPad或者iPhone,再么用Safari 开发模式下模拟iPad、iPhone的浏览器模式播放.