最後活躍 1 month ago

vscode 开发必选扩展

修訂 e9e15ec0816782e9621807268a3ad03266fc7758

README.md 原始檔案

VS Code 扩展推荐

扩展列表

名称 扩展 ID 链接 描述
Even Better TOML tamasfe.even-better-toml VSCode - OpenVSX 功能齐全的 TOML 支持
Choose a License ultram4rine.vscode-choosealicense VSCode - OpenVSX 为你的项目选择一个许可证
gitignore codezombiech.gitignore VSCode - OpenVSX https://github.com/github/gitignore 仓库拉取 .gitignore 模板。支持.gitignore 文件的语言。
index.txt 原始檔案
1tamasfe.even-better-toml
2ultram4rine.vscode-choosealicense
3codezombiech.gitignore
4
install 原始檔案
1#!/usr/bin/env bash
2
3BASE_URL="https://gist.asfd.cn/jetsung/vscode/raw/HEAD/"
4DESC_FILE="README.md"
5IDE_CMD="code"
6FORCE=false
7EXTRA=""
8VERBOSE=false
9
10# 参数解析
11parameters() {
12 while getopts "s:f e:n:v" opt; do
13 case $opt in
14 s) IDE_CMD="$OPTARG" ;;
15 f) FORCE=true ;;
16 e) EXTRA="$OPTARG" ;;
17 n) DESC_FILE="$OPTARG" ;; # -n now sets the README/md file
18 v) VERBOSE=true ;;
19 \?) echo "无效参数: -$OPTARG" >&2; exit 1 ;;
20 esac
21 done
22 shift $((OPTIND-1))
23 EXTRA="$EXTRA $@"
24}
25
26extract_extensions() {
27 local content
28 if [[ "$DESC_FILE" == http* ]]; then
29 content=$(curl -s --fail "$DESC_FILE")
30 elif [[ -f "$DESC_FILE" ]]; then
31 content=$(cat "$DESC_FILE")
32 else
33 content=$(curl -s --fail "${BASE_URL}${DESC_FILE}")
34 fi
35
36 if [ $? -ne 0 ] || [ -z "$content" ]; then
37 echo "错误:无法加载 README 文件($DESC_FILE)" >&2
38 exit 1
39 fi
40
41 echo "$content" | awk '
42 BEGIN {
43 in_table = 0
44 }
45 # 检测表头行
46 /^\|/ && $0 ~ /\| 名称 \| 扩展 ID \|/ {
47 in_table = 1
48 next
49 }
50 # 跳过分隔行(如 |:---|:---|...)
51 in_table && /^\|[-:| ]+\|$/ { next }
52 # 处理数据行
53 in_table && /^\|/ {
54 gsub(/^\|/, "", $0)
55 gsub(/\|$/, "", $0)
56 n = split($0, fields, "\\|")
57 if (n >= 4) {
58 id = fields[2]
59 gsub(/^[ \t]*`?/, "", id)
60 gsub(/`?[ \t]*$/, "", id)
61 if (id != "" && id != "-") {
62 print id
63 }
64 }
65 }
66 # 遇到空行或非表格行,退出表格模式(可选增强)
67 !/^\|/ && in_table { in_table = 0 }
68 '
69}
70
71show_verbose() {
72 local content
73 if [[ "$DESC_FILE" == http* ]]; then
74 content=$(curl -s --fail "$DESC_FILE")
75 elif [[ -f "$DESC_FILE" ]]; then
76 content=$(cat "$DESC_FILE")
77 else
78 content=$(curl -s --fail "${BASE_URL}${DESC_FILE}")
79 fi
80
81 echo
82 echo "$content" | awk '
83 BEGIN {
84 in_table = 0
85 }
86 /^\|/ && $0 ~ /\| 名称 \| 扩展 ID \|/ {
87 in_table = 1
88 next
89 }
90 in_table && /^\|[-:| ]+\|$/ { next }
91 in_table && /^\|/ {
92 gsub(/^\|/, "", $0)
93 gsub(/\|$/, "", $0)
94 n = split($0, fields, "\\|")
95 if (n >= 5) {
96 name_raw = fields[1]
97 id = fields[2]
98 desc = fields[4]
99
100 # 提取 **...** 中的名称
101 if (match(name_raw, /\*\*([^*]+)\*\*/)) {
102 name = substr(name_raw, RSTART+2, RLENGTH-4)
103 } else {
104 gsub(/[\[\]\*\`]/, "", name_raw)
105 name = name_raw
106 }
107
108 gsub(/^[ \t]*`?/, "", id)
109 gsub(/`?[ \t]*$/, "", id)
110 gsub(/^[ \t]+|[ \t]+$/, "", desc)
111
112 if (id != "" && id != "-") {
113 printf "名称: %s\n扩展ID: %s\n描述: %s\n\n", name, id, desc
114 }
115 }
116 }
117 !/^\|/ && in_table { in_table = 0 }
118 '
119 echo
120}
121
122# 主函数
123main() {
124 parameters "$@"
125
126 if $VERBOSE; then
127 show_verbose
128 exit 0
129 fi
130
131 echo "正在从 $DESC_FILE 提取扩展列表..."
132 EXTENSIONS=$(extract_extensions)
133
134 if [ -z "$EXTENSIONS" ]; then
135 echo "错误:未找到有效的扩展 ID 列表!" >&2
136 exit 1
137 fi
138
139 BASE_CMD="$IDE_CMD --install-extension"
140 if $FORCE; then
141 EXTRA="--force $EXTRA"
142 fi
143
144 echo "开始为 $IDE_CMD 安装扩展(命令: $BASE_CMD ... $EXTRA)"
145 echo "扩展列表:"
146 echo "$EXTENSIONS"
147 echo "-----------------"
148
149 while IFS= read -r ext; do
150 [ -z "$ext" ] && continue
151 echo "安装: $ext"
152 $BASE_CMD "$ext" $EXTRA || echo "警告: 安装 $ext 失败(可能已安装或 ID 无效)"
153 done <<< "$EXTENSIONS"
154
155 echo "-----------------"
156 echo "所有扩展安装完成!请重启 IDE 以生效。"
157}
158
159main "$@"
python.txt 原始檔案
1ms-python.isort
2ms-python.autopep8
3ms-python.python
4ms-python.vscode-pylance
5ms-python.vscode-python-envs
6ms-python.debugpy
7charliermarsh.ruff
8