README.md
· 1.8 KiB · Markdown
Raw
# VS Code 扩展推荐
- **微软官方:** https://marketplace.visualstudio.com/
- **Open VSX:** https://open-vsx.org/
## 教程
- VSCode
```bash
curl -L https://gist.asfd.cn/jetsung/vscode/raw/HEAD/install.sh | bash
```
- 其它
```bash
curl -L https://gist.asfd.cn/jetsung/vscode/raw/HEAD/install.sh | bash -s -- -s kiro
```
## 扩展列表
| 名称 | 扩展 ID | 链接 | 描述 |
|:---|:---|:---|:---|
| [**Even Better TOML**][6] | `tamasfe.even-better-toml` | [VSCode][6-1] - [OpenVSX][6-2] | 功能齐全的 TOML 支持 |
| [**Choose a License**][7] | `ultram4rine.vscode-choosealicense` | [VSCode][7-1] - [OpenVSX][7-2] | 为你的项目选择一个许可证 |
| [**gitignore**][8] | `codezombiech.gitignore` | [VSCode][8-1] - [OpenVSX][8-2] | 从 https://github.com/github/gitignore 仓库拉取 .gitignore 模板。支持.gitignore 文件的语言。 |
| [**ShellCheck**][9] | `timonwong.shellcheck` | [VSCode][9-1] - [OpenVSX][9-2] | 用于 Shell 脚本的代码检查工具。 |
[6]:https://github.com/tamasfe/taplo
[6-1]:https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml
[6-2]:https://open-vsx.org/extension/tamasfe/even-better-toml
[7]:https://github.com/ultram4rine/vscode-choosealicense
[7-1]:https://marketplace.visualstudio.com/items?itemName=ultram4rine.vscode-choosealicense
[7-2]:https://open-vsx.org/extension/ultram4rine/vscode-choosealicense
[8]:https://github.com/CodeZombieCH/vscode-gitignore
[8-1]:https://marketplace.visualstudio.com/items?itemName=codezombiech.gitignore
[8-2]:https://open-vsx.org/extension/codezombiech/gitignore
[9]:https://github.com/vscode-shellcheck/vscode-shellcheck
[9-1]:https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck
[9-2]:https://open-vsx.org/extension/timonwong/shellcheck
VS Code 扩展推荐
- 微软官方: https://marketplace.visualstudio.com/
- Open VSX: https://open-vsx.org/
教程
- VSCode
curl -L https://gist.asfd.cn/jetsung/vscode/raw/HEAD/install.sh | bash
- 其它
curl -L https://gist.asfd.cn/jetsung/vscode/raw/HEAD/install.sh | bash -s -- -s kiro
扩展列表
| 名称 | 扩展 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 文件的语言。 |
| ShellCheck | timonwong.shellcheck |
VSCode - OpenVSX | 用于 Shell 脚本的代码检查工具。 |
| 1 | tamasfe.even-better-toml |
| 2 | ultram4rine.vscode-choosealicense |
| 3 | codezombiech.gitignore |
| 4 | timonwong.shellcheck |
| 5 |
install.sh
· 3.6 KiB · Bash
Raw
#!/usr/bin/env bash
if [[ -n "${DEBUG:-}" ]]; then
set -eux
else
set -euo pipefail
fi
BASE_URL="https://gist.asfd.cn/jetsung/vscode/raw/HEAD/"
LIST_FILE="index.txt" # 默认扩展 ID 列表文件
DESC_FILE="README.md" # 描述 Markdown 文件
IDE_CMD="code" # 默认 VSCode
FORCE=false
EXTRA=""
VERBOSE=false # -v: 只显示详细扩展信息(纯文本单行格式),不安装
# 参数解析函数
parameters() {
while getopts "s:f e:n:v" opt; do
case $opt in
s) IDE_CMD="$OPTARG" ;;
f) FORCE=true ;;
e) EXTRA="$OPTARG" ;;
n) LIST_FILE="$OPTARG" ;;
v) VERBOSE=true ;;
\?) echo "无效参数: -$OPTARG" >&2; exit 1 ;;
esac
done
shift $((OPTIND-1))
EXTRA="$EXTRA $@"
}
# 主函数
main() {
parameters "$@"
# 处理 LIST_FILE
if [[ "$LIST_FILE" != *.* ]]; then
LIST_FILE="${LIST_FILE}.txt"
fi
URL_DESC="${BASE_URL}${DESC_FILE}"
if $VERBOSE; then
echo
curl -s --fail "$URL_DESC" | awk '
/^\| \[/ && /\| `[^`]+` \|/ {
split($0, fields, "\\|")
if (length(fields) < 6) next
# === 名称 ===
name_raw = fields[2]
gsub(/^[ \t\n\r]+|[ \t\n\r]+$/, "", name_raw)
if (match(name_raw, /\*\*([^*]+)\*\*/)) {
name = substr(name_raw, RSTART + 2, RLENGTH - 4)
} else if (match(name_raw, /^\[([^]]+)\]/)) {
name = substr(name_raw, RSTART + 1, RLENGTH - 2)
} else {
name = name_raw
}
gsub(/^[ \t\n\r]+|[ \t\n\r]+$/, "", name)
# === 扩展 ID:严格清理空格和反引号 ===
id = fields[3]
gsub(/^[ \t\n\r]+|[ \t\n\r]+$/, "", id) # 去除前后空白
gsub(/`/, "", id) # 去除所有反引号
# === 描述 ===
desc = fields[5]
gsub(/^[ \t\n\r]+|[ \t\n\r]+$/, "", desc)
if (name == "" || id == "" || desc == "") next
# === 生成链接(确保 id 是干净的)===
split(id, parts, ".")
if (length(parts) < 2) next
publisher = parts[1]
ext_name = parts[2]
for (i = 3; i <= length(parts); i++) {
ext_name = ext_name "." parts[i]
}
vscode_url = "https://marketplace.visualstudio.com/items?itemName=" id
openvsx_url = "https://open-vsx.org/extension/" publisher "/" ext_name
# ✅ 关键:这里绝不手动添加反引号或空格!
printf "名称: %s\n扩展ID: %s\n描述: %s\nVSCode: %s\nOpenVSX: %s\n\n", \
name, id, desc, vscode_url, openvsx_url
}'
echo
exit 0
fi
# 非 -v 模式:正常下载 index.txt 并安装
URL_LIST="${BASE_URL}${LIST_FILE}"
echo "从 $URL_LIST 下载扩展列表..."
EXTENSIONS=$(curl -s --fail "$URL_LIST" | grep -v '^#' | grep -v '^$' | sed '/^$/d')
if [ -z "$EXTENSIONS" ]; then
echo "错误: 未获取到扩展列表或文件为空!请检查文件名(当前: $LIST_FILE)。" >&2
exit 1
fi
BASE_CMD="$IDE_CMD --install-extension"
if $FORCE; then
EXTRA="--force $EXTRA"
fi
echo "开始为 $IDE_CMD 安装扩展(命令: $BASE_CMD ... $EXTRA)"
echo "扩展列表:"
echo "$EXTENSIONS" | tr ' ' '\n'
echo "-----------------"
echo "$EXTENSIONS" | tr ' ' '\n' | while read -r ext; do
[ -z "$ext" ] && continue
echo "安装: $ext"
$BASE_CMD "$ext" $EXTRA || echo "警告: 安装 $ext 失败(可能已安装或 ID 不兼容)"
done
echo "-----------------"
echo "所有扩展安装完成!请重启 IDE 以生效。"
}
main "$@"
| 1 | #!/usr/bin/env bash |
| 2 | |
| 3 | if [[ -n "${DEBUG:-}" ]]; then |
| 4 | set -eux |
| 5 | else |
| 6 | set -euo pipefail |
| 7 | fi |
| 8 | |
| 9 | BASE_URL="https://gist.asfd.cn/jetsung/vscode/raw/HEAD/" |
| 10 | LIST_FILE="index.txt" # 默认扩展 ID 列表文件 |
| 11 | DESC_FILE="README.md" # 描述 Markdown 文件 |
| 12 | IDE_CMD="code" # 默认 VSCode |
| 13 | FORCE=false |
| 14 | EXTRA="" |
| 15 | VERBOSE=false # -v: 只显示详细扩展信息(纯文本单行格式),不安装 |
| 16 | |
| 17 | # 参数解析函数 |
| 18 | parameters() { |
| 19 | while getopts "s:f e:n:v" opt; do |
| 20 | case $opt in |
| 21 | s) IDE_CMD="$OPTARG" ;; |
| 22 | f) FORCE=true ;; |
| 23 | e) EXTRA="$OPTARG" ;; |
| 24 | n) LIST_FILE="$OPTARG" ;; |
| 25 | v) VERBOSE=true ;; |
| 26 | \?) echo "无效参数: -$OPTARG" >&2; exit 1 ;; |
| 27 | esac |
| 28 | done |
| 29 | shift $((OPTIND-1)) |
| 30 | EXTRA="$EXTRA $@" |
| 31 | } |
| 32 | |
| 33 | # 主函数 |
| 34 | main() { |
| 35 | parameters "$@" |
| 36 | |
| 37 | # 处理 LIST_FILE |
| 38 | if [[ "$LIST_FILE" != *.* ]]; then |
| 39 | LIST_FILE="${LIST_FILE}.txt" |
| 40 | fi |
| 41 | |
| 42 | URL_DESC="${BASE_URL}${DESC_FILE}" |
| 43 | |
| 44 | if $VERBOSE; then |
| 45 | echo |
| 46 | curl -s --fail "$URL_DESC" | awk ' |
| 47 | /^\| \[/ && /\| `[^`]+` \|/ { |
| 48 | split($0, fields, "\\|") |
| 49 | if (length(fields) < 6) next |
| 50 | |
| 51 | # === 名称 === |
| 52 | name_raw = fields[2] |
| 53 | gsub(/^[ \t\n\r]+|[ \t\n\r]+$/, "", name_raw) |
| 54 | if (match(name_raw, /\*\*([^*]+)\*\*/)) { |
| 55 | name = substr(name_raw, RSTART + 2, RLENGTH - 4) |
| 56 | } else if (match(name_raw, /^\[([^]]+)\]/)) { |
| 57 | name = substr(name_raw, RSTART + 1, RLENGTH - 2) |
| 58 | } else { |
| 59 | name = name_raw |
| 60 | } |
| 61 | gsub(/^[ \t\n\r]+|[ \t\n\r]+$/, "", name) |
| 62 | |
| 63 | # === 扩展 ID:严格清理空格和反引号 === |
| 64 | id = fields[3] |
| 65 | gsub(/^[ \t\n\r]+|[ \t\n\r]+$/, "", id) # 去除前后空白 |
| 66 | gsub(/`/, "", id) # 去除所有反引号 |
| 67 | |
| 68 | # === 描述 === |
| 69 | desc = fields[5] |
| 70 | gsub(/^[ \t\n\r]+|[ \t\n\r]+$/, "", desc) |
| 71 | |
| 72 | if (name == "" || id == "" || desc == "") next |
| 73 | |
| 74 | # === 生成链接(确保 id 是干净的)=== |
| 75 | split(id, parts, ".") |
| 76 | if (length(parts) < 2) next |
| 77 | publisher = parts[1] |
| 78 | ext_name = parts[2] |
| 79 | for (i = 3; i <= length(parts); i++) { |
| 80 | ext_name = ext_name "." parts[i] |
| 81 | } |
| 82 | |
| 83 | vscode_url = "https://marketplace.visualstudio.com/items?itemName=" id |
| 84 | openvsx_url = "https://open-vsx.org/extension/" publisher "/" ext_name |
| 85 | |
| 86 | # ✅ 关键:这里绝不手动添加反引号或空格! |
| 87 | printf "名称: %s\n扩展ID: %s\n描述: %s\nVSCode: %s\nOpenVSX: %s\n\n", \ |
| 88 | name, id, desc, vscode_url, openvsx_url |
| 89 | }' |
| 90 | echo |
| 91 | exit 0 |
| 92 | fi |
| 93 | |
| 94 | # 非 -v 模式:正常下载 index.txt 并安装 |
| 95 | URL_LIST="${BASE_URL}${LIST_FILE}" |
| 96 | |
| 97 | echo "从 $URL_LIST 下载扩展列表..." |
| 98 | EXTENSIONS=$(curl -s --fail "$URL_LIST" | grep -v '^#' | grep -v '^$' | sed '/^$/d') |
| 99 | |
| 100 | if [ -z "$EXTENSIONS" ]; then |
| 101 | echo "错误: 未获取到扩展列表或文件为空!请检查文件名(当前: $LIST_FILE)。" >&2 |
| 102 | exit 1 |
| 103 | fi |
| 104 | |
| 105 | BASE_CMD="$IDE_CMD --install-extension" |
| 106 | if $FORCE; then |
| 107 | EXTRA="--force $EXTRA" |
| 108 | fi |
| 109 | |
| 110 | echo "开始为 $IDE_CMD 安装扩展(命令: $BASE_CMD ... $EXTRA)" |
| 111 | echo "扩展列表:" |
| 112 | echo "$EXTENSIONS" | tr ' ' '\n' |
| 113 | echo "-----------------" |
| 114 | |
| 115 | echo "$EXTENSIONS" | tr ' ' '\n' | while read -r ext; do |
| 116 | [ -z "$ext" ] && continue |
| 117 | echo "安装: $ext" |
| 118 | $BASE_CMD "$ext" $EXTRA || echo "警告: 安装 $ext 失败(可能已安装或 ID 不兼容)" |
| 119 | done |
| 120 | |
| 121 | echo "-----------------" |
| 122 | echo "所有扩展安装完成!请重启 IDE 以生效。" |
| 123 | } |
| 124 | |
| 125 | main "$@" |
python.txt
· 143 B · Text
Raw
ms-python.isort
ms-python.autopep8
ms-python.python
ms-python.vscode-pylance
ms-python.vscode-python-envs
ms-python.debugpy
charliermarsh.ruff
| 1 | ms-python.isort |
| 2 | ms-python.autopep8 |
| 3 | ms-python.python |
| 4 | ms-python.vscode-pylance |
| 5 | ms-python.vscode-python-envs |
| 6 | ms-python.debugpy |
| 7 | charliermarsh.ruff |
| 8 |