Idea Live Template代码片段总结
Idea Live Template总结
live template是idea中提高效率的利器之一,以前看过一些教程,平时经常在使用,减少了我很多繁复的工作,但是没有系统的去整理过,最近准备系统的整理下,主要是自己平时用到的和官方文档的说明,如果有不正确的地方。
定义: Live template可以让你快速、高效、正确的插入平时经常使用的或者自定义的代码片段。
一、演示
在开始之前,为了引起大家的兴趣,我们先来看下使用live template的演示效果:

上面使用的就是live template,其中有预定义的sout,psvm和fori,还有自定义的todo和log等。可以看到使用live template可以用缩略词产出设置好的代码片段。
二、详细介绍
2.1 类型
live template一共有三种类型分别是简单、参数化和环绕类型。
- 简单类型
简单类型就是固定的代码片段,当通过缩略词展开的时候,会在源代码中展开。如最简单和常用的pdvm展开就是main函数的定义。 - 参数类型
参数类型就是代码片段中带有参数的模板,参数用$界定,如参数MY,这位$MY$,参数类型非常有用,我们自定义的模板很多都会用到参数,等会再设置中在进行讲解。 - 环绕类型
环绕模板指的是那种包裹代码块的模板,比如try catch,还有下面演示的callable语句。
三种类型的演示如下: 

2.2设置(win默认快捷键win+alt+s)
路径如下图箭头1处:

