
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(バッファ内レンダリング)
- markview.nvim - GitHub ★3.4K
- 最新バージョン: v28.1.0(2026年3月4日)
Neovimのバッファ内でマークダウンをレンダリングするプラグイン。 見出しやリスト、コードブロックが装飾されて表示されます。
特徴:
- バッファ内でリアルタイムレンダリング
- 追加のブラウザやツールが不要
- Neovimの画面だけで完結
- ハイブリッドモード(ノーマルモードで装飾、インサートモードで生テキスト)
- Markdown だけでなく Typst / LaTeX / HTML / Asciidoc にも対応(v28系で大幅強化)
v28系の主な追加機能:
- 動的ハイライトグループのブレンドカラーを設定可能
- マークダウンのマルチバッククォート コードスパン対応
- コードスパン内の仮想テキスト表示制御
- 2スペース以上の場合の空白カラム対応のテーブル
disable()がグローバルに効いてしまうバグなど多数の修正
2. render-markdown.nvim(バッファ内レンダリング)
- render-markdown.nvim - GitHub ★4.3K
- 最新バージョン: v8.12.0(2026年3月9日)
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級のリッチなレンダリングをインサートモード中にも快適に走らせられるレベルになっています。これにより、大規模ファイルでも体感がほぼノーラグになりました。
{
'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(ブラウザプレビュー) ※メンテナンス停止状態
- markdown-preview.nvim - GitHub ★7.8K
- 最新リリース: v0.0.10(2022年5月)
- 最終 push: 2024年7月23日
ブラウザでマークダウンをプレビューするプラグイン。 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.nvimや Vivify を検討するのがおすすめです。
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 と同様、メンテが緩慢になっています。
{
'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 での使い方:
{
"selimacerbas/markdown-preview.nvim",
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
ft = { "markdown" },
build = function() vim.fn["mkdp#util#install"]() end,
}ポイント:
- 本家とコマンド・オプション(
vim.g.mkdp_*)に互換性あり - 「フォーク先で更新が止まる」リスクは付きまとうので、長期運用するならVivify への移行も視野に
7. Vivify(ブラウザプレビューの新本命)
- Vivify (jannis-baum/Vivify) - GitHub
- 最新バージョン: v0.13.0(2026年2月3日)/ 最終更新: 2026年4月1日
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 での使い方(コミュニティ製):
{
"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でフローチャートを描くことが多いので、これは必須でした。
こういった図がブラウザでそのままレンダリングされます。
markview.nvimでもMermaid対応はあるようですが、ブラウザでの表示に比べると制限があります。
markdown-preview.nvim のインストールと設定
インストール(lazy.nvim)
{
"iamcco/markdown-preview.nvim",
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
ft = { "markdown" },
build = function() vim.fn["mkdp#util#install"]() end,
}Node.jsとyarnがインストール済みの場合は、build を以下に置き換えることもできます:
build = "cd app && npx --yes yarn install",コマンド
:MarkdownPreview " プレビュー開始
:MarkdownPreviewStop " プレビュー停止
:MarkdownPreviewToggle " プレビューのトグル(開始/停止)コマンドを実行すると、ローカルにWebSocketサーバーが起動し、自動的にブラウザが開いてプレビューが表示されます。
キーマップ設定
vim.keymap.set('n', '<Space>mp', ':MarkdownPreviewToggle<CR>', { desc = 'Toggle Markdown Preview' })<Space>mp でプレビューをトグルできるようにしています。<Plug> マッピングも用意されています:
nmap <C-s> <Plug>MarkdownPreview
nmap <M-s> <Plug>MarkdownPreviewStop
nmap <C-p> <Plug>MarkdownPreviewToggle全オプション一覧
markdown-preview.nvim の設定は vim.g.mkdp_* 変数で行います。以下が全オプションです。
起動・終了
| オプション | デフォルト | 説明 |
|---|---|---|
mkdp_auto_start | 0 | Markdownバッファを開いたとき自動でプレビュー開始 |
mkdp_auto_close | 1 | Markdownバッファから離れたとき自動でプレビュー終了 |
mkdp_refresh_slow | 0 | 1 にすると保存時・インサート離脱時のみ更新。0 は編集中リアルタイム更新 |
mkdp_command_for_global | 0 | 1 にするとMarkdown以外のファイルでもコマンドが使える |
mkdp_filetypes | {'markdown'} | プレビュー対象のファイルタイプ |
ブラウザ・表示
| オプション | デフォルト | 説明 |
|---|---|---|
mkdp_browser | '' | プレビューに使うブラウザのパス。空ならシステムデフォルト |
mkdp_browserfunc | '' | URLを受け取ってブラウザを開くカスタム関数名 |
mkdp_theme | システム設定 | プレビューのテーマ。'dark' または 'light' |
mkdp_page_title | '「${name}」' | プレビューページのタイトル。${name} がファイル名に置換される |
mkdp_echo_preview_url | 0 | 1 にするとプレビューURLをコマンドラインに表示 |
ネットワーク・リモート
| オプション | デフォルト | 説明 |
|---|---|---|
mkdp_open_to_the_world | 0 | 1 にするとサーバーをネットワークに公開(リモート開発時に便利) |
mkdp_open_ip | '' | プレビューページを開くカスタムIP |
mkdp_port | '' | サーバーのポート番号。空ならランダム |
カスタムスタイル
| オプション | デフォルト | 説明 |
|---|---|---|
mkdp_markdown_css | '' | カスタムMarkdown CSSファイルの絶対パス |
mkdp_highlight_css | '' | カスタムハイライトCSSファイルの絶対パス |
複数ファイルプレビュー
| オプション | デフォルト | 説明 |
|---|---|---|
mkdp_combine_preview | 0 | 1 にすると複数ファイルで同一プレビューウィンドウを再利用 |
mkdp_combine_preview_auto_refresh | 1 | バッファ切替時に自動でプレビュー内容を更新 |
レンダリングオプション(mkdp_preview_options)
mkdp_preview_options にはレンダリングの詳細設定をテーブルで指定します:
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を使っている場合、ローカルブラウザでプレビューできます:
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 にアクセスすればプレビューが見られます。
設定例:ブラウザを新規ウィンドウで開く
デフォルトでは既存のブラウザタブで開きますが、新しいウィンドウで開きたい場合:
vim.g.mkdp_browserfunc = 'OpenMarkdownPreview'
vim.cmd([[
function OpenMarkdownPreview(url)
execute "silent ! open -a Firefox -n --args --new-window " . a:url
endfunction
]])Firefox の部分を Google\ Chrome や Brave\ Browser に変えれば、それぞれのブラウザで開けます。
対応記法と具体例
markdown-preview.nvim は多くの記法をサポートしています。
Mermaid(図・チャート)
フローチャート、シーケンス図、ガントチャートなどを記述できます。
```mermaid
graph LR
A[ユーザー] --> B[アプリ]
B --> C[データベース]
C --> B
B --> A
```ガントチャートも書けます:
```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画像にサイズを指定できます:
使用感
良い点
- リアルタイム同期 — 編集すると即座にブラウザに反映(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月時点)
| プラグイン | 表示場所 | Mermaid | KaTeX | PlantUML | Chart.js | カスタムCSS | 依存 | メンテ状況 |
|---|---|---|---|---|---|---|---|---|
| markview.nvim v28.1 | バッファ内 | 限定的 | LaTeX | — | — | — | Treesitter | 活発(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年版・参考)
- エディタの見た目が変わらない — ソースコードとして編集したい
- 対応記法が最も豊富 — Mermaid、KaTeX、PlantUML、Chart.js、Flowchart、dot、シーケンス図
- カスタマイズ性が高い — 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年の状況です。
どのプラグインが合うかは好みの問題ですが、もし数年単位で運用する予定なら、現役メンテのものを選ぶことを最優先にするのがおすすめです。
参考
各プラグイン公式
- markdown-preview.nvim - GitHub(本家、メンテ停滞中)
- selimacerbas/markdown-preview.nvim - GitHub(フォーク版)
- Vivify - GitHub
- vivify.vim - GitHub
- neovim-vivify-markdown.nvim - GitHub
- markview.nvim - GitHub
- render-markdown.nvim - GitHub
- peek.nvim - GitHub
- glow.nvim - GitHub