Neovim マークダウンプレビュー 2026年版 - markdown-preview.nvim メンテ停止後の選び方

Neovim マークダウンプレビュー 2026年版 - markdown-preview.nvim メンテ停止後の選び方

作成日:
更新日:

Neovimでマークダウンをプレビューするプラグインを導入しました。

Redditでの議論も参考にしながら検討しました。

【2026年5月10日 更新】 よく閲覧いただいている記事のため、最新情報で全面アップデートしました。

  • markdown-preview.nvim が事実上のメンテナンス停止状態 になっています(最終push: 2024年7月、未対応Issues 261件、未マージPR 33件)
  • 代替として selimacerbas/markdown-preview.nvim フォークと、Vivify (jannis-baum/vivify) が活発化
  • render-markdown.nvim は v8.12.0(2026年3月)でビューポートベースの大幅パフォーマンス改善
  • markview.nvim は v28.1.0(2026年3月)で Typst / LaTeX / HTML / Asciidoc にも対応

詳細はこの後の各セクションと「【2026年版】現在の推奨」をご覧ください。

検討したプラグイン

Neovimのマークダウンプレビューは大きく3つのアプローチに分かれます。

アプローチ説明代表的なプラグイン
バッファ内レンダリングNeovimの画面上で装飾表示markview.nvim、render-markdown.nvim
ブラウザプレビュー外部ブラウザでHTML表示markdown-preview.nvim、peek.nvim
ターミナルプレビューターミナル内でレンダリングglow.nvim

それぞれ見ていきます。

1. markview.nvim(バッファ内レンダリング)

Neovimのバッファ内でマークダウンをレンダリングするプラグイン。 見出しやリスト、コードブロックが装飾されて表示されます。

特徴:

  • バッファ内でリアルタイムレンダリング
  • 追加のブラウザやツールが不要
  • Neovimの画面だけで完結
  • ハイブリッドモード(ノーマルモードで装飾、インサートモードで生テキスト)
  • Markdown だけでなく Typst / LaTeX / HTML / Asciidoc にも対応(v28系で大幅強化)

v28系の主な追加機能:

  • 動的ハイライトグループのブレンドカラーを設定可能
  • マークダウンのマルチバッククォート コードスパン対応
  • コードスパン内の仮想テキスト表示制御
  • 2スペース以上の場合の空白カラム対応のテーブル
  • disable() がグローバルに効いてしまうバグなど多数の修正

2. render-markdown.nvim(バッファ内レンダリング)

markview.nvim と同じバッファ内レンダリング系。GitHub Stars 4,300超の人気プラグインです。

特徴:

  • モーダルレンダリング — ノーマルモードでは装飾表示、インサートモードでは生テキスト表示に自動切替
  • Anti-conceal — カーソル行の仮想テキストを非表示にして編集しやすくする
  • ファイルタイプ非依存 — Markdownが注入された任意のファイルタイプで動作
  • 大規模ファイル対応 — 表示範囲のみレンダリング、ファイルサイズで無効化可能
  • 見出し、コードブロック、テーブル、チェックボックス、リンク、LaTeXブロック、コールアウトなど幅広い要素に対応
  • 要件: Neovim ≥ 0.9.0(推奨 ≥ 0.10.0)、Treesitter(markdown / markdown_inline)、Nerd Font

v8系のパフォーマンス革命: ビューポートベースレンダリングが導入され、「画面に映っている範囲+少しのバッファ」のみを解析するようになりました。デフォルト100msのデバウンス付きで、Obsidian級のリッチなレンダリングをインサートモード中にも快適に走らせられるレベルになっています。これにより、大規模ファイルでも体感がほぼノーラグになりました。

lazy.nvimでのセットアップ
{
  'MeanderingProgrammer/render-markdown.nvim',
  dependencies = { 'nvim-treesitter/nvim-treesitter' },
  ft = { 'markdown' },
  opts = {
    render_modes = { 'n', 'c', 't' },
  },
}

