普通视图

发现新文章,点击刷新页面。
今天 — 2025年8月18日首页

2025.8.18实验室【代码跑酷指南】Jupyter Notebook程序员的魔法本:cpolar内网穿透实验室第622个成功挑战

软件名称:Jupyter Notebook 操作系统支持: 全平台通吃!Windows、Linux、macOS都能玩,甚至还能在树莓派上开个“迷你数据科学工作站”。 软件介绍 Jupyter是“交互式
昨天以前首页

React上下文之useContext

2025年8月13日 16:54

useContext 使用场景

. 组件的嵌套层级很深,当父组件想把数据共享给最深层的子组件时向组件树深层传递数据

. 图示:

useContext.png

useContext 语法格式

import React, { useContext } from 'react'

const [theme, setTheme] = useState(null);
//1. 在全局创建 Context 对象
const ThemeContext = React.createContext(theme)

//2. 在父组件中使用 Context 提供数据
const App = () => {
  return <ThemeContext value={theme}>    ...
  </ThemeContext>
}

//3. 在子组件中使用 useContext 使用数据
const Son = () => {
  const myCtx = useContext(ThemeContext)
  return <div></div>
}

Context 基础用法

  • 在父组件中,调用 React.createContext 向下共享数据;在子组件中调用 useContext() 获取数据。
import React, { useState, useContext } from 'react'

// 声明 TS 类型
type ContextType = { count: number; setCount: React.Dispatch<React.SetStateAction<number>> }

// 1. 创建 Context 对象
const AppContext = React.createContext<ContextType>({} as ContextType)

export const LevelA: React.FC = () => {
  const [count, setCount] = useState(0)

  return (
    <div style={{ padding: 30, backgroundColor: 'lightblue', width: '50vw' }}>
      <p>count:{count}</p>
      <button onClick={() => setCount((prev) => prev + 1)}>+1</button>

      <AppContext.Provider value={{ count, setCount }}>
        <LevelB />
      </AppContext.Provider>
    </div>
  )
}

export const LevelB: React.FC = () => {
  return (
    <div style={{ padding: 30, backgroundColor: 'lightgreen' }}>
      <LevelC />
    </div>
  )
}

export const LevelC: React.FC = () => {
  const ctx = useContext(AppContext)

  return (
    <div style={{ padding: 30, backgroundColor: 'lightsalmon' }}>
      <p>count值是:{ctx.count}</p>
      <button onClick={() => ctx.setCount((prev) => prev + 1)}>+1</button>
      <button onClick={() => ctx.setCount(0)}>重置</button>
    </div>
  )
}

非侵入式 Context

  • 把 Context 封装到独立的 Wrapper 函数式组件中- 非侵入式 Context 不会影响组件的结构,只会在组件树中创建一个共享的 Context 对象。
// 声明 TS 类型
type ContextType = { count: number; setCount: React.Dispatch<React.SetStateAction<number>> }
// 创建 Context 对象
const AppContext = React.createContext<ContextType>({} as ContextType)

// 定义独立的 Wrapper 组件,被 Wrapper 嵌套的子组件会被 Provider 注入数据
export const AppContextWrapper: React.FC<React.PropsWithChildren> = (props) => {
  // 1. 定义要共享的数据
  const [count, setCount] = useState(0)
  // 2. 使用 AppContext.Provider 向下共享数据
  return <AppContext value={{ count, setCount }}>{props.children}</AppContext>
}

  • 在 App.tsx 中使用 AppContextWrapper 包裹
import React from 'react'
import { AppContextWrapper } from '@/xxx.tsx'

const App: React.FC = () => {
  return (
    <AppContextWrapper>
      <!-- AppContextWrapper 中嵌套使用了 LevelA 组件,形成了父子关系 -->
      <!-- LevelA 组件会被当做 children 渲染到 Wrapper 预留的插槽中 -->
      <LevelA />
    </AppContextWrapper>
  )
}

export default App
  • LevelC 组件中使用 useContext 获取数据
