Sublime Text ChatGPT插件代码格式显示异常求助
Sublime Text ChatGPT插件代码缩进渲染问题排查与解决
问题排查方向
- ChatGPT返回的原始代码块自带多余缩进:检查API返回的原始数据,确认是否是ChatGPT在生成回复时,为代码添加了额外的嵌套缩进。
- 插件处理逻辑导致缩进叠加:插件在解析或插入返回内容时,错误触发了Sublime Text的自动缩进功能,或者自身对代码块做了不必要的缩进处理。
- Markdown渲染组件解析异常:插件依赖的Markdown渲染器(内置或第三方)对代码块的缩进规则处理错误,混淆了代码块内外的缩进层级。
对应的解决方法
清理API返回的代码块冗余缩进
在插件接收ChatGPT返回数据后,先提取所有Markdown代码块,计算代码的最小缩进量并统一移除:import re def sanitize_code_blocks(raw_response): # 匹配所有Markdown代码块 pattern = re.compile(r'```(?:\w+)?\n(.*?)```', re.DOTALL) def replace_match(match): code_content = match.group(1) lines = code_content.strip().split('\n') if not lines: return match.group(0) # 计算非空行的最小缩进数 min_indent = min(len(line) - len(line.lstrip()) for line in lines if line.strip()) # 移除每行的最小缩进 cleaned_lines = [line[min_indent:] if line.strip() else line for line in lines] cleaned_code = '\n'.join(cleaned_lines) return f'```{match.group(1)[:0]}\n{cleaned_code}```' return pattern.sub(replace_match, raw_response)临时禁用自动缩进再插入内容
在向Sublime视图插入处理后的内容前,关闭自动缩进设置,插入完成后恢复:def insert_response_to_view(view, content): # 保存当前自动缩进设置 original_auto_indent = view.settings().get("auto_indent", True) view.settings().set("auto_indent", False) # 插入内容 view.run_command("insert", {"characters": content}) # 恢复原设置 view.settings().set("auto_indent", original_auto_indent)替换可靠的Markdown解析库
若内置渲染器存在bug,改用python-markdown库先将Markdown转换为Sublime支持的格式,再插入视图,避免渲染时的缩进错误。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

