制作一個簡單的vscode插件

當前環境情況

操作系統:Windows
項目類型:VS Code 插件(TypeScript 編寫)
Node.js 版本:20.18.1
yarn 版本:1.22.22
npm 版本:10.8.2
npm registry:huawei ------- https://repo.huaweicloud.com/repository/npm/

安裝官方的腳手架來初始化項目

  • 安裝官方手腳架
    yarn global add yo generator-code
    
  • 初始化項目
    yo code
    
    然后根據提示,填寫基本項目基本內容,我這里選擇了 TypeScript

項目結構

hello-vscode-plugin/
├── package.json            # 項目元數據、依賴、腳本及 VS Code 插件配置
├── src/                    # TypeScript 源代碼目錄
│   └── extension.ts        # 插件主入口,核心功能實現
├── out/                    # 編譯后的 JavaScript 文件目錄
│   └── extension.js        # 編譯后的插件主入口文件
├── node_modules/           # 項目依賴包目錄,由 npm 自動生成
├── .vscode/                # VS Code 編輯器相關配置
│   └── settings.json       # 工作區級別的 VS Code 設置
├── tsconfig.json           # TypeScript 編譯配置文件
├── .eslintrc.js            # ESLint 代碼規范配置文件
├── README.md               # 項目說明文檔,介紹插件功能和使用方法
├── LICENSE.md               # MIT 許可證,MIT 許可證是一種寬松、開放源代碼的許可證,適合個人或企業自由使用和二次開發

重要文件內容

extension.ts