export const LevelC: React.FC = () => {
  // 使用 useContext 接收数据
  const ctx = useContext(AppContext)

  return (
    <div style={{ padding: 30, backgroundColor: 'lightsalmon' }}>
      <p>count值是:{ctx.count}</p>
      <button onClick={() => ctx.setCount((prev) => prev + 1)}>+1</button>
      <button onClick={() => ctx.setCount(0)}>重置</button>
    </div>
  )
}

进阶 useContext 结合 useReducer 使用场景

  • 定义 reducer 函数
function tasksReducer(tasks, action) {
  switch (action.type) {
    case 'added': {
      return [...tasks, {
        id: action.id,
        text: action.text,
        done: false
      }];
    }
    case 'changed': {
      return tasks.map(t => {
        if (t.id === action.task.id) {
          return action.task;
        } else {
          return t;
        }
      });
    }
    case 'deleted': {
      return tasks.filter(t => t.id !== action.id);
    }
    default: {
      throw Error('Unknown action: ' + action.type);
    }
  }
}

const initialTasks = [
  { id: 0, text: 'Philosopher’s Path', done: true },
  { id: 1, text: 'Visit the temple', done: false },
  { id: 2, text: 'Drink matcha', done: false }
];
  • 在根组件中创建 Context 对象 并抽离成独立组件
import { createContext, useContext, useReducer } from 'react';

export const TasksContext = createContext(null);

export function TasksProvider({ children }) {
  const [tasks, dispatch] = useReducer(
    tasksReducer,
    initialTasks
  );

  return (
    <TasksContext value={{ tasks , dispatch }}>
        {children}
    </TasksContext>
  );
}
  • 在根组件中使用 TasksProvider 包裹子组件
export default function TaskApp() {
  return (
    <TasksProvider>
      <AddTask />
      <TaskList />
    </TasksProvider>
  );
}
  • 在子组件中使用 useContext 获取数据
import { useState, useContext } from 'react';
import { TasksContext } from './TasksContext.js';

export default function AddTask() {
  const [text, setText] = useState('');
  const { dispatch } = useContext(TasksContext);

  function handleAdd() {
    setText('');
    dispatch({
      type: 'added',
      id: nextId++,
      text: text,
    }); 
  }
  return (
    <>
      <input
        placeholder="Add task"
        value={text}
        onChange={e => setText(e.target.value)}
      />
      <button onClick={() => handleAdd()}>Add</button>
    </>
  );
}

8.12实验室 指尖魔法变出艺术感 Excalidraw:cpolar内网穿透实验室第495个成功挑战

NO.495  Excalidraw-01.png

软件名称:Excalidraw

操作系统支持:Windows/macOS/Linux/手机浏览器(全平台无压力)

软件介绍:

Excalidraw 是一款“手残党救星”级的电子白板工具,主打极简操作和自然画风。无论是随手涂鸦、会议记录还是架构设计,都能像在真实纸张上画画一样流畅。支持实时协作、链接分享,甚至能导出成PNG/JPG/PDF等格式,适合学生、职场人、教育者和创意工作者。

NO.495  Excalidraw-02.png

Excalidraw × 手绘魔法:你的创意永不掉线!

  • “手残友好”模式:线条自动平滑但保留手写质感,连画直线都不用担心歪斜。
  • 超级协作:链接一甩,队友就能在线帮你补全脑暴图,比微信传照片快十倍。
  • 一键变身专业工具:支持插入文本框、数学公式甚至Markdown代码块,从涂鸦到PPT配图无缝衔接。

NO.495  Excalidraw-03.png

手绘魔法的三大应用场景

  1. 学生党课后救星
    • 爽点:用Excalidraw随手画出带表情包的思维导图,复习时笑到崩溃!
  2. 团队远程头脑风暴
    • 爽点:Excalidraw+共享链接=实时协作的“云端草稿本”,连老板都能用手机涂鸦批注。
  3. 设计师快速原型测试
    • 爽点:5分钟画出带箭头和备注的UI草稿,导出高清图直接发给开发。

