发布于 2024 年 8 月 27 日,星期二
该如何在VS Code中使用代码片段,从基础设置到高级技巧,帮助开发者提高编码效率。本质上是关于通过预定义的代码模板,快速生成常用代码块,减少重复劳动,提升开发速度。内容涵盖了代码片段的创建、管理、以及如何利用变量和动态内容增强其灵活性。通过掌握这些技巧,开发者能够更专注于业务逻辑,而非重复的代码编写,从而在日常工作中实现更高的生产力。
系列首发于公众号『非同质前端札记』https://mp.weixin.qq.com/s?__biz=MzkyOTI2MzE0MQ==&mid=2247485576&idx=1&sn=5ddfe93f427f05f5d126dead859d0dc8&chksm=c20d73c2f57afad4bbea380dfa1bcc15367a4cc06bf5dd0603100e8bd7bb317009fa65442cdb&token=1071012447&lang=zh_CN#rd ,若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。
今天咱们来聊聊 VS Code 里的自定义代码片段。
这玩意儿简直是提升编码效率的神器, 用好了能让你敲代码更方便!
不管你是刚入行的菜鸟还是身经百战的老兵,这篇攻略都能让你在代码片段的世界里玩得飞起。
系好安全带,我们开始起飞啦!
简单说, 代码片段就是一些预先定义好的代码模板。你只需要敲几个字母,噌的一下,一大段代码就蹦出来了。
比如说, 你可以把一个常用的函数结构设置成代码片段,下次需要的时候,只要输入一个简短的触发词,瞬间就能生成整个函数框架。
来, 跟我一步步来:
Ctrl+Shift+P
(Mac 上是 Cmd+Shift+P
)。snippets
",选择 Preferences: Configure User Snippets。JavaScript
。JSON
文件,这就是你的代码片段配置文件。来看个例子:
{ "Console log": { "prefix": "clog", "body": ["console.log('$1');", "$2"], "description": "打印日志到控制台" }}
这里的 "Console log"
是这个片段的名字,"prefix"
是触发词,"body"
是实际的代码内容,"description"
是描述。
好了, 基础的东西我们搞定了。
现在来点更进阶的吧!
占位符是代码片段中最基本也是最强大的功能之一。它们不仅可以让你在插入片段后快速跳转到特定位置, 还能实现更多花样。
基本占位符:
$1
, $2
, $3
等:这些是最简单的占位符。插入片段后,光标会先停在 $1
的位置,按 Tab
键后跳到 $2
,以此类推。$0
:这是最后一个制表位。无论你定义了多少个占位符,$0
永远是终点站。来个例子:
"Basic Function": { "prefix": "func", "body": [ "function ${1:functionName}(${2:params}) {", "\t$0", "}" ], "description": "创建一个基本函数"}
占位符中的默认值:
你可以在占位符中提供默认值,格式是 ${1:defaultValue}
。
"Console Log": { "prefix": "clog", "body": "console.log('${1:你好,世界!}');", "description": "打印日志,带默认值"}
占位符中的选择项:
你还可以在占位符中提供多个选项,让用户选择。格式是 ${1|option1,option2,option3|}
。
"Variable Declaration": { "prefix": "vard", "body": "${1|const,let,var|} ${2:变量名} = ${3:值};", "description": "声明变量,可选择const/let/var"}
VS Code
提供了不少内置变量,可以在代码片段中使用。这些变量会在插入片段时被实际值替换。
常用内置变量:
$TM_FILENAME
: 当前文件的文件名$TM_FILENAME_BASE
: 当前文件的文件名(不含扩展名)$TM_DIRECTORY
: 当前文件所在的目录$TM_FILEPATH
: 当前文件的完整文件路径$CLIPBOARD
: 当前剪贴板中的内容$WORKSPACE_NAME
: 打开的工作区的名称日期和时间变量:
$CURRENT_YEAR
: 当前年份$CURRENT_MONTH
: 当前月份(两位数格式)$CURRENT_DATE
: 当前日期(两位数格式)$CURRENT_HOUR
: 当前小时(24 小时制)$CURRENT_MINUTE
: 当前分钟$CURRENT_SECOND
: 当前秒数来个实用的例子:
"File Header": { "prefix": "header", "body": [ "/**", " * 文件名: $TM_FILENAME", " * 创建时间: $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE $CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND", " * 作者: ${1:$TM_USERNAME}", " * 描述: ${2:这里写文件描述}", " */" ], "description": "插入文件头注释"}
/**
* 文件名: app.js
* 创建时间: 2023-08-29 15:30:00
* 作者: YourUsername
* 描述: 这里写文件描述
*/
你还可以对变量和占位符的值进行各种花式操作。这些转换可以改变文本的大小写、格式等。
案例转换:
${VAR/(.*)/${1:/upcase}}
:转换为大写${VAR/(.*)/${1:/downcase}}
:转换为小写${VAR/(.*)/${1:/pascalcase}}
:转换为帕斯卡命名法(PascalCase
)${VAR/(.*)/${1:/camelcase}}
:转换为驼峰命名法(camelCase
)来个实用的例子:
"React Component": { "prefix": "rcomp", "body": [ "import React from 'react';", "", "const ${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/} = () => {", "\treturn (", "\t\t<div>", "\t\t\t$0", "\t\t</div>", "\t);", "};", "", "export default ${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/};" ], "description": "创建 React 组件,自动使用文件名作为组件名"}
import React from 'react';const App = () => { return <div>$0</div>;};export default App;
这个例子会自动把文件名转换为 PascalCase
,完美符合 React
组件命名规范。
你可以在一个占位符内部再塞一个占位符,这就是嵌套占位符。这招能让你创建更复杂的交互式代码片段。
来个例子:
"Conditional Statement": { "prefix": "ifelse", "body": [ "if (${1:条件}) {", "\t${2:// 条件成立时的代码}", "} else {", "\t${2/^(.*)$/$1/}", "}" ], "description": "创建 if-else 语句,自动复制 if 块的注释到 else 块"}
if (条件) { // 条件成立时的代码} else { // 条件成立时的代码}
这个例子中,无论你在第二个占位符中输入什么,都会被自动复制到 else 块中。挺智能的,是吧?
光说不练假把式,来看看实际应用吧!
React Hooks
组件:"React Hooks Component": { "prefix": "rhc", "body": [ "import React, { useState, useEffect } from 'react';", "", "const ${1:ComponentName} = () => {", "\tconst [${2:state}, set${2/(.*)/${1:/capitalize}/}] = useState(${3:initialState});", "", "\tuseEffect(() => {", "\t\t$0", "\t}, []);", "", "\treturn (", "\t\t<div>", "\t\t\t{${2:state}}", "\t\t</div>", "\t);", "};", "", "export default ${1:ComponentName};" ], "description": "创建一个带有 useState 和 useEffect 的 React 组件"}
import React, { useState, useEffect } from 'react';const ComponentName = () => { const [state, setState] = useState(initialState); useEffect(() => {}, []); return <div>{state}</div>;};export default ComponentName;
异步函数
:"Async Function": { "prefix": "afn", "body": [ "async function ${1:functionName}(${2:params}) {", "\ttry {", "\t\tconst result = await ${3:asyncOperation};", "\t\treturn result;", "\t} catch (error) {", "\t\tconsole.error('Error in ${1:functionName}:', error);", "\t\tthrow error;", "\t}", "}" ], "description": "创建一个带有错误处理的异步函数"}
起个好名字: 给你的代码片段起个好记的名字和前缀。比如我喜欢用 "rcomp" 表示 React 组件。
经常更新: 你的编码习惯在变,记得更新你的代码片段。定期 review 一下自己代码片段库。
别贪多: 代码片段是好东西,但也别啥都做成片段。只为那些真正重复的、复杂的代码创建片段。
向大佬学习: GitHub
上有不少大佬分享他们的代码片段,可以去偷师学艺。有时候你会发现一些超赞的创意!
版本控制: 把你的代码片段文件加入版本控制。我就把我的片段放在一个 Git 仓库里,这样换电脑时也不怕丢失。
定期清理: 时不时清理一下你的代码片段。删掉那些你不再用的,更新那些需要改进的。保持你的片段库整洁有序。
记住, 代码片段的强大之处在于它能让你的编码更快、更准、更一致。
但是,就像所有的工具一样,关键在于怎么用。
别怕尝试和实验,找到最适合你的方式。
随着你越来越熟悉代码片段,你会发现自己的生产力显著提高。
你会有更多的时间和精力专注于解决真正的问题,而不是被繁琐的细节所困扰。
别忘了分享是进步的阶梯。
如果你创建了一些超赞的代码片段,不妨和你的同事或者更大的开发者社区分享。
好了, vscode 代码片段武林秘籍已经传授完毕,现在就看你自己的了。
记住, 实践出真知。
祝你 Coding
愉快, 生产力飞起!✨🚀
感谢阅读,我们下次再见!