VS Code 代码片段指南: 从基础到高级技巧
前言
“
系列首发于公众号『非同质前端札记』 ,若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。
今天咱们来聊聊 VS Code 里的自定义代码片段。
这玩意儿简直是提升编码效率的神器, 用好了能让你敲代码更方便!
不管你是刚入行的菜鸟还是身经百战的老兵,这篇攻略都能让你在代码片段的世界里玩得飞起。
系好安全带,我们开始起飞啦!
代码片段是啥玩意儿?
简单说, 代码片段就是一些预先定义好的代码模板。你只需要敲几个字母,噌的一下,一大段代码就蹦出来了。
比如说, 你可以把一个常用的函数结构设置成代码片段,下次需要的时候,只要输入一个简短的触发词,瞬间就能生成整个函数框架。
为啥要用这玩意儿?
省时间: 再也不用重复敲那些烦人的样板代码了。 少出错: 预先定义好的代码片段能避免一些低级错误。 保持一致: 团队可以共用一套代码片段,保证代码风格统一。 提高效率: 快速生成复杂的代码结构,让你专注于真正的逻辑实现。
怎么整一个自己的代码片段?
来, 跟我一步步来:
打开 VS Code,按下 Ctrl+Shift+P
(Mac 上是Cmd+Shift+P
)。输入 " snippets
",选择 Preferences: Configure User Snippets。选你要创建片段的语言,比如 JavaScript
。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 块中。挺智能的,是吧?
实用的代码片段例子
光说不练假把式,来看看实际应用吧!
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
愉快, 生产力飞起!
感谢阅读,我们下次再见!
VS Code 代码片段指南: 从基础到高级技巧的更多相关文章
- VS里的 代码片段(Code snippet)很有用,制作也很简单
工欲善其事必先利其器,而 Visual Studio 就是我们的开发利器. 上一篇文章,介绍了一个很棒的快捷键,如果你还没用过这个快捷键,看完之后应该会豁然开朗.如果你已经熟练的应用它,也会温故而知新 ...
- Code Snippets 代码片段
Code Snippets 代码片段 1.Title : 代码片段的标题 2.Summary : 代码片段的描述文字 3.Platform : 可以使用代码片段的平台,有IOS/OS X/ ...
- Visual Studio 如何使用代码片段Code Snippet提高编程速度!!!
使用Code Snippet简化Coding 在开发的项目的时候,你是否经常遇到需要重复编写一些类似的代码,比如是否经常会使用 for.foreach ? 在编写这两个循环语句的时候,你是一个字符 ...
- 在IDE中用Bing Code Search直接查找代码片段并且插入
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在IDE中用Bing Code Search直接查找代码片段并且插入.
- 2019-01-29 VS Code创建自定义Python代码片段
续前文[日常]Beyond的歌里最多是"唏嘘"吗? - Python分词+词频最后的想法, 发现VS Code支持用户自定义代码片段: Creating your own snip ...
- [搬运] 将 Visual Studio 的代码片段导出到 VS Code
原文 : A Visual Studio to Visual Studio Code Snippet Converter 作者 : Rick Strahl 译者 : 张蘅水 导语 和原文作者一样,水弟 ...
- VS code自定义用户代码片段snippet
打开VS code,“文件-首选项-用户代码片段-选择新建全局代码片段文件 “ 属性介绍:prefix 就是你自定义的快捷键 body 就是你自定义的代码片段 description 就是这 ...
- Sublime Text3—Code Snippets(自定义代码片段)
摘要 程序员总是会不断的重复写一些简单的代码片段,为了提高编码效率,我们可以把经常用到的代码保存起来再调用. 平时用sublime安装各种插件,使用Tab键快速补全,便是snippets(可译为代码片 ...
- VS Code 折腾记 - (6) 基本配置/快捷键定义/代码片段的录入(snippet)
前言 本来分成三篇来写的,但是想了想没必要,大家都是聪明人...简单的东西点一下就晓得了. 基本配置 快捷键自定义(Ctrl+K Ctrl + S) 那个when支持条件表达式返回一个布尔值 支持的快 ...
- 利用 share code 插件同步代码片段
利用 Settings Sync可以同步 VS code 配置,但它只能同步插件,利用 Settings Sync 再配合 share code 插件可以同步自定义代码片段,可以把 VS code ...
随机推荐
- logo2
- Java异步判断线程池所有任务是否执行完成的方法
1.使用ExecutorService和CountDownLatch的方法示例 在Java中,当我们使用线程池(如ExecutorService)来执行异步任务时,常常需要知道所有任务是否都已经完成. ...
- IP协议学习笔记
目录 IP地址格式 IP分类 CIDR 和 子网掩码介绍 NAT+公网.私网地址 CIDR 与 VLSM VLSM 子网划分案例 练习 Reference IP的作用类似物理世界中的地址,用于定位机器 ...
- leetcode 中等(设计):[146, 155, 208, 211, 284, 304, 307, 341, 355, 380]
目录 146. LRU 缓存 155. 最小栈 208. 实现 Trie (前缀树) 211. 添加与搜索单词 - 数据结构设计 284. 顶端迭代器 304. 二维区域和检索 - 矩阵不可变 307 ...
- oeasy教您玩转linux010206toilet
我们来回顾一下 上一部分我们都讲了什么? 用apt查询并下载了figlet 玩了一下字符画 设置了字符画的字体 但是没有修改颜色 这次我们来找找另一个命令toilet apt search toile ...
- oeasy教您玩转vim - 87 - # 内容查找grep命令
内容查找 grep 回忆 上次我们尝试了一下各种在vi中执行外部程序 可以排序 可以改大小写 还可以用管道 直接对于缓冲buffer文件进行操作 还是很方便的 其实还有一个外部命令很重要 根据内容 ...
- Midnight Commander (MC)
Midnight Commander GNU Midnight Commander 是一个可视化文件管理器,根据 GNU 通用公共许可证获得许可,因此有资格成为自由软件.它是一个功能丰富的全屏文本模式 ...
- typora下载安装以及notepad++下载安装
notepad++下载安装 找到浏览器输入:notepad或者 https://notepad-plus-plus.org/downloads/ 官网下载即可使用 如果官网崩了,可以在微信公众号:A软 ...
- c++17 auto非类型模板参数
//用auto非类型模板参数 #include <iostream> using namespace std; template<auto c> auto foot() { c ...
- STM32F103 SPI详解及示例代码
1 SPI协议详解 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串 ...