MeanderingProgrammer / MeanderingProgrammer/render-markdown.nvim

feature: add 'full_grid' style to render row separators between all table rows

Open
#661 1 comment 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
Lua
Stars
5.1k
Forks
141
PR merge metrics
No merged PRs in 30d

Description

Is your feature request related to a problem? Please describe.

Currently, render-markdown.nvim renders pipe tables with only a single separator line below the header row:

┌─────┬─────┐
│ H1  │ H2  │
├─────┼─────┤   ← only one separator
│ a   │ b   │
│ c   │ d   │
│ e   │ f   │
└─────┴─────┘

When cells contain multi-line content (wrapped links, <br>, long inline code), it becomes very hard to tell where one row ends and the next begins without a visual divider between every data row.

Describe the solution you'd like

Describe the solution you'd like

A "full_grid" style option (e.g. style = 'full_grid' under pipe_table) that renders a ├─────┼─────┤ separator between every row, not just below the header:

┌─────┬─────┐
│ H1  │ H2  │
├─────┼─────┤
│ a   │ b   │
├─────┼─────┤
│ c   │ d   │
├─────┼─────┤
│ e   │ f   │
└─────┴─────┘

Ideally this would be a new value for the existing style config key, keeping it backward-compatible:

require('render-markdown').setup({
  pipe_table = {
    style = 'full_grid', -- new option: separators between every row
  },
})
Describe alternatives you've considered
  • Pandoc Grid Table format (+---+---+ syntax) — natively has per-row borders, but requires changing the Markdown source format and breaks GFM compatibility (GitHub, Obsidian, etc.).
  • Manually inserting | --- | --- | rows between every data row — works visually with the current renderer, but pollutes the source file and produces incorrect output on GitHub (extra delimiter rows rendered as data).
  • Custom nvim_buf_set_extmark script — possible but requires significant DIY Lua work that most users won't attempt, and arguably belongs in the plugin itself.

None of these are satisfying solutions for users who want to keep standard pipe table syntax while gaining better visual row separation.

Additional information

This is particularly useful for tables that contain:

  • Wrapped long lines or inline code that spans visual rows
  • Links rendered with icons/extra characters (which can shift perceived row height)
  • Any content where the eye struggles to track rows horizontally across columns

The feature would reuse the existing border characters (, , , ) already defined in the config, so no additional character configuration should be needed. A virtual-text–based implementation (similar to how top/bottom borders are already drawn) should make this feasible without modifying the underlying Markdown source.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the existing pipe_table style handling and the virtual-text border rendering that uses the configured border characters. Add the full_grid style while preserving existing styles and Markdown source behavior. Done means separators appear between every data row, with the existing top, header, and bottom borders still correct.

Written by the indexing model from the issue text.

Assessment

Tech stack
lua, markdown, neovim
Domain
devtools
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.