前言

系列首发于公众号『非同质前端札记』 ,若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。

今天咱们来聊聊 VS Code 里的自定义代码片段

这玩意儿简直是提升编码效率的神器, 用好了能让你敲代码更方便!

不管你是刚入行的菜鸟还是身经百战的老兵,这篇攻略都能让你在代码片段的世界里玩得飞起。

系好安全带,我们开始起飞啦!

代码片段是啥玩意儿?

简单说, 代码片段就是一些预先定义好的代码模板。你只需要敲几个字母,噌的一下,一大段代码就蹦出来了。

比如说, 你可以把一个常用的函数结构设置成代码片段,下次需要的时候,只要输入一个简短的触发词,瞬间就能生成整个函数框架。

为啥要用这玩意儿?

  1. 省时间: 再也不用重复敲那些烦人的样板代码了。
  2. 少出错: 预先定义好的代码片段能避免一些低级错误。
  3. 保持一致: 团队可以共用一套代码片段,保证代码风格统一。
  4. 提高效率: 快速生成复杂的代码结构,让你专注于真正的逻辑实现。

怎么整一个自己的代码片段?

来, 跟我一步步来:

  1. 打开 VS Code,按下 Ctrl+Shift+P(Mac 上是 Cmd+Shift+P)。
  2. 输入 "snippets",选择 Preferences: Configure User Snippets
  3. 选你要创建片段的语言,比如 JavaScript
  4. VS Code 会打开一个 JSON 文件,这就是你的代码片段配置文件。

来看个例子:

{
    "Console log": {
        "prefix": "clog",
        "body": ["console.log('$1');", "$2"],
        "description": "打印日志到控制台"
    }
}

这里的 "Console log" 是这个片段的名字,"prefix" 是触发词,"body" 是实际的代码内容,"description" 是描述。

进阶技巧

好了, 基础的东西我们搞定了

现在来点更进阶的吧!

1. 占位符和制表位

占位符是代码片段中最基本也是最强大的功能之一。它们不仅可以让你在插入片段后快速跳转到特定位置, 还能实现更多花样。

基本占位符:

  • $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"
}

2. 变量

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
 * 描述: 这里写文件描述
 */

3. 转换

你还可以对变量和占位符的值进行各种花式操作。这些转换可以改变文本的大小写、格式等。

案例转换:

  • ${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 组件命名规范。

4. 嵌套占位符

你可以在一个占位符内部再塞一个占位符,这就是嵌套占位符。这招能让你创建更复杂的交互式代码片段。

来个例子:

"Conditional Statement": {
  "prefix": "ifelse",
  "body": [
    "if (${1:条件}) {",
    "\t${2:// 条件成立时的代码}",
    "} else {",
    "\t${2/^(.*)$/$1/}",
    "}"
  ],
  "description": "创建 if-else 语句,自动复制 if 块的注释到 else 块"
}
  • 使用结果:
if (条件) {
    // 条件成立时的代码
} else {
    // 条件成立时的代码
}

这个例子中,无论你在第二个占位符中输入什么,都会被自动复制到 else 块中。挺智能的,是吧?

实用的代码片段例子

光说不练假把式,来看看实际应用吧!

  1. 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;
  1. 异步函数:
"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": "创建一个带有错误处理的异步函数"
}

小贴士

  1. 起个好名字: 给你的代码片段起个好记的名字和前缀。比如我喜欢用 "rcomp" 表示 React 组件。

  2. 经常更新: 你的编码习惯在变,记得更新你的代码片段。定期 review 一下自己代码片段库。

  3. 别贪多: 代码片段是好东西,但也别啥都做成片段。只为那些真正重复的、复杂的代码创建片段。

  4. 向大佬学习: GitHub 上有不少大佬分享他们的代码片段,可以去偷师学艺。有时候你会发现一些超赞的创意!

  5. 版本控制: 把你的代码片段文件加入版本控制。我就把我的片段放在一个 Git 仓库里,这样换电脑时也不怕丢失。

  6. 定期清理: 时不时清理一下你的代码片段。删掉那些你不再用的,更新那些需要改进的。保持你的片段库整洁有序。

总结

记住, 代码片段的强大之处在于它能让你的编码更快、更准、更一致。

但是,就像所有的工具一样,关键在于怎么用

别怕尝试和实验,找到最适合你的方式

随着你越来越熟悉代码片段,你会发现自己的生产力显著提高。

你会有更多的时间和精力专注于解决真正的问题,而不是被繁琐的细节所困扰。

别忘了分享是进步的阶梯

如果你创建了一些超赞的代码片段,不妨和你的同事或者更大的开发者社区分享。

好了, vscode 代码片段武林秘籍已经传授完毕,现在就看你自己的了。

记住, 实践出真知。

祝你 Coding 愉快, 生产力飞起!

感谢阅读,我们下次再见!