NO.495  Excalidraw-04.png

cpolar × Excalidraw = 手绘自由不设限!

  • 突破局域网限制:如果把Excalidraw部署到本地服务器,用Cpolar一行命令就能生成外网访问链接。
  • 场景示例:公司内网禁止使用第三方协作工具?用Cpolar让远程同事也能实时帮你画“老板想要的那张图”!
  • 安全放心:Cpolar支持自定义域名和加密通道,手绘创意不被偷走。

cpolar将内网穿透简单到只要三步! 1.下载安装 → 2. 输入要穿透的端口号 → 3. 立刻获得专属访问链接。

NO.495  Excalidraw-05.png

组合优势

Excalidraw是当代人的“数字素描本”,用最自然的方式把脑中的创意变现实;而Cpolar则像给它装上翅膀,让协作突破物理限制。无论是学生、职场人还是设计师,这对CP都能让你的灵感从指尖飞向世界!

这么好的组合赶紧去安装吧,教程如下👇

本文主要介绍如何在Ubuntu系统使用Docker部署开源白板工具Excalidraw,并结合cpolar内网穿透工具实现公网远程访问绘制流程图。

image-20240206172031658

1. 安装Docker

本教程操作环境为Linux Ubuntu系统,在开始之前,我们需要先安装Docker。

在终端中执行下方命令:

添加Docker源

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装Dokcer包

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

通过运行映像来验证 Docker 引擎安装是否成功

sudo docker run hello-world

2. 使用Docker拉取Excalidraw镜像

sudo docker pull excalidraw/excalidraw

image-20240206172328932

然后执行查看镜像命令:

sudo docker images

image-20240206172422782

可以看到成功拉取了Excalidraw镜像。

3. 创建并启动Excalidraw容器

成功拉取Excalidraw镜像后,我们可以使用该镜像创建并运行一个Excalidraw容器。

在终端执行以下命令:

$ sudo docker run -d --name excalidraw -p 5000:80 excalidraw/excalidraw

参数说明:

  • –name excalidraw:本例容器名称为excalidraw,大家可以自己起名。
  • -p 5000:80: 端口进行映射,将本地 5000 端口映射到容器内部的 80 端口。
  • -d :设置容器在在后台一直运行。

image-20240206172707031

然后执行下方命令查看容器是否正在运行:

sudo docker ps

image-20240206172810409

可以看到刚才创建的Excalidraw容器正在运行中。

4. 本地连接测试

现在我们可以通过浏览器直接访问 localhost:5000 端口的 Excalidraw 服务:

image-20240206172909607

可以看到,本地连接 Excalidraw 服务测试成功。

5. 公网远程访问本地Excalidraw

不过我们目前只能在本地连接刚刚使用docker部署的Excalidraw服务,如果身在异地,想要远程访问在本地部署的Excalidraw容器,但又没有公网ip怎么办呢?

我们可以使用cpolar内网穿透工具来实现无公网ip环境下的远程访问需求。

5.1 内网穿透工具安装

下面是安装cpolar步骤:

cpolar官网地址: www.cpolar.com

  • 使用一键脚本安装命令
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
  • 向系统添加服务
sudo systemctl enable cpolar
  • 启动cpolar服务
sudo systemctl start cpolar

cpolar安装成功后,在外部浏览器上访问Linux 的9200端口即:【http://服务器的局域网ip:9200】,使用cpolar账号登录,登录后即可看到cpolar web 配置界面,结下来在web 管理界面配置即可。

image-20230831171159175

5.2 创建远程连接公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,注意不要与已有的隧道名称重复,本例使用了:exdraw
  • 协议:http
  • 本地地址:5000
  • 域名类型:随机域名
  • 地区:选择China Top

点击创建

image-20240207095612018

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了两个公网地址,接下来就可以在其他电脑(异地)上,使用任意一个地址在浏览器中访问即可。

image-20240207095720991

如下图所示,成功实现在公网环境访问本地部署的Excalidraw服务!

image-20240207095940715

小结