如图中所示,iterations是idea自带的group,fori是缩略词,顾名思义这个组是针对迭代等操作的。
在使用时我们可以输入10.fori,list.fori或者直接输入fori然后按tab键(箭头7处)插入代码。idea会根据上下文生成不同的代码片段,如10.fori直接生成了“for (int i = 0; i < 10; i++) {”,而直接输入fori则是“for (int i = 0; i < ; i++) {”,注意此时10没有自动生成需要你手动输入。
我们可以点击2处新建自己的template,template的缩略词在同一group内不能重复,所以为了不和自带的键重复我们最好新建自己的一个group比如MY,不同的group中的缩略词可以重复。箭头5是描述用来助记的。
我们来自定义一个如下图:

图中是一个非常常用的输入,根据类名来生成log静态变量。你可以看到用$包裹的字符,这个就是上面介绍的参数类型,在生成的代码片段中,如果要输出$,需要用$转义,即输出$则在代码片段中输入$$。系统自带两个预定义的只读变量,$END$和$SELECTION$,$END$代表代码片段展开后光标最终停留的位置(如果有用户自定义变量且需要用户输入的话则会一次停留在用户变量处),默认如果不写$END$光标会停留在最后,如果加和不加效果是一样的。$SELECTION$代表的是你用光标选中的所有字符,属于环绕类型,等会用例子会很明白。用户变量需要我们赋值,点击edit variables,在箭头2处进行编辑。可以输入两种,一种是直接输入字符串(需要用双引号包裹)用的比较少因为是写死的,另一种是idea的预定义函数(即通过下拉菜单选择),比如这里就是取类名。idea有很多预定义的函数,比如日期,行数,方法名,作者等等。一般用到这些预定义的函数就已经足够了,但是有时复杂的输出,就需要使用groovy脚本(下拉菜单groovyScript,这里需要用到的语法很简单)来进行。比如输入方法的所有参数,如下图:

我自定义了一个info(代码片段:"$CLASS$.$METHOD$ linenum:$LINE$, param:{$PARAM$} info:$MY$"$END$),输出了类名、方法名、行数和参数,这些信息在记录日志的时候非常有必要。其中$PARAM$变量就用到了脚本。我们来看下
// methodParameters是预定义函数,其中双引号里的就是脚本,_1占位符只带methodParameters参数
groovyScript("_1.collect { it + ' = [\" + ' + it + ' + \"]'}.join(', ') ", methodParameters())
关于备份和分享:live template文件保存在“{user}\{version}\config\templates”,user是指用户目录,version是idea目录,如我的目录就是C:\Users\chen.IntelliJIdea2017.3\config\templates,其中的文件名以group为名字。也可以在在File->Export Settings对话框中选中live template可以保存配置。
说明:在设置变量的值时有一列是Skip if define,这一列的意思是,如果有值了是否跳过(即光标是否停留),光标停留的位置是变量对话框中的顺序来定的,可以用右边的箭头排序。如果所有的变量填充完了便会跳到$END$变量的位置,如果没有定义$END$则跳到代码片段结尾。
2.3 快捷键
win平台默认的快捷键主要是三个ctrl+j(insert live template)、ctrl+alt+j(sround with live template)和ctrl+alt+t(sround with)。

快捷键是live template中经常需要用到的,所以需要记住。由于每个平台不一样,也有可能有人修改了快捷键,所以我用括号注明了快捷键对应的名字,如果你的idea该快捷键不生效可以直接按图中搜索名字。
- ctrl+j:插入普通的live template
 - ctrl+alt+j:插入包裹的live template
 - ctrl+alt+t:插入包裹的代码片段,这个包含了ctrl+alt+j但是又包含一些系统自带的语句块,比如if,while和for等等。
 
这里就需要重点介绍下包裹的代码片段,其实就是指的你用光标选中的代码。使用这种代码片段需要我们用光标去选择然后输入快捷键ctrl+alt+t或者ctrl+alt+j选中需要的使用的缩略词。在自定义的代码片段中有个自带的$SELECTION$指的就是你用光标选中的代码,在插入代码片段时,就会将你选中的代码插入到$SELECTION$。让我们在实现一个带包裹代码片段的sloge,设置如下:

注意设置中箭头的位置,选择java,表示快捷键应用的上下文。
使用方法: 用鼠标选中代码,输入ctrl+alt+j或者ctrl+alt+t选择sloge。如下图:

2.4 实战
我自定义了几个非常常用的代码片段,分别是
- "info":输出调试信息
 
    // 代码片段
    "$CLASS$.$METHOD$  linenum:$LINE$, param:{$PARAM$} info:$MY$"$END$
    // 变量定义
    $CLASS$:className()
    $METHOD$:methodName()
    $LINE$:lineNumber()
    $PARAM$:groovyScript("_1.collect { it + ' = [\" + ' + it + ' + \"]'}.join(', ') ",      methodParameters())
- "fen":分割线的注释
 
    // 代码片段
    /* ---------------- $E$ -------------- */$END$
- "log":定义日志常量
 
    // 代码片段
    private static final Logger logger= LoggerFactory.getLogger($CLASS$.class);
    // 变量定义
    $CLASS$:className()
- "zhushi":带名字和日期的注释
 
    // 代码片段
    // comment --$USER$-- $D$ ------>$ANNOTATION$
    // 变量定义
    $USER$:"chenfangzhi"
    $D$ :date("YYYY-MM-DD hh:mm:ss")
- "todo":todo注释
 
    // 代码片段
    // todoBy$USER$ ---- $D$ ------>$TODO$
    // 变量定义
    $USER$:"chenfangzhi"
    $D$ :date("YYYY-MM-DD hh:mm:ss")
说明:todo的作用我就不讲解了,这里的第4和第5项可能很像,有很多地方需要标注是谁操作的,现在的项目很多都是多人开发,如果都是使用默认的todo,就会很混乱,这时候我们就需要自己来定义属于自己的todo注释,这时候就需要带上名字。代码片段可以自己定义,可以同时带上todo和名字,这样在查看todo列表的时候就可以进行筛选。如下图:

图上有两个todo,在todo列表中可以点击箭头2处的过滤器筛选自己想要的看到的类型。我就是直接看chen这个类型。2处有个Edit Filter可以编辑过滤类型,很简单的正则匹配。
Idea Live Template代码片段总结的更多相关文章
- 46 个非常有用的 PHP 代码片段
		
在编写代码的时候有个神奇的工具总是好的!下面这里收集了 40+ PHP 代码片段,可以帮助你开发 PHP 项目. 这些 PHP 片段对于 PHP 初学者也非常有帮助,非常容易学习,让我们开始学习吧- ...
 - runnable:在线IDE+代码片段分享
		
在我之前的博客20个最好的在线IDE中列举过很多在线IDE,可以很方便的在云端执行代码,这样在你手头没有编译器时想试个小程序会非常有用. 今天介绍的这个网站runnable把在线IDE和代码片段结合了 ...
 - 一些日常工具集合(C++代码片段)
		
一些日常工具集合(C++代码片段) ——工欲善其事,必先利其器 尽管不会松松松,但是至少维持一个比较小的常数还是比较好的 在此之前依然要保证算法的正确性以及代码的可写性 本文依然会持久更新,因为一次写 ...
 - phpstorm 代码片段使用方法
		
原文链接: http://wwwquan.com/show-66-121-1.html 4.Live Templates代码片断 A)我们先介绍一个代码片段最基本的功能,我们要实现的目标是在html文 ...
 - 如何在VScode中添加代码片段
		
拿 VUE 举例,新建 VUE 文件,输入前缀,出现代码段 文件 ---> 首选项 ---> 用户代码片段 在输入框中输入 vue ,找到 vue.json ,然后在 vue.json ...
 - pycharm自定义代码片段
		
pycharm自定义代码片段 目录 (一)通用阶段 0 .新建.py文件模板:2 0 .pycharm中添加自定义代码片段:一图全知道:3 1 .定义类:classin 描述 ...
 - 【转】46 个非常有用的 PHP 代码片段
		
1. 发送 SMS 在开发 Web 或者移动应用的时候,经常会遇到需要发送 SMS 给用户,或者因为登录原因,或者是为了发送信息.下面的 PHP 代码就实现了发送 SMS 的功能. 为了使用任何的语言 ...
 - PHP必用代码片段
		
在编写代码的时候有个神奇的工具总是好的!下面这里收集了 50+ PHP 代码片段,可以帮助你开发 PHP 项目. 这些 PHP 片段对于 PHP 初学者也非常有帮助,非常容易学习,让我们开始学习吧- ...
 - 分享10个超实用的jQuery代码片段
		
来源:GBin1.com jQuery以其强大的功能和简单的使用成为了前端开发者最喜欢的JS类库,在这里我们分享一组实用的jQuery代码片段,希望大家喜欢! jQuery平滑回到顶端效果 $(doc ...
 
随机推荐
- Leaflet 测试加载高德地图
			
<!DOCTYPE html> <html> <head> <title>Leaflet Quick Start Guide Example</ ...
 - Python 解决Python安装包时提示Unable to find vcvarsall.bat的问题
			
解决Python安装包时提示Unable to find vcvarsall.bat的问题 by:授客 QQ:1033553122 问题 Python安装包时,提示Unable to find v ...
 - MVC与单元测试实践之健身网站(六)-计划的添加与重置
			
健身计划需要使用者自己定制,没有现成的内容可供选择.本篇就是关于健身计划的添加与重置功能的一部分. 一 功能描述 a) 关于计划的定制,决定以周期的方式,比如有人会以一周为周期,然后安排每周的1.3. ...
 - JavaScript 字符串转json格式
			
第一种:浏览器支持的转换方式(Firefox,chrome,opera,safari,ie)等浏览器: JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON. ...
 - asp.net mvc中的后台验证
			
asp.net mvc的验证包含后台验证和前端验证.后台验证主要通过数据注解的形式实现对model中属性的验证,其验证过程发生在model绑定的过程中.前端验证是通过结合jquery.validate ...
 - 软件发布时的 GA、RC、Beta
			
今天在使用 ovirt 的时候,遇到了其 Pre-release 版本并看到如下版本号:ovirt-node-ng-image-update-4.2.7-0.1.rc1.el7.noarch.rpm ...
 - centos-7 虚拟机安装图形界面
			
centos-7 虚拟机安装图形界面 想到安装一个docker环境,于是拿出了以前装的虚拟机centos7,记得装完后,没进行任何配置(默认安装的是命令行界面). 配置网络 现有的虚拟机是没有办法联网 ...
 - GC Ergonomics间接引发的锁等待超时问题排查分析
			
1. 问题背景 上周线上某模块出现锁等待超时,如下图所示: 我虽然不是该模块负责人,但出于好奇,也一起帮忙排查定位问题. 这里的业务背景就是在执行到某个地方时,需要去表中插入一批数据,这批数据需要根据 ...
 - Java面试之五大框架的理解
			
五大框架(springMVC,struts2,spring,mybatis,hibernate) 说说你对springMVC框架的理解? 简要口述(如果感觉说的少可以在完整答案里面挑几条说) Spri ...
 - ES5-ES6-ES7_const声明只读常量
			
const 概述const声明一个只读的常量.一旦声明,常量的值就不能改变.const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值. // const P ...