bug: pipe table inside a markdown code block is wider than `code.width = 'block'`, so cell text gets hidden
维护者通常 6 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start by reading core/handlers.lua and code.lua, which the issue identifies as the handler ordering and block sizing entry points; compare how the outer fenced block is sized with how the injected Markdown table is rendered. Reproduce with the provided nested table and code = { width = 'block', right_pad = 1 }. Done means the rendered table fits its block or its text remains visible, with existing block sizing behavior preserved.
由索引模型根据 Issue 内容生成。
描述
Neovim version (nvim -v)
0.12.6
Neovim distribution
N/A
Operating system
Linux (Ubuntu, kernel 6.8)
Terminal emulator / GUI
WezTerm
Describe the bug
When a pipe table is written inside a fenced code block whose language is markdown,
the rendered table can be wider than the code block, which is sized with width = 'block'.
Buffer characters that end up past the block's right edge are hidden by the background
virt_text_win_col padding. Inline padding and the overlay │ are still drawn, so one
character goes missing in the middle of a cell.
Input (outer fence is 4 backticks only for GitHub display):
```markdown
| id | name |
|-|-|
|1| ichiro|
|100|momotake|
```
Rendered with the minimal configuration below (the e of momotake is missing):
┌─────┬──────────┐
│ id │ name │
├─────┼──────────┤
│ 1 │ ichiro │
│ 100 │ momotak │
└─────┴──────────┘
What happens:
- The code block body width is computed from the raw line widths:
the longest line is|100|momotake|, which is 14 cells, plusright_pad = 1, so 15. - The table renderer adds padding around tightly written cells (
|100|->│ 100 │),
so that row is rendered 18 cells wide and theelands in column 15. - The background padding at
virt_text_win_col = 15covers buffer text only, so thee
is hidden. The inline spaces and the│overlay after it are still drawn.
If no buffer character crosses the edge, nothing is hidden, but the table still sticks out
past the block. For example, with momo instead of momotake, the table is 16 cells wide
while the block is only 14. Tables already written with spaces
(| 100 | momotake |) barely change width, so they are not affected.
doc/limitations.md says the raw string width "is if anything going to be an over-estimate".
Nested markdown tables are a case where it is an under-estimate.
Expected behavior
The code block's block width accounts for the rendered width of the nested table,
or at least never hides the table's text.
Healthcheck output
==============================================================================
render-markdown: ✅
render-markdown.nvim [versions] ~
- ✅ OK neovim >= 0.11
- ✅ OK tree-sitter ABI: 15
- ✅ OK plugin: 8.14.1
render-markdown.nvim [configuration] ~
- ✅ OK valid
render-markdown.nvim [tree-sitter markdown] ~
- ✅ OK parser: installed
- ✅ OK ABI: 15
- ✅ OK highlights: ~/.local/share/nvim/site/queries/markdown/highlights.scm
- ✅ OK highlighter: enabled
render-markdown.nvim [tree-sitter markdown_inline] ~
- ✅ OK parser: installed
- ✅ OK ABI: 15
- ✅ OK highlights: ~/.local/share/nvim/site/queries/markdown_inline/highlights.scm
render-markdown.nvim [tree-sitter html] ~
- ✅ OK parser: installed
- ✅ OK ABI: 14
render-markdown.nvim [tree-sitter latex] ~
- ✅ OK parser: installed
- ✅ OK ABI: 15
render-markdown.nvim [tree-sitter yaml] ~
- ✅ OK parser: installed
- ✅ OK ABI: 15
render-markdown.nvim [icons] ~
- ✅ OK using: mini.icons
render-markdown.nvim [latex] ~
- ✅ OK using: { "utftex", "latex2text" }
render-markdown.nvim [conflicts] ~
- ✅ OK headlines: not installed
- ✅ OK markview: not installed
- ✅ OK obsidian: installed but should not conflict
- ✅ OK snacks: not installed
Plugin configuration
Minimal configuration that reproduces it:
require('render-markdown').setup({
code = { width = 'block', right_pad = 1 },
})
Plugin error log
N/A
Confirmations
- I have updated this plugin to the latest version using my plugin manager
- I have updated all treesitter parsers (:TSUpdate)
- I have provided the text contained in all screenshots as raw text in this issue. This means if there is a screenshot below it is the copy pasted contents of the file in the screenshot. I understand that my issue will be closed if I have not.
Additional information
This looks like the same root cause as #580: the outer fenced_code_block is rendered
from the top-level tree before the injected markdown tree, so it cannot see how wide the
nested content becomes. One idea I have not tried yet: process nested markdown roots before
their parent in core/handlers.lua, record their marks in the request context, and have
code.lua size the block with context:width() per row. But it changes
handler ordering, and recording marks for the top-level tree has side effects (for example,
section indent marks would feed into heading width), so I wanted to ask before opening a PR.
Would you be open to that direction, or would you prefer another approach? I'm happy to
send a PR.
- 主要语言
- Lua
- 星标
- 5.2k
- 派生
- 145
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
MeanderingProgrammer/render-markdown.nvim 的其他 Issue
-
enhancement
难度 5/5 一周以上 新手友好度 38/100
MeanderingProgrammer/render-markdown.nvim#685 ·
维护者通常 6 天内回复
-
bug: Tables don't render correctly if the pipe at the end of line is missing可能已有人在做 @samholmes 于 94 天前认领。 未关闭bug
难度 3/5 1-2 天 新手友好度 55/100
MeanderingProgrammer/render-markdown.nvim#673 · 2 条评论 ·
维护者通常 6 天内回复
-
enhancement
难度 4/5 3-5 天 新手友好度 48/100
MeanderingProgrammer/render-markdown.nvim#656 ·
维护者通常 6 天内回复
查看 MeanderingProgrammer/render-markdown.nvim 的全部 Issue
相似的 Issue
-
bug
难度 1/5 1-3 小时 新手友好度 85/100
bradcypert/plum#265 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 65/100
-
code:todo
难度 1/5 1 小时以内 新手友好度 72/100
-
Enhancement
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复
-
lua: LUA_32BITS is PRIVATE, so consumers get a different ABI than the compiled library可能已有人在做 @suda-morris 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 74/100
espressif/idf-extra-components#873 ·
维护者通常 1 天内回复