
Shell GPT 默认使用 rich 库渲染代码块时启用了 padding=1,导致每行代码前被自动添加一个空格;只需修改 rich 的 markdown.py 中 CodeBlock.__rich_console__ 方法,将 padding=1 改为 padding=0 即可彻底消除该问题。
shell gpt 默认使用 rich 库渲染代码块时启用了 `padding=1`,导致每行代码前被自动添加一个空格;只需修改 rich 的 `markdown.py` 中 `codeblock.__rich_console__` 方法,将 `padding=1` 改为 `padding=0` 即可彻底消除该问题。
Shell GPT 本身不直接控制代码块的格式化逻辑,而是依赖 rich 库(特别是其 rich.markdown 模块)来高亮并渲染 Markdown 中的代码块。问题根源在于 rich 对 <code> 块默认添加了左右各 1 字符的内边距(padding),而该 padding 在行首表现为一个不可见但可复制的空格,严重影响代码粘贴的可用性。
具体修复步骤如下:
-
定位文件:
找到当前 Python 环境中rich包的安装路径,通常位于:python -c "import rich; print(rich.__file__)" # 输出类似:/path/to/site-packages/rich/__init__.py # 则 markdown.py 路径为:/path/to/site-packages/rich/markdown.py
-
修改
CodeBlock.__rich_console__方法:
在markdown.py中搜索class CodeBlock,找到其__rich_console__方法(通常在render或console相关逻辑中),定位到类似以下代码行:yield Syntax( code, self.lexer_name, theme=self.theme, word_wrap=True, padding=1 )将
padding=1修改为padding=0:yield Syntax( code, self.lexer_name, theme=self.theme, word_wrap=True, padding=0 )
✅ 效果验证:
修改后重启 Shell GPT(如已运行需重新执行 sgpt 命令),再次请求生成 Bash 脚本,输出将变为:
#!/bin/bash # Get the current date and time current_date_time=$(date '+%Y-%m-%d %H:%M:%S')
——无首行空格,可直接复制执行。
⚠️ 注意事项:
- 此修改作用于全局
rich渲染行为,会影响所有使用rich.markdown.Markdown渲染代码块的工具(非仅 Shell GPT);若需更精准控制,建议向shell_gpt提交 PR,通过自定义Syntax参数或覆盖CodeBlock类实现隔离式修复。 - 使用虚拟环境时,请确保修改的是当前项目所用环境中的
rich;若通过pip install --editable安装rich源码,推荐直接在源码中修改并重新安装,便于版本管理。 -
rich>=13.7.0版本中该逻辑结构稳定,但不同 minor 版本中CodeBlock实现略有差异,建议以实际源码中Syntax(..., padding=...)的调用为准。
该方案简洁、低侵入,是解决 Shell GPT 代码块首空格问题最直接有效的工程实践。

