import * as vscode from "vscode";
import { toLowerCamelCase } from "./utils";export function activate(context: vscode.ExtensionContext) {console.log('Congratulations, your extension "extensionproject" is now active!');const disposable = vscode.commands.registerTextEditorCommand("hello-vscode-plugin.toLowerCamelCase",(textEditor, edit) => {if (textEditor.selection.isEmpty) {// 未選中文本直接返回return;}const textRange = new vscode.Range(textEditor.selection.start,textEditor.selection.end);const text = textEditor.document.getText(textRange);edit.replace(textRange, toLowerCamelCase(text));});context.subscriptions.push(disposable);
}export function deactivate() {}

utils/index.ts

export const toLowerCamelCase = (str: string) => {if (str.length < 2) {return str.toLowerCase();}const [firstWords, ...otherWords] = str.split("_");return (firstWords.toLowerCase() +otherWords.filter((word) => !!word).map((word) =>word[0].toUpperCase() + word.slice(1, word.length).toLowerCase()).join(""));
};

package.json

{"name": "hello-vscode-plugin","displayName": "hello-vscode-plugin","description": "將枚舉等文本快速轉換為 lowerCamelCase 格式的 VS Code 擴展。","publisher": "Jacky","version": "0.0.2","license": "MIT","repository": {"type": "git","url": "https://git.com/jacky/hello-vscode-plugin"},"engines": {"vscode": "^1.103.0"},"categories": ["Other"],"activationEvents": ["onCommand:hello-vscode-plugin.toLowerCamelCase"],"main": "./out/extension.js","contributes": {"menus": {"editor/context": [{"when": "editorFocus","command": "hello-vscode-plugin.toLowerCamelCase"}]},"commands": [{"command": "hello-vscode-plugin.toLowerCamelCase","title": "toLowerCamelCase","category": "hello-vscode-plugin"}]},"scripts": {"vscode:prepublish": "npm run compile","compile": "tsc -p ./","watch": "tsc -watch -p ./","pretest": "npm run compile && npm run lint","lint": "eslint src","test": "vscode-test"},"devDependencies": {"@types/vscode": "^1.103.0","@types/mocha": "^10.0.10","@types/node": "22.x","@typescript-eslint/eslint-plugin": "^8.39.0","@typescript-eslint/parser": "^8.39.0","eslint": "^9.32.0","typescript": "^5.9.2","@vscode/test-cli": "^0.0.11","@vscode/test-electron": "^2.5.2"}
}

LICENSE.md

# MIT LicenseCopyright (c) 2025 JackyPermission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

README.md

# hello-vscode-plugin將枚舉等文本快速轉換為 lowerCamelCase 格式的 VS Code 擴展。## Features- 支持將選中的文本轉換為 lowerCamelCase 格式
- 通過右鍵菜單快速訪問轉換功能
- 適用于枚舉值、變量名等需要轉換為駝峰命名的場景## Usage1. 在編輯器中選擇需要轉換的文本
2. 右鍵點擊選中的文本
3. 選擇 "toLowerCamelCase" 選項
4. 文本將自動轉換為 lowerCamelCase 格式## Release Notes### 0.0.1Initial release of hello-vscode-plugin extension.---## Following extension guidelinesEnsure that you've read through the extensions guidelines and follow the best practices for creating your extension.* [Extension Guidelines](https://code.visualstudio.com/api/references/extension-guidelines)## Working with MarkdownYou can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux).
* Toggle preview (`Shift+Cmd+V` on macOS or `Shift+Ctrl+V` on Windows and Linux).
* Press `Ctrl+Space` (Windows, Linux, macOS) to see a list of Markdown snippets.## For more information* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)**Enjoy!**

調試

  • 在當前項目中,按F5進入調試模式
  • 然后在其他項目中,進行大寫轉小駝峰,選中大寫內容:
  • 在命令面板(cmd + P)(或在工作臺頂部上面進行搜索)中輸入 >toLowerCamelCase 點擊下方出現的命令后就可以在右下角看到彈出框了
    在這里插入圖片描述
    ![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/52b60dbcde9f43c784a27f1a0b218137.png
    正常轉換就行
    在這里插入圖片描述

打包 vsix

1. 安裝打包工具

首先需要安裝 VS Code 官方提供的打包工具 vsce(Visual Studio Code Extension Manager):

npm install -g @vscode/vsce

2. 準備打包

在打包前,確保插件項目根目錄下的 package.json 文件配置正確,特別是以下字段:

name:插件名稱(必須唯一)
version:版本號(每次發布需遞增)
engines.vscode:支持的 VS Code 版本范圍

3. 執行打包命令

在插件項目的根目錄(package.json 所在目錄)執行:

vsce package

4. 獲取 VSIX 文件

打包成功后,會在當前目錄生成一個 .vsix 文件,文件名格式為:
[插件名稱]-[版本號].vsix(例如 my-extension-0.0.1.vsix)

5. 安裝測試(可選)

可以手動安裝生成的 VSIX 文件驗證:

  1. 在 VS Code 中打開「擴展」面板(Ctrl+Shift+X)
  2. 點擊右上角的「…」菜單,選擇「從 VSIX 安裝」
  3. 選擇生成的 .vsix 文件完成安裝

注意事項

  • 如果插件依賴外部資源,需確保在 package.json 的 files 字段中聲明需要包含的文件 / 目錄
  • 若出現權限錯誤,在 macOS/Linux 系統可嘗試添加 sudo,Windows 系統建議以管理員身份運行命令行
  • 如需發布到 VS Code 市場,需先注冊 Azure DevOps 賬號 并獲取發布令牌

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96610.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96610.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96610.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式專題——10.2 ShardingSphere-JDBC分庫分表實戰與講解

1 分庫分表案例 下面實現一個分庫分表案例&#xff0c;將一批課程信息分別拆分到兩個庫&#xff0c;四個表中&#xff1a; 需提前準備一個 MySQL 數據庫&#xff0c;并在其中創建 Course 表。Course 表的建表語句如下&#xff1a; CREATE TABLE course (cid bigint(0) NOT N…

Digital Clock 4,一款免費的個性化桌面數字時鐘

Digital Clock 4&#xff0c;一款免費的個性化桌面數字時鐘 ** 功能 ** &#xff1a;一款免費的桌面數字時鐘工具&#xff0c;支持多種皮膚、透明度調節和字體樣式自定義&#xff0c;時鐘可自由拖動&#xff0c;支持設置鬧鐘、定時關機、顯示自定義消息等功能&#xff0c;適合想…

學習Python是一個循序漸進的過程,結合系統學習、持續實踐和項目驅動,

學習Python是一個循序漸進的過程&#xff0c;結合系統學習、持續實踐和項目驅動&#xff0c;你會掌握得更好。下面我為你梳理了一個分階段的學習路線和實用建議&#xff0c;希望能幫你高效入門并逐步提升。 &#x1f40d; Python學習指南&#xff1a;從入門到精通 &#x1f5…

vcpkg:面向C/C++的跨平臺庫管理工具軟件配置筆記經驗教程

1、什么是vcpkg 對于使用過Python進行程序設計的開發者們&#xff0c;大多都會對Python的各種庫和依賴&#xff0c;僅僅通過幾條簡單命令行就完成配置的操作感到驚嘆&#xff0c;非常的省事省力。反倒是C/C開發時&#xff0c;要是每個庫都要自己下載源碼編譯或者對環境進行配置…

【Docker】常用幫忙、鏡像、容器、其他命令合集(2)

【Docker】常用幫忙、鏡像、容器、其他命令合集&#xff08;2&#xff09;博主有話說容器命令新建容器并啟動列出所有的運行的容器退出容器docker run -it centos:7.0.1406 /bin/bash指令解析docker exec -it ... bash 、docker run -it ... bash、docker attach [容器] 的exit…

系統編程.9 線程

1.線程概述程序運行起來編程進程&#xff0c;進程由一個個線程構成。eg&#xff1a;沒有啟動的qq時一個程序&#xff0c;啟動后登錄qq&#xff0c;qq是一個進程&#xff0c;實際上進程什么都沒做&#xff0c;只是提供了需要的資源&#xff0c;打開聊天框可以和別人進行通信&…

2.10組件間的通信

1.Vue組件的嵌套關系1.1認識組件的嵌套前面我們是將所有的邏輯放到一個 App.vue 中&#xff1b;在之前的案例中&#xff0c;我們只是創建了一個組件 App&#xff1b;如果我們一個應用程序所有的邏輯都放在一個組件中&#xff0c;那么這個組件就會變成非常的臃腫和難以維護&…

Mybatis-Plus學習筆記

目錄 一、MyBatis-Plus簡介 二、MyBatisPlus使用的基本流程&#xff1a; &#xff08;1&#xff09;引入MybatisPlus依賴&#xff0c;代替MyBatis依賴 &#xff08;2&#xff09;自定義Mapper繼承BaseMapper ?編輯&#xff08;3&#xff09;在實體類上添加注解聲明表信息…

Day22 用C語言編譯應用程序

文章目錄1. 保護操作系統5&#xff08;harib19a&#xff09;2. 幫助發現bug&#xff08;harib19b&#xff09;3. 強制結束應用程序&#xff08;harib19c&#xff09;4. 用C語言顯示字符串&#xff08;harib19e&#xff09;5. 顯示窗口&#xff08;harib19f&#xff09;1. 保護操…

簡單學習HTML+CSS+JavaScript

一、HTML HTML被稱為 超文本標記語言&#xff0c;是由一系列標簽構成的語言。 下面介紹HTML中的標簽&#xff1a; &#xff08;一&#xff09;HTML文件基本結構 <!DOCTYPE html><html><head><title>Document</title></head> <body&…

強化學習中重要性采樣

PPO 中重要性采樣 https://github.com/modelscope/ms-swift/blob/main/docs/source/Instruction/GRPO/GetStarted/GRPO.md樂&#xff0c;這個網頁中是的groundtruth是錯誤的&#xff08;可能是為了防止抄襲&#xff09;。一些例子 0. 池塘養魚的一個例子 想象一下&#xff0c;你…

《樹與二叉樹詳解:概念、結構及應用》

目錄 一. 樹的概念和結構 1.1 樹的基本概念 1.2 樹的結構特點 二. 樹的表示方法和實際運用 2.1 孩子 - 兄弟表示法&#xff08;Child-Sibling Representation&#xff09; 2.2 樹的實際應用場景 三. 二叉樹的概念 3.1 二叉樹的核心定義 3.2 二叉樹的基本分類 四. 二叉…

Qt/C++,windows多進程demo

1. 項目概述 最近研究了一下Qt/C框架下&#xff0c;windows版本的多進程編寫方法&#xff0c;實現了一個小demo。下面詳細介紹一下。 MultiProcessDemo是一個基于Qt框架實現的多進程應用程序示例&#xff0c;展示了如何在Windows平臺上通過共享內存和事件機制實現進程間通信。該…

Android SystemServer 系列專題【篇五:UserController用戶狀態控制】

本篇接著SystemServer的啟動流程&#xff0c;圍繞SystemServer最后階段關于主用戶的啟動和解鎖的流程&#xff0c;作為切入點&#xff0c;來看看SystemServer是如何講用戶狀態同步到所有的系統級服務中。ssm.onStartUserssm.onUnlockingUserssm.onUnlockedUser本篇先介紹UserCo…

推薦使用 pnpm 而不是 npm

npm 的局限性 磁盤空間浪費在 npm 早期版本中&#xff0c;每個項目的node_modules目錄都會完整復制所有依賴包&#xff0c;即使多個項目依賴同一個包的相同版本&#xff0c;也會重復存儲。這導致磁盤空間被大量占用&#xff0c;隨著項目數量的增加&#xff0c;存儲成本顯著上升…

Transformer實戰(18)——微調Transformer語言模型進行回歸分析

Transformer實戰&#xff08;18&#xff09;——微調Transformer語言模型進行回歸分析0. 前言1. 回歸模型2. 數據處理3. 模型構建與訓練4. 模型推理小結系列鏈接0. 前言 在自然語言處理領域中&#xff0c;預訓練 Transformer 模型不僅能勝任離散類別預測&#xff0c;也可用于連…

【Linux】【實戰向】Linux 進程替換避坑指南:從理解 bash 阻塞等待,到親手實現能執行 ls/cd 的 Shell

前言&#xff1a;歡迎各位光臨本博客&#xff0c;這里小編帶你直接手撕&#xff0c;文章并不復雜&#xff0c;愿諸君耐其心性&#xff0c;忘卻雜塵&#xff0c;道有所長&#xff01;&#xff01;&#xff01;&#xff01; IF’Maxue&#xff1a;個人主頁&#x1f525; 個人專欄…

linux常用命令 (3)——系統包管理

博客主頁&#xff1a;christine-rr-CSDN博客 ????? ?? hi&#xff0c;大家好&#xff0c;我是christine-rr ! 今天來分享一下linux常用命令——系統包管理 目錄linux常用命令---系統包管理&#xff08;一&#xff09;Debian 系發行版&#xff08;Ubuntu、Debian、Linux …

YOLOv8 mac-intel芯片 部署指南

&#x1f680; 在 Jupyter Notebook 和 PyCharm 中使用 Conda 虛擬環境&#xff08;YOLOv8 部署指南&#xff0c;Python 3.9&#xff09; YOLOv8 是 Ultralytics 開源的最新目標檢測模型&#xff0c;輕量高效&#xff0c;支持分類、檢測、分割等多種任務。 在 Mac&#xff08;…

【高等數學】第十一章 曲線積分與曲面積分——第六節 高斯公式 通量與散度

上一節&#xff1a;【高等數學】第十一章 曲線積分與曲面積分——第五節 對坐標的曲面積分 總目錄&#xff1a;【高等數學】 目錄 文章目錄1. 高斯公式2. 沿任意閉曲面的曲面積分為零的條件3. 通量與散度1. 高斯公式 設空間區域ΩΩΩ是由分片光滑的閉曲面ΣΣΣ所圍成&#x…