@ia-ccun/idea-plugin-share 0.0.21 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ia-ccun/idea-plugin-share",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
4
4
  "description": "IntelliJ IDEA 插件分发包:把 zip 放进 plugins/ 目录,npm publish 后内网 npm i 即可获取",
5
5
  "bin": {
6
6
  "idea-plugin": "bin/idea-plugin.js"
@@ -1,290 +0,0 @@
1
- # 麒麟 V10 终端中文方框(豆腐块)乱码解决方案
2
-
3
- > 适用:内网环境、银河麒麟 V10、终端或 Java GUI 出现 `□□□` 方块字
4
- > 根因:locale 非 UTF-8 + 工具/子进程未透传 LANG(**字体本身通常没问题**)
5
- >
6
- > **关键现象判别**:
7
- > - 终端最终态正常 + 渲染过程中方块 → 字体没问题,是流式输出/字符宽度问题,看 §1
8
- > - 全程都方块(甚至最终态)→ 真没字体,看 §3
9
-
10
- ---
11
-
12
- ## 0. 现象分支判别(30 秒定位)
13
-
14
- | 现象 | 真因 | 跳到 |
15
- |------|------|------|
16
- | **流式输出阶段方块 / 最终态正常** | 工具/子进程 LANG 未设,或流式字符宽度 fallback | **§1**(locale 优先) |
17
- | 全程方块 / 静态也是方块 | 系统确实缺中文字体 | §3 |
18
- | IDEA 编辑器正常 / Markdown 工具窗口方块 | JBR `file.encoding` 不是 UTF-8 | §6 |
19
- | SSH 远程侧方块 / 本地正常 | sshd 未透传 LANG | §5 |
20
- | VS Code 终端方块 / 系统终端正常 | VS Code 终端字体单独配 | §8 |
21
-
22
- ---
23
-
24
- ## 1. 流式阶段方块 — 工具/子进程 locale 缺失(最高频)
25
-
26
- ### 1.1 真因
27
-
28
- AI Agent / IDE 插件 / 任何带 markdown 流式渲染的工具,**渲染前**会执行:
29
- - bash 子进程(`git log`、`cat`、构建命令)
30
- - 工具调用(`read_file`、`grep`)
31
- - 字节流解码
32
-
33
- 如果当前环境 `LANG=POSIX` / `C` / 空:
34
- - bash 子进程按 `C` 编码处理 stdout
35
- - 字节流被错认为 ASCII/GBK
36
- - UTF-8 多字节序列在内存里被切成 1 字节/格 → 渲染时占位 `□`
37
-
38
- **最终态正常** → 字体没问题;问题仅在"工具输出回灌到 markdown 渲染器"这一段。
39
-
40
- ### 1.2 立即验证
41
-
42
- ```bash
43
- locale
44
- # 期望输出含 zh_CN.UTF-8;若是 POSIX / C / 空 → 命中
45
-
46
- echo $LANG
47
- echo $LC_ALL
48
- # 期望 LANG=zh_CN.UTF-8
49
- ```
50
-
51
- ### 1.3 修复(必做,3 条命令)
52
-
53
- ```bash
54
- # 1.3.1 系统级
55
- sudo localectl set-locale LANG=zh_CN.UTF-8
56
-
57
- # 1.3.2 装 UTF-8 locale 数据(如果系统没生成)
58
- sudo yum install -y glibc-langpack-zh
59
- sudo localedef -i zh_CN -f UTF-8 zh_CN.UTF-8
60
-
61
- # 1.3.3 用户级兜底(关键 — 覆盖 IDE 启动的子 shell)
62
- echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc
63
- echo 'export LC_ALL=zh_CN.UTF-8' >> ~/.bashrc
64
- source ~/.bashrc
65
- ```
66
-
67
- 重新登录后再观察。如果还方块 → 工具自身在 spawn 子进程时硬清空 env(看 §6.3)。
68
-
69
- ---
70
-
71
- ## 2. 终端自身编码设置
72
-
73
- 打开终端(gnome-terminal / mate-terminal / 麒麟自带):
74
-
75
- - 编辑 → 配置文件偏好设置 → 文字
76
- - 勾选"自定义字体",选 **WenQuanYi Micro Hei** 或 **Noto Sans CJK SC, Regular**
77
- - **编码选 UTF-8**(不是 GB18030 / GBK)
78
-
79
- > 注意:编码 ≠ 字体。字体只管"显示得好看不好看",编码管"字节如何解为字符"。编码错就一定方块。
80
-
81
- ---
82
-
83
- ## 3. 真缺字体 — 离线安装(仅当 §0 判定"全程都方块"才做)
84
-
85
- ### 3.1 内网离线(推荐)
86
-
87
- 找一台能上网的机器,下载任一字体包:
88
- - `wqy-microhei.ttc`(文泉驿微米黑,体积小、覆盖全)
89
- - `NotoSansCJK-Regular.ttc`(Google Noto,效果最好)
90
-
91
- 拷到麒麟 V10 本机后:
92
-
93
- ```bash
94
- sudo mkdir -p /usr/share/fonts/cjk
95
- sudo cp *.ttc /usr/share/fonts/cjk/
96
- sudo fc-cache -fv
97
-
98
- # 验证
99
- fc-list :lang=zh | wc -l
100
- # 应 > 0
101
- ```
102
-
103
- ### 3.2 有外网 yum 源
104
-
105
- ```bash
106
- sudo yum install -y \
107
- wqy-microhei-fonts \
108
- wqy-zenhei-fonts \
109
- google-noto-sans-cjk-sc-fonts
110
- sudo fc-cache -fv
111
- ```
112
-
113
- ---
114
-
115
- ## 4. 永久化 locale
116
-
117
- ```bash
118
- # 方式 A:systemd 系统
119
- sudo localectl set-locale LANG=zh_CN.UTF-8
120
-
121
- # 方式 B:直接写文件
122
- echo 'LANG=zh_CN.UTF-8' | sudo tee /etc/locale.conf
123
- echo 'LC_ALL=zh_CN.UTF-8' | sudo tee -a /etc/locale.conf
124
- ```
125
-
126
- **关键点**:`/etc/locale.conf` 只对登录 shell 生效。**IDE 启动的子进程**不会读它,必须 §1.3.3 + §6 一起配。
127
-
128
- ---
129
-
130
- ## 5. SSH 透传 LANG
131
-
132
- ### 5.1 sshd 端(被连接机器)
133
-
134
- `/etc/ssh/sshd_config`:
135
-
136
- ```
137
- AcceptEnv LANG LC_ALL LC_CTYPE
138
- ```
139
-
140
- ```bash
141
- sudo systemctl restart sshd
142
- ```
143
-
144
- ### 5.2 客户端
145
-
146
- `~/.ssh/config`:
147
-
148
- ```
149
- Host *
150
- SendEnv LANG LC_ALL
151
- ```
152
-
153
- ---
154
-
155
- ## 6. Java 程序(IDEA / JBR / Swing GUI / 插件)专项
156
-
157
- ### 6.1 启动器追加(必加)
158
-
159
- 编辑 `idea64.vmoptions`(或 IDE 启动 vmoptions 文件),追加:
160
-
161
- ```
162
- -Dfile.encoding=UTF-8
163
- -Dconsole.encoding=UTF-8
164
- -Dsun.jnu.encoding=UTF-8
165
- -Dawt.useSystemAAFontSettings=on
166
- -Dsun.java2d.fontconfig=/etc/fonts/fonts.conf
167
- ```
168
-
169
- > **关键**:`file.encoding=UTF-8` 是流式渲染阶段字节流解码的依据。**没这一行**,JBR 会按平台默认(麒麟常为 GB18030)解码 UTF-8 字节 → 渲染过程中方块。
170
-
171
- ### 6.2 JBR 内置字体回退
172
-
173
- 即使 §3 装了字体,JBR 仍可能用自带 fallback 链。把系统字体目录显式注入:
174
-
175
- ```
176
- -Djdk.fontconfig.path=/usr/share/fonts/cjk
177
- ```
178
-
179
- 或直接拷贝字体到 JBR 的 `lib/fonts/fallback/`:
180
-
181
- ```bash
182
- JBR_FONTS=$(find ~/.local/share/JetBrains -name 'jbr' -type d 2>/dev/null | head -1)/lib/fonts/fallback
183
- [ -d "$JBR_FONTS" ] || sudo mkdir -p "$JBR_FONTS"
184
- sudo cp /usr/share/fonts/cjk/*.ttc "$JBR_FONTS/"
185
- ```
186
-
187
- ### 6.3 工具/插件 spawn 子进程时强制带 LANG
188
-
189
- 如果插件/工具源码可改,spawn 子进程时:
190
-
191
- ```kotlin
192
- // Kotlin — Swing / IDEA 插件
193
- val pb = ProcessBuilder(cmd)
194
- pb.environment()["LANG"] = "zh_CN.UTF-8"
195
- pb.environment()["LC_ALL"] = "zh_CN.UTF-8"
196
- pb.environment()["LC_CTYPE"] = "zh_CN.UTF-8"
197
- pb.environment()["PYTHONIOENCODING"] = "utf-8"
198
- ```
199
-
200
- 或更稳:在进程启动前 `setlocale(LC_ALL, "zh_CN.UTF-8")`(Java 用 `Locale.setDefault(Locale.SIMPLIFIED_CHINESE)`)。
201
-
202
- ---
203
-
204
- ## 7. 一键脚本
205
-
206
- 保存为 `fix-kylin-font.sh`:
207
-
208
- ```bash
209
- #!/usr/bin/env bash
210
- set -e
211
-
212
- if [ "$(id -u)" -ne 0 ]; then
213
- echo "请用 root 执行:sudo $0"
214
- exit 1
215
- fi
216
-
217
- echo "[1/4] 写入 UTF-8 locale"
218
- yum install -y glibc-langpack-zh
219
- localedef -i zh_CN -f UTF-8 zh_CN.UTF-8 || true
220
- localectl set-locale LANG=zh_CN.UTF-8
221
- echo 'LANG=zh_CN.UTF-8' > /etc/locale.conf
222
- echo 'LC_ALL=zh_CN.UTF-8' >> /etc/locale.conf
223
-
224
- echo "[2/4] 安装中文字体"
225
- yum install -y wqy-microhei-fonts wqy-zenhei-fonts google-noto-sans-cjk-sc-fonts
226
-
227
- echo "[3/4] 刷新字体缓存"
228
- fc-cache -fv
229
-
230
- echo "[4/4] 用户级 bashrc 兜底(覆盖 IDE 子进程)"
231
- BASHRC="$HOME/.bashrc"
232
- grep -q 'LANG=zh_CN.UTF-8' "$BASHRC" 2>/dev/null || cat >> "$BASHRC" <<'EOF'
233
-
234
- # UTF-8 locale (kylin-v10 fix)
235
- export LANG=zh_CN.UTF-8
236
- export LC_ALL=zh_CN.UTF-8
237
- export LC_CTYPE=zh_CN.UTF-8
238
- export PYTHONIOENCODING=utf-8
239
- EOF
240
-
241
- echo "[验证]"
242
- fc-list :lang=zh | wc -l
243
- locale
244
-
245
- echo "完成。请重新登录或重启 IDE。"
246
- ```
247
-
248
- ```bash
249
- chmod +x fix-kylin-font.sh
250
- sudo ./fix-kylin-font.sh
251
- ```
252
-
253
- ---
254
-
255
- ## 8. 常见坑速查
256
-
257
- | 现象 | 真因 | 修法 |
258
- |------|------|------|
259
- | **流式阶段方块 / 最终态正常** | 工具/子进程 LANG 未传 | §1.3 + §6.3 |
260
- | `locale: Cannot set LC_ALL` | 没生成 `zh_CN.UTF-8` | `yum install glibc-langpack-zh && localedef` |
261
- | 装了字体终端仍方块 | 终端自指定了缺失字体 | §2 改字体 |
262
- | Java Swing / 插件 UI 仍方块 | JRE 没用系统字体目录 | §6.1 加 `-Dsun.java2d.fontconfig` |
263
- | SSH 远程过去方块 | 远程 LANG 未传 | §5 |
264
- | 麒麟自带终端正常 / VS Code 终端方块 | VS Code 终端字体单独配 | VS Code 设置 `terminal.integrated.fontFamily: "WenQuanYi Micro Hei"` |
265
- | 改了 locale 还方块 | IDE 启动时已 cache 旧 env | 重启 IDE(kill -9 再启动) |
266
-
267
- ---
268
-
269
- ## 9. 验证清单
270
-
271
- - [ ] `locale` 输出 `zh_CN.UTF-8`
272
- - [ ] `fc-list :lang=zh` 至少 1 条
273
- - [ ] 终端 `git log` 中文正常
274
- - [ ] **工具/插件流式输出阶段**中文也正常(关键)
275
- - [ ] IDEA 编辑器中文正常
276
- - [ ] IDEA 控制台中文正常
277
- - [ ] 插件 Swing UI 中文正常
278
-
279
- ---
280
-
281
- ## TL;DR
282
-
283
- **你的现象是流式阶段方块 / 最终态正常 → 99% 是工具/子进程没拿到 `LANG=zh_CN.UTF-8`,不是字体问题。**
284
-
285
- 1. 跑 `locale` 看是不是 `POSIX/C` → 是就先 `export LANG=zh_CN.UTF-8 && source ~/.bashrc`
286
- 2. **重启 IDE**(缓存了旧 env)
287
- 3. IDEA 的 `idea64.vmoptions` 加 `-Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8`
288
- 4. 插件 spawn 子进程时显式塞 `LANG` 进 environment
289
-
290
- 字体一般不用动。