为了方便演示,我们在上边的操作过程中使用了cpolar生成的HTTP公网地址隧道,其公网地址是随机生成的。

这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址是随机生成,这个地址在24小时内会发生随机变化,更适合于临时使用。

如果有长期远程访问本地Excalidraw服务的需求,但又不想每天重新配置公网地址,还想地址好看又好记,那我推荐大家选择使用固定的二级子域名方式来远程访问。

5.3 使用固定公网地址远程访问

登录cpolar官网,点击左侧的预留,选择保留二级子域名,地区选择China VIP,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称,这里我填写的是exdraw,大家也可以自定义喜欢的名称。

image-20240207100140130

保留成功后复制保留成功的二级子域名的名称:exdraw,返回登录Cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道exdraw,点击右侧的编辑:

image-20240207100319169

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名:exdraw
  • 地区:选择China VIP

点击更新(注意,点击一次更新即可,不需要重复提交)

image-20240207100431685

更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址名称也变成了固定的二级子域名名称的域名:

image-20240207100508737

最后,我们使用任意一个固定公网地址在浏览器访问,可以看到访问成功,这样一个固定且永久不变的公网地址就设置好了,随时随地都可以远程访问本地部署的Excalidraw服务了!

image-20240207100658129

以上就是如何在Ubuntu系统使用Docker部署Excalidraw容器,并结合cpolar内网穿透工具实现公网远程访问内网本地服务的全部流程,感谢您的观看。

当便捷部署遇上稳定穿透技术,Excalidraw正在重新定义专业绘图工具的使用边界。

本篇文章知识点来源cpolar官网

  1. cpolar博客:配置二级子域名: www.cpolar.com/blog/config…
  2. cpolar博客:配置自定义域名: www.cpolar.com/blog/config…
  3. cpolar博客:配置固定TCP端口地址: www.cpolar.com/blog/config…
  4. cpolar博客:配置固定FTP地址: www.cpolar.com/blog/config…

Leanote你的知识库+云脑图:cpolar内网穿透实验室第490个成功挑战

NO.490 Leanote-01.png