VS Code 代码片段指南: 从基础到高级技巧的更多相关文章

  1. VS里的 代码片段(Code snippet)很有用,制作也很简单

    工欲善其事必先利其器,而 Visual Studio 就是我们的开发利器. 上一篇文章,介绍了一个很棒的快捷键,如果你还没用过这个快捷键,看完之后应该会豁然开朗.如果你已经熟练的应用它,也会温故而知新 ...

  2. Code Snippets 代码片段

    Code Snippets 代码片段       1.Title : 代码片段的标题 2.Summary : 代码片段的描述文字 3.Platform : 可以使用代码片段的平台,有IOS/OS X/ ...

  3. Visual Studio 如何使用代码片段Code Snippet提高编程速度!!!

      使用Code Snippet简化Coding 在开发的项目的时候,你是否经常遇到需要重复编写一些类似的代码,比如是否经常会使用 for.foreach ? 在编写这两个循环语句的时候,你是一个字符 ...

  4. 在IDE中用Bing Code Search直接查找代码片段并且插入

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在IDE中用Bing Code Search直接查找代码片段并且插入.

  5. 2019-01-29 VS Code创建自定义Python代码片段

    续前文[日常]Beyond的歌里最多是"唏嘘"吗? - Python分词+词频最后的想法, 发现VS Code支持用户自定义代码片段: Creating your own snip ...

  6. [搬运] 将 Visual Studio 的代码片段导出到 VS Code

    原文 : A Visual Studio to Visual Studio Code Snippet Converter 作者 : Rick Strahl 译者 : 张蘅水 导语 和原文作者一样,水弟 ...

  7. VS code自定义用户代码片段snippet

    打开VS code,“文件-首选项-用户代码片段-选择新建全局代码片段文件 “ 属性介绍:prefix   就是你自定义的快捷键 body    就是你自定义的代码片段 description 就是这 ...

  8. Sublime Text3—Code Snippets(自定义代码片段)

    摘要 程序员总是会不断的重复写一些简单的代码片段,为了提高编码效率,我们可以把经常用到的代码保存起来再调用. 平时用sublime安装各种插件,使用Tab键快速补全,便是snippets(可译为代码片 ...

  9. VS Code 折腾记 - (6) 基本配置/快捷键定义/代码片段的录入(snippet)

    前言 本来分成三篇来写的,但是想了想没必要,大家都是聪明人...简单的东西点一下就晓得了. 基本配置 快捷键自定义(Ctrl+K Ctrl + S) 那个when支持条件表达式返回一个布尔值 支持的快 ...

  10. 利用 share code 插件同步代码片段

    利用 Settings Sync可以同步 VS code 配置,但它只能同步插件,利用  Settings Sync 再配合 share code 插件可以同步自定义代码片段,可以把 VS code ...

随机推荐

  1. C#——接口

    先来看看微软官方对接口的定义与说明. 接口定义协定. 实现接口的类或结构必须遵循它的协定. 接口可以从多个基接口继承,类或结构可以实现多个接口. 接口可以包含方法.属性.事件和索引器. 接口本身不提供 ...

  2. Python 生成条形码、二维码 (Code 128、EAN-13、QR code等)

    条形码和二维码是现代信息交换和数据存储的重要工具,它们将信息以图形的形式编码,便于机器识别和数据处理,被广泛应用于物流.零售.医疗.教育等各领域.本文将介绍如何使用Python快速生成各种常见的条形码 ...

  3. UE4 蓝图查找Actor和Actor标签

    在用UE4 开发数字孪生应用的过程中,有很多业务会涉及到actor的查找,和actor标签的使用. 比如下面的场景中,找出所有的物联网设备进行标注. 通过类查找actor 通过类查找actor,可以查 ...

  4. CF1468N 题解

    洛谷链接&CF 链接 题目简述 共有 \(T\) 组数据,对于每组数据: 有三个桶,五种垃圾,每个桶有固定的容量. 前三种垃圾分别放入三种桶中,第四种垃圾可以放进 \(1,3\) 桶中,第五种 ...

  5. SQL:聚集索引和非聚集索引

    聚集(clustered)索引,也叫聚簇索引 定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引. 注:第一列的地址表示该行数据在磁盘中的物理地址,后面三列 ...

  6. 周末玩一下云技术,kvm 相关笔记

    由于需要将企业的很贵的显卡和主机装在一个虚拟主机,用来跑  ue5 和 sd3  用来给用户临时使用,但是怎么将主机虚拟出来成多个主机呢,自己没有有钱请不起人,只能自己学一下虚拟化技术,第一步主机开启 ...

  7. fragment的查找和移除

    FragmentManager fragmentmanger = getSupportFragmentManager(); FragmentTransaction fragmenttransactio ...

  8. 浅谈Git架构和如何避免代码覆盖的事故

    浅谈Git架构和如何避免代码覆盖的事故 Git 不同于 SVN 的地方在于, Git 是分布式的版本管理系统, 所有的客户端和服务器都保存了一份代码, 涉及到仓库仓之间的同步, 所以处理不当极易造成冲 ...

  9. 支付宝退款和结果查询接口简单实现(.Net 7.0)

    〇.前言 支付宝对 .Net 的支持还是比较充分的,在每个接口文档中都有关于 C# 语言的示例,这样就大大降低了对接的难度,很容易上手. 官方接口文档地址:退款-alipay.trade.refund ...

  10. python yield关键字作用

    python yield关键字作用 1,是当前对象变成一个可迭代对象 def frange(start,stop,step): x = start while x<stop: yield x x ...