markview.nvimとの違いは、render-markdown.nvimの方がより「編集の邪魔をしない」設計思想が強い点です。Anti-conceal機能やモーダルレンダリングで、編集中のストレスを軽減してくれます。

3. markdown-preview.nvim(ブラウザプレビュー) ※メンテナンス停止状態

ブラウザでマークダウンをプレビューするプラグイン。 Node.jsベースのローカルサーバーを立ち上げて、ブラウザでリアルタイムに確認できます。

特徴:

  • ブラウザでプレビュー(同期スクロール対応)
  • リアルタイム同期(WebSocket)
  • Mermaid、KaTeX、PlantUML、Chart.js、Flowchart、シーケンス図、dot(Graphviz)に対応
  • カスタムCSS / ハイライトCSS でスタイル変更可能
  • リモートプレビュー対応(mkdp_open_to_the_world

【2026年5月時点 注意】 作者 iamcco 氏からの応答が途絶え、Issues 261件・PR 33件が未対応のまま積み上がっています(Issue #688 で「これからどうする?」が議論されている状態)。

機能自体は今でも問題なく動きますが、新規導入であれば後述のフォーク版 selimacerbas/markdown-preview.nvimVivify を検討するのがおすすめです。

4. peek.nvim(ブラウザプレビュー)

  • peek.nvim - GitHub ★857
  • 最終 commit: 2024年8月20日(PRは2025〜2026も来ているがマージは滞り気味)

markdown-preview.nvimと同じブラウザプレビュー系ですが、Denoランタイムで動作します。

特徴:

  • Deno ベース(Node.js不要、Denoが必要)
  • GitHub風のスタイルでレンダリング
  • KaTeX(数式)、Mermaid(図)に対応
  • webview / ブラウザ / カスタムアプリから表示方法を選択可能
  • プレビューウィンドウ内でvimキー操作(j/k スクロール、u/d 半ページ、g/G 先頭/末尾)

【2026年5月時点 注意】 本体のリリースは2024年8月で止まっており、vim.validate のdeprecation 警告などの修正PRも未マージ。Mermaid のバージョンも古めのままです。動作はするものの、こちらも markdown-preview.nvim と同様、メンテが緩慢になっています。

lazy.nvimでのセットアップ
{
  'toppair/peek.nvim',
  event = { 'VeryLazy' },
  build = 'deno task --quiet build:fast',
  config = function()
    require('peek').setup({
      theme = 'dark',
      app = 'browser',
    })
    vim.api.nvim_create_user_command('PeekOpen', require('peek').open, {})
    vim.api.nvim_create_user_command('PeekClose', require('peek').close, {})
  end,
}

markdown-preview.nvimとの違いは、peek.nvimの方が軽量で設定がシンプルな反面、対応する記法(PlantUML、Chart.js、Flowchart、dot等)は少なめです。

5. glow.nvim(ターミナルプレビュー) ※アーカイブ済み

Charm社の glow をNeovim内で使うプラグイン。ターミナル上でマークダウンをレンダリングします。

特徴:

  • ターミナル内で完結(ブラウザ不要)
  • glow CLIのレンダリング品質
  • シンタックスハイライト付き

ただし、2025年3月にリポジトリがアーカイブされており、今後のメンテナンスは期待できません。glow CLI自体は健在なので、プラグインなしで :!glow % のようにコマンドとして使う方法はあります。

6. selimacerbas/markdown-preview.nvim(フォーク版)

iamcco 版が止まっている間に、有志が立ち上げたメンテ継続中のフォーク。コミュニティのIssueや軽微な修正PRが取り込まれており、設定や使い方は本家とほぼ同じです。

lazy.nvim での使い方:

Lua(フォーク版)
{
  "selimacerbas/markdown-preview.nvim",
  cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
  ft = { "markdown" },
  build = function() vim.fn["mkdp#util#install"]() end,
}

ポイント:

  • 本家とコマンド・オプション(vim.g.mkdp_*)に互換性あり
  • 「フォーク先で更新が止まる」リスクは付きまとうので、長期運用するならVivify への移行も視野に

7. Vivify(ブラウザプレビューの新本命)

markdown-preview.nvim の事実上の後継として注目されている、新しい Markdown ライブビューワーです。Neovim プラグインではなくスタンドアロンのビューワーですが、専用の Neovim プラグインを併用することで「保存と同時にブラウザでプレビュー」のフローが組めます。

Vivify 本体の特徴:

  • 拡張 Markdown 構文をフルサポート
  • KaTeX / Graphviz (dot) / Mermaid に対応
  • カスタマイズ可能なアラートブロック
  • 相対 / 絶対パスのファイルリンク対応
  • [[toc]] で目次自動生成
  • <kbd> タグでキーボードショートカットの装飾
  • 同期スクロール
  • 軽量で起動が速い

Neovim 連携の選択肢:

プラグイン説明
vivify.vim公式 Vim/Neovim プラグイン
Imamiland/neovim-vivify-markdown.nvimコミュニティ製 Lua プラグイン(Mason 連携あり、Neovim 0.8+)

lazy.nvim での使い方(コミュニティ製):

Lua(Vivify)
{
  "Imamiland/neovim-vivify-markdown.nvim",
  ft = { "markdown" },
  config = function()
    require("vivify-markdown").setup()
  end,
}

markdown-preview.nvim と比べての強み:

  • アクティブにメンテされている
  • スタンドアロンビューワーなので、Neovim 以外(VS Code 等)からも同じ環境で使える
  • 起動が速く、依存も少ない

現時点の弱み:

  • PlantUML / Chart.js / シーケンス図 など、markdown-preview.nvim ほどの記法網羅性はない
  • Mermaid と KaTeX があれば十分、という用途向け

選んだのは markdown-preview.nvim(→ 2026年は要再考)

当初の選定経緯です。2026年5月時点では、後述のとおり選定を見直すべきタイミングに来ています。 詳しくは「【2026年版】現在の推奨」を参照してください。

いくつか試した結果、markdown-preview.nvim を選びました。

選んだ理由

1. エディタの見た目が変わらない

markview.nvimはバッファ内でレンダリングするため、Neovimの画面自体が装飾されます。

これに違和感がありました。

  • ソースコードとして編集しているのに、見た目が変わる
  • 「生のマークダウン」を見ながら編集したい
  • 装飾が入ると、記法の確認がしづらい

markdown-preview.nvimなら、エディタはそのまま。 「編集画面」と「プレビュー画面」が明確に分離されていて、頭の切り替えがしやすいです。

2. Mermaid などの高度な表示に対応

これが決め手でした。

markdown-preview.nvimは以下に対応しています:

  • Mermaid — フローチャート、シーケンス図、ガントチャートなど
  • KaTeX — 数式
  • PlantUML — UML図
  • chart.js — グラフ

技術文書を書くときに、Mermaidでフローチャートを描くことが多いので、これは必須でした。

Loading diagram...

こういった図がブラウザでそのままレンダリングされます。

markview.nvimでもMermaid対応はあるようですが、ブラウザでの表示に比べると制限があります。

markdown-preview.nvim のインストールと設定

インストール(lazy.nvim)

Lua
{
  "iamcco/markdown-preview.nvim",
  cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
  ft = { "markdown" },
  build = function() vim.fn["mkdp#util#install"]() end,
}

Node.jsとyarnがインストール済みの場合は、build を以下に置き換えることもできます:

Lua(yarn版)
build = "cd app && npx --yes yarn install",

コマンド

Vim script
:MarkdownPreview       " プレビュー開始
:MarkdownPreviewStop   " プレビュー停止
:MarkdownPreviewToggle " プレビューのトグル(開始/停止)

コマンドを実行すると、ローカルにWebSocketサーバーが起動し、自動的にブラウザが開いてプレビューが表示されます。

キーマップ設定

Lua
vim.keymap.set('n', '<Space>mp', ':MarkdownPreviewToggle<CR>', { desc = 'Toggle Markdown Preview' })

<Space>mp でプレビューをトグルできるようにしています。<Plug> マッピングも用意されています:

Vim script
nmap <C-s> <Plug>MarkdownPreview
nmap <M-s> <Plug>MarkdownPreviewStop
nmap <C-p> <Plug>MarkdownPreviewToggle

全オプション一覧

markdown-preview.nvim の設定は vim.g.mkdp_* 変数で行います。以下が全オプションです。

起動・終了

オプションデフォルト説明
mkdp_auto_start0Markdownバッファを開いたとき自動でプレビュー開始
mkdp_auto_close1Markdownバッファから離れたとき自動でプレビュー終了
mkdp_refresh_slow01 にすると保存時・インサート離脱時のみ更新。0 は編集中リアルタイム更新
mkdp_command_for_global01 にするとMarkdown以外のファイルでもコマンドが使える
mkdp_filetypes{'markdown'}プレビュー対象のファイルタイプ

ブラウザ・表示

オプションデフォルト説明
mkdp_browser''プレビューに使うブラウザのパス。空ならシステムデフォルト
mkdp_browserfunc''URLを受け取ってブラウザを開くカスタム関数名
mkdp_themeシステム設定プレビューのテーマ。'dark' または 'light'
mkdp_page_title'「${name}」'プレビューページのタイトル。${name} がファイル名に置換される
mkdp_echo_preview_url01 にするとプレビューURLをコマンドラインに表示

ネットワーク・リモート

オプションデフォルト説明
mkdp_open_to_the_world01 にするとサーバーをネットワークに公開(リモート開発時に便利)
mkdp_open_ip''プレビューページを開くカスタムIP
mkdp_port''サーバーのポート番号。空ならランダム

カスタムスタイル

オプションデフォルト説明
mkdp_markdown_css''カスタムMarkdown CSSファイルの絶対パス
mkdp_highlight_css''カスタムハイライトCSSファイルの絶対パス

複数ファイルプレビュー

オプションデフォルト説明
mkdp_combine_preview01 にすると複数ファイルで同一プレビューウィンドウを再利用
mkdp_combine_preview_auto_refresh1バッファ切替時に自動でプレビュー内容を更新

レンダリングオプション(mkdp_preview_options)

mkdp_preview_options にはレンダリングの詳細設定をテーブルで指定します:

Lua
vim.g.mkdp_preview_options = {
  mkit = {},                    -- markdown-it のオプション
  katex = {},                   -- KaTeX のオプション
  uml = {},                     -- PlantUML のオプション
  maid = {},                    -- Mermaid のオプション
  disable_sync_scroll = 0,      -- 同期スクロール無効化(1で無効)
  sync_scroll_type = 'middle',  -- 'middle' | 'top' | 'relative'
  hide_yaml_meta = 1,           -- YAMLフロントマターを非表示
  sequence_diagrams = {},       -- js-sequence-diagrams のオプション
  flowchart_diagrams = {},      -- flowchart.js のオプション
  content_editable = false,     -- プレビューページの編集可否
  disable_filename = 0,         -- ファイル名ヘッダーの非表示
  toc = {},                     -- 目次のオプション
}

sync_scroll_type の違い:

  • 'middle' — カーソル位置が常にプレビューの中央
  • 'top' — Vimの上端がプレビューの上端に一致
  • 'relative' — カーソルの相対位置をプレビューに反映

設定例:リモート開発でのプレビュー

SSHでリモートサーバーのNeovimを使っている場合、ローカルブラウザでプレビューできます:

Lua
vim.g.mkdp_open_to_the_world = 1
vim.g.mkdp_open_ip = '0.0.0.0'
vim.g.mkdp_port = 8888
vim.g.mkdp_echo_preview_url = 1

この設定で http://<サーバーIP>:8888 にアクセスすればプレビューが見られます。

設定例:ブラウザを新規ウィンドウで開く

デフォルトでは既存のブラウザタブで開きますが、新しいウィンドウで開きたい場合:

Lua(macOS)
vim.g.mkdp_browserfunc = 'OpenMarkdownPreview'
vim.cmd([[
  function OpenMarkdownPreview(url)
    execute "silent ! open -a Firefox -n --args --new-window " . a:url
  endfunction
]])

Firefox の部分を Google\ ChromeBrave\ Browser に変えれば、それぞれのブラウザで開けます。

対応記法と具体例

markdown-preview.nvim は多くの記法をサポートしています。

Mermaid(図・チャート)

フローチャート、シーケンス図、ガントチャートなどを記述できます。

```mermaid
graph LR
    A[ユーザー] --> B[アプリ]
    B --> C[データベース]
    C --> B
    B --> A
```
Loading diagram...

ガントチャートも書けます:

```mermaid
gantt
    dateFormat YYYY-MM-DD
    title プロジェクトスケジュール
    section 設計
    要件定義 :a1, 2025-01-01, 30d
    基本設計 :after a1, 20d
    section 開発
    実装 :2025-02-20, 45d
    テスト :2025-04-06, 15d
```

KaTeX(数式)

インライン数式と数式ブロックに対応しています。

インライン: $E = mc^2$
 
ブロック:
$$
\sum_{i=1}^{n} x_i = x_1 + x_2 + \cdots + x_n
$$

PlantUML(UML図)

シーケンス図やクラス図を記述できます。

```plantuml
Bob -> Alice : hello
Alice -> Bob : hi
```

または @startuml / @enduml 記法も使えます。

Chart.js(グラフ)

JSON形式でグラフを記述できます。

```chart
{
  "type": "pie",
  "data": {
    "labels": ["Red", "Blue", "Yellow"],
    "datasets": [{
      "data": [300, 50, 100],
      "backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56"]
    }]
  }
}
```

シーケンス図(js-sequence-diagrams)

```sequence-diagrams
Andrew->China: Says
Note right of China: China thinks
China-->Andrew: How are you?
Andrew->>China: I am good thanks!
```

Flowchart(flowchart.js)

```flowchart
st=>start: 開始
e=>end: 終了
op1=>operation: 処理
cond=>condition: 条件
 
st->op1->cond
cond(yes)->e
cond(no)->op1
```

dot(Graphviz)

```dot
digraph G {
  A -> B -> C;
  B -> D;
}
```

目次

以下のいずれかをファイル内に記述すると、目次が自動生成されます:

${toc}
[[toc]]
[toc]
[[_toc_]]

画像サイズ指定

通常のMarkdown画像にサイズを指定できます:

![image](path/to/image.png =400x200)

使用感

良い点

  • リアルタイム同期 — 編集すると即座にブラウザに反映(WebSocket接続)
  • スクロール同期 — エディタのカーソル位置とブラウザが連動(3種類の同期モード)
  • 記法の対応幅が広い — Mermaid、KaTeX、PlantUML、Chart.js、Flowchart、dot、シーケンス図
  • ダークテーマ — 目に優しい(ヘッダーにテーマ切替ボタンも隠れている)
  • カスタムCSS — 自分好みのスタイルに変更可能

気になる点

  • ブラウザが必要 — 当たり前だけど、ブラウザが立ち上がる
  • リソース消費 — Node.jsサーバーが常駐するので、多少メモリを使う
  • 同期スクロールがカクつく場合があるupdatetime を小さい値(例:100)に設定すると改善する

とはいえ、常時使うわけではないので問題ありません。 READMEを書くときや、技術文書を整理するときに使っています。

Tips

  • 同期スクロールがラグい場合は set updatetime=100 を設定
  • WSL 2でブラウザが開かない場合は sudo apt-get install -y xdg-utils でインストール
  • ヘッダーにマウスを合わせると、テーマ切替ボタンが表示される

他のプラグインが向いている人

バッファ内レンダリング系(markview.nvim / render-markdown.nvim)

  • バッファ内で完結させたい
  • ブラウザを開きたくない
  • シンプルなマークダウン(見出し、リスト、コードブロック程度)がメイン
  • Neovimの画面が装飾されても気にならない

「ターミナルから出たくない」という人にはこちらの方が合うかもしれません。 render-markdown.nvimはAnti-conceal機能があるので、markview.nvimよりも編集中の違和感が少ないです。

peek.nvim

  • markdown-preview.nvimの機能はオーバースペック
  • Node.jsよりDenoの方が好み
  • GitHub風のプレビューで十分
  • 軽量な方がいい

glow.nvim(アーカイブ済み)

  • ターミナル内で読み取り確認したい
  • 新規プロジェクトでの採用は非推奨(メンテ終了のため)

まとめ

プラグイン比較表(2026年5月時点)

プラグイン表示場所MermaidKaTeXPlantUMLChart.jsカスタムCSS依存メンテ状況
markview.nvim v28.1バッファ内限定的LaTeXTreesitter活発(2026/3)
render-markdown.nvim v8.12バッファ内LaTeXブロックTreesitter活発(2026/3)
markdown-preview.nvim 本家ブラウザ対応対応対応対応対応Node.js停滞(2024/7〜)
selimacerbas/markdown-preview.nvimブラウザ対応対応対応対応対応Node.js継続中
Vivify v0.13.0ブラウザ対応対応対応本体バイナリ活発(2026/4)
peek.nvimブラウザ対応対応Deno停滞(2024/8〜)
glow.nvimターミナルglow CLIアーカイブ済み

【2026年版】現在の推奨

用途別に整理すると、こんな感じです。

あなたのニーズおすすめ
バッファ内で完結したい / ブラウザを開きたくないrender-markdown.nvim v8 系(パフォーマンス改善が大きく、最初に試すべき)
Markdown 以外(Typst / LaTeX / Asciidoc / HTML)も装飾表示したいmarkview.nvim v28 系
ブラウザで Mermaid / KaTeX をサクッと見たいVivify + vivify.vim または neovim-vivify-markdown.nvim
PlantUML / Chart.js / Flowchart / dot まで網羅したいselimacerbas/markdown-preview.nvim(フォーク)
既存の mkdp_* 設定を捨てたくないselimacerbas/markdown-preview.nvim(互換あり)
Deno が好きpeek.nvim(ただしメンテは緩慢、PR重ね待ち)

当初 markdown-preview.nvim を選んだ理由(2025年版・参考)

  1. エディタの見た目が変わらない — ソースコードとして編集したい
  2. 対応記法が最も豊富 — Mermaid、KaTeX、PlantUML、Chart.js、Flowchart、dot、シーケンス図
  3. カスタマイズ性が高い — CSS変更、リモートプレビュー、ポート指定など

技術文書で Mermaid や KaTeX、PlantUML、Chart.js を全部使いたい場合、対応記法の豊富さでは markdown-preview.nvim が群を抜いていました。

結局、私は何を使っているか

2026年5月時点での個人的な構成は次の通りです。

  • メインのプレビュー: Vivify + vivify.vim
    • Mermaid / KaTeX が使えれば9割の用途は事足りる
    • 起動が速く、Node.js 依存もないため軽い
  • ブログ執筆など PlantUML / Chart.js が必要なファイル: selimacerbas フォーク版
  • コードと一緒に Markdown を見たい場面: render-markdown.nvim v8(インサートモードでもラグがほぼ無い)

「編集画面」と「プレビュー画面」を分けたい派 vs バッファ内派、という以前の軸はそのままに、選択肢が増えて、メンテ状況も含めて選べるようになったのが2026年の状況です。

どのプラグインが合うかは好みの問題ですが、もし数年単位で運用する予定なら、現役メンテのものを選ぶことを最優先にするのがおすすめです。


参考

各プラグイン公式

議論・メンテ状況