软件名称:蚂蚁笔记(又名 Leanote

操作系统支持:Linux、Windows、macOS(推荐Docker部署,一键启动无压力!)

软件介绍

开源全能型知识管理工具:支持Markdown编辑器、LaTeX公式渲染、思维导图,可自建私有云笔记库。既是程序员的代码灵感仓库,也是学生的课程整理神器。

NO.490 Leanote-02.png

Leanote × Markdown+Vim:让笔记变成你的知识宇宙!
  • Markdown+Vim双模式:技术人用Vim快捷键飞速输入,学生党用Markdown优雅排版。
  • 公式编辑器秒变爱因斯坦:输入“a2+b2a2+b2”瞬间生成数学公式的视觉盛宴!
  • 脑图与文档无缝切换:边写大纲边画思维导图,逻辑混乱?不存在的!

NO.490 Leanote-03.png

cpolar × Leanote:你的私有笔记冲出内网!

  • 痛点:本地部署后只能在局域网访问?想在家修改公司笔记却连不上服务器?

  • 解决方案:一条命令全球随时访问自己的知识库。

  • cpolar将内网穿透简单到只要三步! 1.下载安装 → 2. 输入要穿透的端口号 → 3. 立刻获得专属访问链接。

  • 效果提升:出差路上、咖啡馆办公也能编辑文档,告别“只能在办公室改稿”的枷锁。

NO.490 Leanote-04.png

总结

Leanote是“知识管理的瑞士军刀”,而Cpolar让它突破物理限制。两者组合不仅实现私有云的安全性(数据不存第三方服务器),还让笔记成为可共享的知识库,适合技术人、学生党、自媒体创作者等群体。

NO.490 Leanote-05.png

安装教程在下面呦😊

本篇文章介绍如何使用Docker部署Leanote蚂蚁笔记,并且结合cpolar内网穿透实现公网远程访问本地笔记编辑并制作个人博客等。

1708321074571

1. 安装Docker

本文演示环境:CentOS 7,Xshell7远程ssh

没有安装Docker的小伙伴需安装Docker,已有Docker可跳过以下步骤。

如没有安装Docker,需先安装Docker:

  • 安装软件包(提供实用程序)并设置存储库

    $ sudo yum install -y yum-utils
    $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    

    安装Docker引擎

    sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    

    启动Docker

    sudo systemctl start docker
    

    通过运行映像来验证 Docker 引擎安装是否成功

    sudo docker run hello-world
    

2. Docker本地部署Leanote蚂蚁笔记

检查Docker服务状态

检查Docker服务是否正常运行,确保Docker正常运行。

systemctl status docker

检查Docker版本

docker -v

下载Leanote镜像,本次使用Leanote容器镜像从dockerhub拉取,版本为latest版本

docker pull axboy/leanote

462826f279de6d977a141fffc489ad1

部署Leanote应用

创建Leanote容器挂载的数据目录

mkdir -p /data/leanote/{db,conf,files,upload}
cd /data/leanote/

使用docker-cli命令快速创建Leanote容器

docker run -d -p 9800:9000 \
    -e "TZ=Asia/Shanghai"\
    --restart=always\
    -v /data/leanote/db:/data/db \
    -v /data/leanote/conf/:/data/leanote/conf \
    -v /data/leanote/files:/data/leanote/files \
    -v /data/leanote/upload:/data/leanote/public/upload \
    -m 50M --oom-kill-disable --memory-swap=-1\
    --name leanote \
    axboy/leanote

4a23ca81b05028b50d4a0303a28f063

检查Leanote容器状态状态

docker ps

检查Leanote容器所在系统资源

docker stats --no-stream leanote

打开新的浏览器直接访问:http://192.168.149.143:9800/ (本地IP:9800)进入Leanote首页

6eb290b634e3112a49ff90dfeb0f9e3

设置简体中文

点击右上角简体中文

image-20240219114657197

管理员登录Leanote

用户名填写:admin 密码:abc123

765c9c5591ce2d795823725211dd0e3

进入到后台编辑界面

fdc37f8630d4caca914b697b0af0297

新建笔记

9626bc4c3c2bb37eca80477e00393f6

ca73116e4e6e3d15bc4663621e4d45c

编辑完文章后公开为博客

d1fd381ab09ff34befc11a2c8dbd4d1

点击右上角我的博客

6393df2a019f64c0f4e85a8f7088554

6b320011ca547400652fd64c17e173b

点击博客设置

4f54ed8c253b1e1dc706e8ab70e83d0

选择博客设置,进入博客管理页面

f93186a70af1d0ba79796962bf4cc5b

修改博客主题

c6d1dcbba11cb7809b7275535f7c95b

我们就成功在本地搭建了Leanote蚂蚁笔记,但如果想在外随时随地编辑自己的蚂蚁笔记,就需要借助cpolar内网穿透工具来实现公网访问了!接下来介绍一下如何安装cpolar内网穿透并实现蚂蚁笔记公网访问!

3. 安装cpolar内网穿透

下面是安装cpolar步骤:

cpolar官网地址: www.cpolar.com

  • 使用一键脚本安装命令
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
  • 向系统添加服务
sudo systemctl enable cpolar
  • 启动cpolar服务
sudo systemctl start cpolar

cpolar安装成功后,在外部浏览器上访问Linux 的9200端口即:【http://服务器的局域网ip:9200】,使用cpolar账号登录,登录后即可看到cpolar web 配置界面,结下来在web 管理界面配置即可。

接下来配置一下Leanote蚂蚁笔记的公网地址,

登录后,点击左侧仪表盘的隧道管理——创建隧道,

创建一个蚂蚁笔记的公网http地址隧道

  • 隧道名称:可自定义命名,注意不要与已有的隧道名称重复
  • 协议:选择http
  • 本地地址:9800 (本地访问的地址)
  • 域名类型:免费选择随机域名
  • 地区:选择China Top

点击创建

cc32156089ad8673b165e6d76b7d18f

隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网访问地址,有两种访问方式,一种是http 和https

f795e04bc79da30ee5e595b309ca3c2

使用上面的Cpolar https公网地址,在任意设备的浏览器进行访问,即可成功看到Leanote蚂蚁笔记界面,这样一个公网地址且可以远程访问就创建好了,使用了cpolar的公网域名,无需自己购买云服务器,即可到公网进行远程访问蚂蚁笔记了!

3f2ae9de33f92922518b9253b713a00

小结

如果我们需要长期异地远程访问蚂蚁笔记,由于刚才创建的是随机的地址,24小时会发生变化。另外它的网址是由随机字符生成,不容易记忆。如果想把域名变成固定的二级子域名,并且不想每次都重新创建隧道来听歌,我们可以选择创建一个固定的http地址来解决这个问题。

4. 固定Leanote蚂蚁笔记公网地址

我们接下来为其配置固定的HTTP端口地址,该地址不会变化,方便分享给别人长期查看你的博客,而无需每天重复修改服务器地址。

配置固定http端口地址需要将cpolar升级到专业版套餐或以上。

登录cpolar官网,点击左侧的预留,选择保留二级子域名,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称

4575c71ffe477ffdcf4d54e7814d239

保留成功后复制保留成功的二级子域名的名称

fb815a8274f6fde74750968661f8db2

返回登录Cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道,点击右侧的编辑

a8a1107f681b95be65e0b3487e29542

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名

点击更新(注意,点击一次更新即可,不需要重复提交)

06b600fd02343bd9e36aa07cbb3c168

更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址名称也变成了固定的二级子域名名称的域名

0c141638c943af343154a7163c777e6

最后,我们使用固定的公网https地址访问,可以看到访问成功,这样一个固定且永久不变的公网地址就设置好了,可以异地远程自己的蚂蚁笔记来进行编辑和学习了!

d7d91b3b344c909d6c237ea9495e518

7853ded19cb0e300cc05f58663268b6

当知识管理遇见技术赋能,Leanote正重新定义个人数字资产的价值边界——让思考沉淀更安全、分享传播更自由。

编辑器也有邪修?盘点VS Code邪门/有趣的扩展

作者 鹏多多
2025年8月11日 09:47

VS Code 之所以成为最受欢迎的编辑器之一,很大程度上得益于其丰富的扩展生态。本人精选 20 个实用or有趣的 VS Code 扩展,覆盖摸鱼放松,文件管理、代码规范、效率工具等等多个场景,干货满满,下面正片开始:

1 看小说漫画:any-reader

  • 核心功能: 在 VS Code 中阅读小说、文档,支持 TXT/EPUB 格式、章节导航、字体调整。
  • 适用场景:利用碎片时间阅读技术文档或轻小说,避免频繁切换应用。
  • 隐藏技巧:支持自定义快捷键翻页,可设置阅读定时提醒。

any-reader

2 偷偷在状态栏看小说:Thief-Book

  • 核心功能:在状态栏显示小说,支持阅读进度。
  • 适用场景:利用碎片时间阅读技术文档或轻小说,避免频繁切换应用。
  • 隐藏技巧:支持快捷键翻页。

Thief-Book

3 看股票基金期货:韭菜盒子

  • 核心功能
    • 基金实时涨跌,实时数据,支持海外基展示
    • 股票实时涨跌,支持 A 股、港股、美股
    • 期货实时涨跌,支持国内期货
    • 底部状态栏信息
    • 开市自动刷新,节假日关闭轮询
    • 支持升序/降序排序、基金持仓金额升序/降序
    • 基金实时走势图和历史走势图
    • 基金排行榜
    • 基金持仓信息
    • 支持维护持仓成本价,自动计算收益率
    • 基金趋势统计图
    • 基金支持分组展示等等...
  • 注意:投资有风险,入市需谨慎! 韭菜盒子

4 小霸王

  • 核心功能:一款基于vscode的nes游戏插件,主打本地与远程游戏资源管理,让你在编辑器内就能完成游戏的添加、下载、启动全流程。
  • 不建议上班玩哈!

小霸王

5. JSON 变可视化树图:JSON Crack

  • 核心功能:将 JSON 数据转换为交互式树状可视化图表,支持折叠/展开节点、搜索内容。
  • 适用场景:分析复杂 JSON 结构(如 API 响应、配置文件)、快速定位数据层级。
  • 优势:比原生 JSON 格式化更直观,支持大体积 JSON 数据渲染。

JSON Crack

6. 改变工作区的颜色来快速识别当前项目:Peacock

  • 核心功能:为不同工作区设置独特的颜色主题(标题栏、活动栏颜色),快速区分多个 VS Code 窗口。
  • 适用场景:同时打开多个项目时,通过颜色直观识别当前操作的项目(如生产环境项目用红色,测试环境用绿色)。
  • 个性化选项:支持按项目自动切换颜色,可自定义颜色饱和度和亮度。

Peacock

7. 编码时长统计:Time Master

  • 核心功能:自动记录代码编写时间、文件修改统计,生成每日/每周编程报告,分析编码效率。
  • 适用场景:跟踪项目开发时间、了解自己的编码习惯、评估任务耗时。
  • 特色:支持集成到 VS Code 状态栏实时显示当前编码时长,数据本地存储保护隐私。

Time Master

8. 生成文件夹树结构:file-tree-generator

  • 核心功能:一键生成项目文件夹结构并复制为文本,支持自定义忽略文件和格式。
  • 适用场景:编写 README 文档、项目说明时快速插入目录结构,或向团队展示项目架构。
  • 使用技巧:右键文件夹选择「Generate File Tree」,可通过配置文件自定义输出格式。

file-tree-generator

9. 轻松切换项目:Project Manager

  • 核心功能:快速保存和切换多个项目,支持按标签分类、搜索项目,无需反复通过文件管理器打开文件夹。
  • 适用场景:同时开发多个项目时,减少切换成本;整理常用项目集合。
  • 特色功能:支持从 Git 仓库、本地文件夹导入项目,可配置项目启动命令。

Project Manager

10. 将文件保存到本地历史记录:Local History

  • 核心功能:自动为文件创建本地历史版本,支持对比不同版本差异、恢复误删内容。
  • 适用场景:防止代码意外丢失、追踪文件修改记录、找回被覆盖的代码。
  • 优势:无需依赖 Git,即使未提交的更改也能保存,历史记录默认保留 90 天。

Local History

11. 生成文件头部注释和函数注释:koroFileHeader

  • 核心功能:自动生成文件头部注释(作者、日期、描述等)和函数注释,支持自定义注释模板。
  • 适用场景:统一团队代码注释规范,快速生成符合 JSDoc、JavaDoc 等标准的注释。
  • 高级用法:通过配置文件定义不同语言的注释模板,支持快捷键触发(默认 Ctrl+Alt+i 生成函数注释)。

koroFileHeader

12. 复制 JSON 粘贴为代码:Paste JSON as Code

  • 核心功能:将 JSON 数据粘贴为指定语言的类型定义或实体类(支持 TypeScript、Go、C#、Python 等 20+ 语言)。
  • 适用场景:根据 API 返回的 JSON 结构快速生成接口类型定义,避免手动编写类型。
  • 使用技巧:复制 JSON 后执行命令「Paste JSON as Code」,选择目标语言和变量名即可生成代码。 Paste JSON as Code

13. 把代码块框起来:Blockman - Highlight Nested Code Blocks

  • 核心功能:用彩色边框高亮嵌套的代码块(如函数、循环、条件语句),直观区分代码层级。
  • 适用场景:阅读复杂代码、调试嵌套逻辑时,快速定位代码块边界。
  • 特色:支持自定义边框样式、透明度和颜色,兼容大多数代码主题。

Blockman - Highlight Nested Code Blocks

14. SVG 预览和编辑:SVG Preview

  • 核心功能:在 VS Code 中实时预览 SVG 图片,支持直接编辑 SVG 代码并即时查看效果。
  • 适用场景:前端开发中处理 SVG 图标、调整 SVG 路径、优化 SVG 代码。
  • 特色:支持放大缩小预览、复制 SVG 代码,兼容大多数 SVG 特性。

SVG Preview

15. 程序员鼓励师:Rainbow Fart

  • 核心功能:在编码过程中根据输入的关键字触发语音赞美,例如输入 function 时播放 “写得真棒!”,输入 if 时播放 “逻辑清晰,太厉害了!”。支持多语言语音包(中文、英文等),赞美内容与代码语境关联。
  • 适用场景:单人开发时缓解编码疲劳,增添趣味性;团队协作时活跃开发氛围;新手学习编程时获得正向反馈。
  • 高级功能:支持自定义语音包(可录制个人或团队专属鼓励语音)、配置触发关键字规则、调整音量和触发频率,兼容多种编程语言。
  • 文档:传送门

Rainbow Fart

16. 命名风格转换:Name Transform

  • 核心功能:一键转换变量名、函数名的命名风格,支持 camelCase(小驼峰)、PascalCase(大驼峰)、snake_case(下划线)、kebab-case(短横线)等常见格式的相互转换。
  • 适用场景:接手不同风格的代码时统一命名规范;调用第三方 API 时适配参数命名格式;重构代码时批量修改命名风格。
  • 高级功能:支持选中区域批量转换、配置默认转换规则、自定义命名风格映射表,可集成到右键菜单或快捷键(默认 Alt+Shift+T)快速触发。

Name Transform

17. 代码拼写检查器:Code Spell Checker

  • 核心功能:实时检查代码中的单词拼写错误(如变量名、注释、字符串中的英文单词),通过下划线标记错误,并提供修正建议。
  • 适用场景:避免因拼写错误导致的 Bug(如变量名拼写错误 usre 而非 user);优化代码注释和文档的可读性;英文非母语开发者提升代码规范性。
  • 高级功能:支持添加自定义词典(忽略项目专属术语或缩写)、配置语言规则(支持英语、法语等多语言)、批量修复重复拼写错误,可集成到 CI/CD 流程中进行拼写检查。

Code Spell Checker

18. 自动修改标签名:Auto Rename Tag

  • 核心功能:在 HTML、XML、JSX、Vue 等标记语言中,修改开始标签时自动同步更新对应的结束标签,无需手动修改配对标签。
  • 适用场景:前端开发中修改 HTML/JSX 标签(如将
    改为 时,结束标签
    自动变为 );编辑 XML 配置文件或 Vue 模板时避免标签不匹配问题。
  • 高级功能:支持自定义匹配的标签语言(默认覆盖 HTML、Vue、React 等)、配置标签同步延迟时间、忽略自闭合标签,兼容嵌套标签结构。

Auto Rename Tag

19. 快速调试打印:Console Helper

  • 核心功能:一键生成格式化的调试打印语句(如 console.log()、console.error()),自动填充变量名和上下文信息,支持快捷键快速插入。
  • 适用场景:前端开发中快速添加调试日志;后端开发调试变量值或函数执行流程;临时排查代码逻辑问题时减少重复输入。
  • 高级功能:支持自定义打印模板(如添加时间戳、文件名、行号)、一键注释 / 取消所有打印语句、自动删除冗余打印,兼容 JavaScript、TypeScript、Python 等多种语言。

Console Helper

20. 彩虹括号:Rainbow Brackets

  • 核心功能:为嵌套的括号(圆括号、方括号、花括号)添加不同颜色,增强代码层次感。
  • 适用场景:编写嵌套较深的代码(如 JSON 结构、条件语句、函数嵌套)时,快速识别括号配对关系。
  • 自定义选项:支持调整颜色主题、忽略特定文件类型、配置括号样式。

Rainbow Brackets


如果看了觉得有帮助的,我是鹏多多,欢迎 点赞 关注 评论;

往期文章

个人主页

❌
❌