Xcode Version8.3.3
Android Studio 3.0Canary 4
1:什么是代码片段
Xcode 中叫 code snippets,当在 Xcode 中输入快捷输入码 dowhile 并回车后,会出现如下代码
这就是 code snippets,我们可以创建一些可重用的代码块,并且在任何需要的地方使用这些代码块,它能提高我们的编程效率.可以通过 Xcode->View->Utilities->Show CodeSnippet Library 显示,它的快捷方式是 Option+Control+Command+2,会在Xcode 的右下角看到
上面看到的就是 Xcode 自带的code snippets,它是用 plist 格式 xml 的文件描述的,存储在Xcode包中
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets
用文本编辑器打开
用红箭头指向的 IDECodeSnippetCompletionPrefix key,它的内容就是快捷输入码(Completion Shortcut), IDECodeSnippetContents就是代码块,IDECodeSnippetIdentifier 是唯一标识符,不能重名,如果重名就会覆盖.
2: 如何自定义
比如我们在使用 #paragma mark 的时候,
#pragma mark - UITableViewDelegate
pragma mark 可以让代码看起来整洁,但是每次输入的时候要输入好多字符.我自定义了代码块,输入 pm 回车,就能看到如图
要实现这个非常简单,在文件任意位置输入
#pragma mark - <#title#>
其中 <#和#>是占位符,中间是占位文本.
选中代码块,然后单击并按住代码块,直到文本光标变为箭头光标,接着将代码块拖到箭头指向位置 (code snippet library)中,然后松开鼠标此时会弹出一对话框,通过该对话框可以进行编辑
Title 标题 - 块的名字(出现在代码补全和代码块库列表中)
Summary 简介 - 简单描述下它是干嘛的(只出现在代码块库列表中)
Platform 平台 - 限制可访问该代码块的平台。All iOS macOS tvOS watchOS
Language 语言 - 限制可访问该代码块的语言。常见的有 C,Objective-C,C++,或 Swift
Completion Shortcut 输入码 - 快捷输入码,在这里我输入的是 pm 。Xcode 不会警告冲突 / 重复的输入码,所以一定要确保 新添加的不要和已有的冲突。
Completion Scopes 有效范围 - 限制可访问该代码块的范围。dowhile 语句的自动补全应该只在方法或者函数的实现中有效。下面这些选项可以任意组合:
All 全部
Class Implementation 类实现
Class Interface Methods 类接口方法
Class Interface Variables 类接口变量
Code Expression 代码表达式
Function or Method 函数或方法
Preprocessor Directive 预处理指令
String or Comment 字符串或注释
Top Level 最高层
配置好参数后点击 Done
代码片段存放的位置是~/Library/Developer/Xcode/UserData/CodeSnippets/
咱可以把这个文件夹下的内容进行备份,然后直接拷贝到其他 Mac 的这个位置,就可以使用了.也可以在这个位置修改系统代码块的风格,与前面提到的IDECodeSnippetIdentifier有关.
3:AndroidStudio 中的代码片段
代码片段在 Android Studio 中叫 Live Templates ,比如在类中输入 logt 回车,自动出现
private static final String TAG = "MainActivity";
在函数中输入 logd 回车,自动出现
Log.d(TAG, "onCreate: ");
还有好些IDE 自带的代码片段,查看的位置在
AndroidStudio -> Preferences -> Editor -> Live Templates
AndroidStudio 自带的代码片段 允许你对其进行修改. 修改后点击 Apply 就会在
~/Library/Preferences/AndroidStudio<version>/templates
位置看到一个或多个 XML 文件,这里是以 Group 为单位存储的,就像图中选中的 rouiT 代码片段,如果修改后,存储的文件名就是Android.xml,也可以修改 Group 名.
4:如何自定义
上图中用红色箭头指向的就是自定义 Live Templates需要用到的地方.
为了方便管理,先创建 Template Group,然后再在自己创建的 Group 中创建 Live Template, 然后填写快速输入码Abbreviation, 描述 Description,选中 Reformataccording to style 生成的代码会自动格式化,还有模板代码 Template text,其中&&代表一个变量,中间包裹这个变量的名字,和 Xcode 中的<#和#>类似,又有些不同,因为这里可以对这些变量声明类型,点击 Edit variables,
Name 为变量名字
Expression 变量的预定义函数
Default value 变量默认值
Ship if defined 如果定义跳过,就是光标不停留在该变量处
变量名字 有两个预留的,$END$ 和 $SELECTION$,不会再光标编辑器中出现. $END$表示光标停留的位置, $SELECTION$ 应用于环绕模板,就是用光标选中的代码,替换模板中$SELECTION$变量. 调用方法是选中代码, Code -> Surround whith Live Template 就会弹出定义的环绕模板,然后选择模板就好了.
变量的预定义函数 列举几个常用的,更详细的介绍
https://www.jetbrains.com/help/idea/live-template-variables.html
clipboard() 返回系统剪切板内容
className(sClassName) 返回当前类名
currentPackage() 返回当前包名
date(sDate) 返回当前系统日期
time(sSystemTime) 返回系统时间
fileName(sFileName) 返回当前文件名,带扩展名
lineNumber() 返回当前行号
methodName() 返回函数名
suggestIndexName() 返回建议的索引名称, i 或者 j
suggestVariableName() 返回的建议变量名
编辑变量完成后关闭对话框,就可以选择快速输入码的生效范围,在最下面的 No applicable contexts yet. Define,然后弹出对话框.
Statement 方法中生效
Expression 代码表达式中生效
Declaration 类中生效
其他的参数选项试过后不清楚啥意思,选择好生效范围后,点击Apply 就可以使用了.
扩展:在 AndroidStudio 中还有一个类似的功能,位置在 AndroidStudio -> Preferences -> Editor -> General -> Postfix Completion, 上面有使用前和使用后的例子.