Utoljára aktív 1 month ago

vscode 开发必选扩展

Revízió b94fb70bffe47391ce89260c2200e1a44d75ed54

README.md Eredeti

VS Code 扩展推荐

扩展列表

名称 扩展 ID (官方) 扩展 ID() 描述
Even Better TOML tamasfe.even-better-toml - 功能齐全的 TOML 支持
Choose a License ultram4rine.vscode-choosealicense - 为你的项目选择一个许可证
gitignore codezombiech.gitignore - https://github.com/github/gitignore 仓库拉取 .gitignore 模板。支持.gitignore 文件的语言。
index.txt Eredeti
1tamasfe.even-better-toml
2ultram4rine.vscode-choosealicense
3codezombiech.gitignore
4
install Eredeti
1#!/usr/bin/env bash
2
3BASE_URL="https://gist.asfd.cn/jetsung/vscode/raw/HEAD/"
4LIST_FILE="index.txt" # 默认扩展 ID 列表文件
5DESC_FILE="README.md" # 描述 Markdown 文件
6IDE_CMD="code" # 默认 VSCode
7FORCE=false
8EXTRA=""
9VERBOSE=false # -v: 只显示详细扩展信息(纯文本单行格式),不安装
10
11# 参数解析函数
12parameters() {
13 while getopts "s:f e:n:v" opt; do
14 case $opt in
15 s) IDE_CMD="$OPTARG" ;;
16 f) FORCE=true ;;
17 e) EXTRA="$OPTARG" ;;
18 n) LIST_FILE="$OPTARG" ;;
19 v) VERBOSE=true ;;
20 \?) echo "无效参数: -$OPTARG" >&2; exit 1 ;;
21 esac
22 done
23 shift $((OPTIND-1))
24 EXTRA="$EXTRA $@"
25}
26
27# 主函数
28main() {
29 parameters "$@"
30
31 # 处理 LIST_FILE
32 if [[ "$LIST_FILE" != "*.*" ]] && [[ "$LIST_FILE" != *.* ]]; then
33 LIST_FILE="${LIST_FILE}.txt"
34 fi
35
36 URL_DESC="${BASE_URL}${DESC_FILE}"
37
38 if $VERBOSE; then
39 echo
40 # -v 模式:下载 README.md,先提取表格数据行(跳过标题和分隔行),然后逐行处理输出纯文本格式
41 curl -s --fail "$URL_DESC" | awk '
42 # 只处理数据行:以 "| [**" 开头(名称带链接)
43 /^\| \[\*\*/ {
44 line = $0
45
46 # 提取名称:去除 [**name**][n]
47 if (match(line, /\[\*\*([^*]+)\*\*\]\[\d+\]/)) {
48 name = substr(line, RSTART + 3, RLENGTH - 7 - length(match(line, /\[\d+\]/))) # 调整去除 [n]
49 # 更精确:从 ** 后到 ** 前
50 sub(/.*\[\*\*/, "", line)
51 sub(/\*\*\].*/, "", line)
52 name = line
53 } else {
54 name = ""
55 }
56
57 # 重置 line 为原始
58 line = $0
59
60 # 提取官方 ID:去除 `
61 if (match(line, /`([^`]+)`/)) {
62 id_official = substr(line, RSTART + 1, RLENGTH - 2)
63 } else {
64 id_official = ""
65 }
66
67 # 提取其他 ID:第三列,通常 -
68 sub(/.*\| [^|]* \| [^|]* \| /, "", line) # 临时去除到第三列后
69 if (match(line, /^ ([^ |]+) /)) {
70 id_other = substr(line, RSTART + 1, RLENGTH - 2)
71 } else {
72 id_other = "-"
73 }
74
75 # 提取描述:第五列(最后一列)
76 if (match($0, /\| ([^|]+) \| ([^|]+) \| ([^|]+) \| (.*) \|$/)) {
77 desc = substr($0, RSTART + RLENGTH - length($4) - 1) # 复杂,改用 split
78 }
79
80 # 更可靠方式:用 split 分隔 |
81 split($0, fields, "|")
82 if (length(fields) >= 5) {
83 name_field = fields[2]
84 gsub(/^[ \t]+|[ \t]+$/, "", name_field)
85 gsub(/\[\*\*[^*]+\*\*\]\[\d+\]/, "", name_field) # 去除链接部分,留空? 等下已提取name
86 # 用之前提取的 name
87
88 id_official_field = fields[3]
89 gsub(/^[ \t]+|[ \t]+$/, "", id_official_field)
90 gsub(/`/, "", id_official_field)
91
92 id_other_field = fields[4]
93 gsub(/^[ \t]+|[ \t]+$/, "", id_other_field)
94
95 desc_field = fields[5]
96 gsub(/^[ \t]+|[ \t]+$/, "", desc_field)
97
98 printf "名称:%s \n扩展ID:%s \n扩展ID:%s \n描述:%s\n\n", name, id_official_field, id_other_field, desc_field
99 }
100 }'
101 echo
102 exit 0
103 fi
104
105 # 非 -v 模式:正常下载 index.txt 并安装
106 URL_LIST="${BASE_URL}${LIST_FILE}"
107
108 echo "从 $URL_LIST 下载扩展列表..."
109 EXTENSIONS=$(curl -s --fail "$URL_LIST" | grep -v '^#' | grep -v '^$' | sed '/^$/d')
110
111 if [ -z "$EXTENSIONS" ]; then
112 echo "错误: 未获取到扩展列表或文件为空!请检查文件名(当前: $LIST_FILE)。" >&2
113 exit 1
114 fi
115
116 BASE_CMD="$IDE_CMD --install-extension"
117 if $FORCE; then
118 EXTRA="--force $EXTRA"
119 fi
120
121 echo "开始为 $IDE_CMD 安装扩展(命令: $BASE_CMD ... $EXTRA)"
122 echo "扩展列表:"
123 echo "$EXTENSIONS" | tr ' ' '\n'
124 echo "-----------------"
125
126 echo "$EXTENSIONS" | tr ' ' '\n' | while read -r ext; do
127 [ -z "$ext" ] && continue
128 echo "安装: $ext"
129 $BASE_CMD "$ext" $EXTRA || echo "警告: 安装 $ext 失败(可能已安装或 ID 不兼容)"
130 done
131
132 echo "-----------------"
133 echo "所有扩展安装完成!请重启 IDE 以生效。"
134}
135
136main "$@"
python.txt Eredeti
1ms-python.isort
2ms-python.autopep8
3ms-python.python
4ms-python.vscode-pylance
5ms-python.vscode-python-envs
6ms-python.debugpy
7charliermarsh.ruff
8