feature: opt-in stable wrapped tables while reading in Normal mode

オープン
#711 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
38/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
lua, markdown, neovim
領域
frontend

調査の方向性

Start by reading the Updater:hide behavior described in the issue and the linked discussions in #692 and #689, then trace how wrapped table rows are rendered and revealed. The issue does not name source files or tests; first locate the table rendering and cursor handling entry points. Done means an opt-in setting preserves wrapped table alignment in Normal mode, reveals source in Insert mode, and leaves current behavior as the default, with cursor limitations documented.

索引モデルが issue の本文から書いたものです。

説明

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

Related: #692 and #689. I read the explanation about virtual lines and the decision to retain the current behavior. This is a request for an opt-in reading behavior, following the suggestion in this comment.

I like the wrapped tables and want to keep them enabled. However, moving the cursor onto a wrapped row in Normal mode reveals the underlying Markdown source. That row loses its column layout and the content below it shifts, making the table difficult to read while navigating through the document.

For example, in a window narrow enough to wrap the descriptions:

| Application | Fit for your workflow | Assessment |
| --- | --- | --- |
| Session tagging | Label chats by topic and distinguish implementation work from review | Useful when retrieving previous work across many sessions |
| Skill suggestions | Suggest an appropriate review or implementation skill based on the request | Useful when several skills could apply to the same task |
| Title refresh | Decide whether the conversation has changed enough to justify a new title | Keep the existing title when the topic has not materially changed |

I tried anti_conceal.disabled_modes = { 'n' } and restarted Neovim, but the wrapped row still switches to source. My configuration also had anti_conceal.ignore.table_border = { 'n' }, which does not prevent this behavior either.

Looking at Updater:hide, replacement marks on the cursor row are hidden before the ordinary anti-conceal handling. That explains why the setting does not affect wrapped rows.

Describe the solution you'd like

Would an opt-in option to keep wrapped table rows rendered in Normal mode fit the project?

The desired behavior is:

  • Keep cell wrapping and column alignment while reading in Normal mode.
  • Reveal the underlying source for editing in Insert mode.
  • Retain the current behavior by default.
  • Keep this option scoped to wrapped tables rather than changing anti-conceal for headings, links, and other elements.

I understand virtual lines cannot provide normal buffer navigation, selection, or editing. This request does not require native interaction with every rendered continuation line or a separate preview-buffer implementation. A reading mode with documented cursor limitations, including skipping virtual content if necessary, would still be useful. Entering editing or selection modes would need a defined transition back to source.

If that trade-off cannot work reliably with Neovim's cursor behavior, documenting explicitly that wrapped cursor rows bypass anti-conceal settings would at least make the limitation easier to discover.

Describe alternatives you've considered
  • pipe_table.wrap = false: removes the wrapping I want to preserve, so it does not solve the reading problem.
  • anti_conceal.disabled_modes = { 'n' }: tried locally; it does not affect the forced source reveal for wrapped rows and applies more broadly than tables.
  • anti_conceal.ignore.table_border = { 'n' }: already configured; it does not preserve the wrapped row.
  • Disabling anti-conceal entirely: #692 reports the same limitation with that setting.
  • A separate preview buffer: discussed in #689, but I understand that introduces substantially more complexity.
Additional information

Observed with:

  • Plugin commit: 8e8795368391036643b622875a6da6a51bcd33f4
  • Neovim: v0.13.0-dev-1929+g17f43325b1
  • Arch Linux

Relevant configuration during the unsuccessful test:

require('render-markdown').setup({
    render_modes = true,
    win_options = {
        conceallevel = { rendered = 2 },
        concealcursor = { rendered = 'nc' },
    },
    anti_conceal = {
        disabled_modes = { 'n' },
        ignore = {
            table_border = { 'n' },
        },
    },
    pipe_table = {
        cell = 'padded',
        wrap = true,
    },
})
主要言語
Lua
スター
5.2k
フォーク
152
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

MeanderingProgrammer/render-markdown.nvim のほかの issue

MeanderingProgrammer/render-markdown.nvim の issue をすべて見る

似ている issue

Lua の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。