English | 中文
About — Small experimental Neovim plugins: mdview (Markdown preview), pdfview / xlsview (document previews), tts (Windows SAPI speech), imgbuf (images), music (audio + Windows MIDI), nvimgames (mini-games), drawbuf (block drawing), videobuf (video), es (Everything file search), qrbuf (QR codes), httpbuf (HTTP scratch), weather (forecast), taskmgr (process manager), ntemoji (NERDTree emoji icons), tablemode (Markdown table mode), calendar (month float), colorpicker (HSV picker). Each plugin installs independently; no hard dependencies.
Focused on fun, practical, low-dependency terminal tooling. Most UIs support Chinese / English (default: follow system language; preference is remembered).
Two install styles (pick one):
| Style | Description |
|---|---|
| Whole repo (network) | One line: Plug 'cfwang123/nvimplugins' — root plugin/nvimplugins.lua auto-loads all sub-plugins |
| Per plugin (local path) | Plug only the subfolders you need (e.g. …/mdview) |
| Plugin | Overview | Docs |
|---|---|---|
| mdview | Markdown preview: single-window (:MdView) or side-by-side (:MdSideView). Bold multi-color headings (H1–H6), lists/GFM tables/code, TOC, anchors, block-character images, optional terminal HD. L toggles UI language. |
EN · 中文 |
| pdfview | PDF / Word preview: text styles, tables, Python+Pillow images; Enter/click float HD; gh temporary page HD. L toggles language. |
EN · 中文 |
| xlsview | Excel (.xlsx/.xlsm) preview: styles, multi-sheet, natural column width + h-scroll, cell motion / Ctrl-v cell-block / y yank. L language. |
EN · 中文 |
| tts | Windows SAPI TTS: <leader>vo starts from the segment at the cursor (press again to jump while playing); white control bar; volume wheel / rate; system default audio device; EN/中文 button or L. |
EN · 中文 |
| imgbuf | Image as character art (block/half/braille); fill/fit; auto-open, clipboard; optional pixel HD on WezTerm/Kitty/Ghostty. L toggles language. |
EN · 中文 |
| music | Open audio → buffer player: play/pause, scrub, volume, folder prev/next + list, LRC lyrics. Windows MIDI (.mid / presets via winmm.dll): :MusicMidi / <leader>mx. L language (o = loop). |
EN · 中文 |
| nvimgames | Minesweeper, Sokoban, 24-point, Tetris. :NvimGames menu. In-game L (or button) toggles language. |
EN · 中文 |
| drawbuf | Unicode block canvas: pencil/eraser/line/rect/ellipse/fill, truecolor, clickable status bar, undo, .draw files, demos. Status [EN/中] or L for language (` |
` = line tool). |
| videobuf | Terminal video preview (character frames + control bar); daemon-style backend similar to music. | EN · 中文 |
| es | Windows Everything file search (es.exe): :ES / <leader>es live float picker. |
EN · 中文 |
| qrbuf | Text → terminal QR code float: :QrBuf / <leader>qr, selection supported. |
EN · 中文 |
| httpbuf | Lightweight HTTP request editor + response view: :HttpBuf / <leader>http, curl or Python. |
EN · 中文 |
| weather | Statusline city / weather / temp + :Weather / <leader>we 10-day table; CN source if system Chinese, else Open-Meteo; hourly cache. |
EN · 中文 |
| taskmgr | Process manager float: :Taskmgr / <leader>ta, sort / column show-hide & width, CPU·mem intensity highlights, kill process. |
EN · 中文 |
| ntemoji | NERDTree emoji icons (no Nerd Font / no vim-devicons; brackets concealed). | EN · 中文 |
| tablemode | Table mode (vim-table-mode style): :TableModeToggle / <leader>tm; type | to live-align; Tableize, cell motions, insert/delete columns; Ctrl-v cell block + TSV yank. |
EN · 中文 |
| calendar | Month calendar float: solar / lunar / holidays; :Calendar / <leader>cal; month-year nav, notes (red ●) & color marks. |
EN · 中文 |
| colorpicker | HSV color picker: :ColorPicker / <leader>co; SV+H/S/V/A; cell steps; Enter/double-click insert or replace; in-buffer ██, click # to edit. |
EN · 中文 |
Most plugin UIs support Chinese and English. Default is ui_lang = "auto" (system UI culture; fallback often Chinese). Manual switches are saved under stdpath("data")/*-nvim-prefs.json.
| Plugin | Toggle |
|---|---|
| All UI plugins | L (unified) |
| mdview / pdfview / xlsview / imgbuf | L in preview |
| tts | Control bar EN / 中文 or L |
| music / videobuf | L language (o = loop; MIDI: m presets) |
| nvimgames (incl. 24-point) | Footer button or L |
| drawbuf | Status [EN/中] or L (` |
| es | L or Ctrl-l in picker (default follows system language; remembered) |
| qrbuf / httpbuf / weather / taskmgr / calendar / colorpicker | L in float |
require("mdview").setup({ ui_lang = "auto" }) -- or "zh" | "en"
require("tts").setup({ ui_lang = "en" })mdview
pdfview (PDF)
xlsview
tts
imgbuf
music
nvimgames — Minesweeper
nvimgames — Sokoban
nvimgames — 24-point
nvimgames — Tetris
drawbuf
videobuf
es (Everything file search)
More mdview shots: mdview/testdata/screenshots/ and demo mdview/testdata/demo.md.
TTS samples: tts/testdata/ (sample.zh.txt / sample.en.txt).
| Plugin | Neovim | Other |
|---|---|---|
| mdview | 0.9+ | Core needs nothing extra; block images need Python3 + Pillow; code highlight optional Tree-sitter; pixel HD needs a graphics-protocol terminal |
| pdfview | 0.9+ | PDF: PyMuPDF; DOCX: stdlib only; DOC: optional LibreOffice; images: Python3 + Pillow; HD: WezTerm/Kitty/Ghostty |
| xlsview | 0.9+ | Python3 + openpyxl |
| tts | 0.9+ | Windows + SAPI; Python3 + pywin32 |
| imgbuf | 0.9+ | chafa or Python3 + Pillow; HD needs WezTerm/Kitty/Ghostty + Pillow |
| music | 0.9+ | Python3 + just_playback (or pygame fallback) |
| music (MIDI) | 0.9+ | Windows + Python3 (winmm.dll, stdlib ctypes) — bundled in music |
| nvimgames | 0.9+ | termguicolors; Minesweeper benefits from mouse=a; Sokoban ships data/levels.json |
| drawbuf | 0.9+ | termguicolors; mouse=a recommended |
| videobuf | 0.9+ | Python3 + av (or opencv-python) + just_playback |
| es | 0.9+ | Windows + Everything + es.exe CLI |
| qrbuf | 0.9+ | Python3 (stdlib, scripts/qrgen.py) |
| httpbuf | 0.9+ | curl or Python3 (stdlib urllib) |
| weather | 0.9+ | curl (async HTTP) or Python3 fallback; CN + Open-Meteo, no key |
| taskmgr | 0.9+ | Python3 + psutil; Win / Linux / macOS |
| ntemoji | 0.9+ | NERDTree; do not load vim-devicons together |
| tablemode | 0.9+ | none (pure Lua) |
| calendar | 0.9+ | none (pure Lua; lunar 1900–2100) |
| colorpicker | 0.9+ | none (pure Lua; termguicolors recommended) |
Startup check: on load, only required pip packages are checked; if missing you get an install prompt. Install opens a log float with live pip output and notifies when done.
- Full check (incl. recommended):
:NvimpluginsDeps(optional plugin names) - Debug probe:
:NvimpluginsDepsProbe - Disable:
let g:nvimplugins_skip_deps = 1 - Auto-install without asking:
let g:nvimplugins_auto_install_deps = 1 - Recommended packages can be dismissed permanently (
stdpath('data')/nvimplugins_deps.json)
This repo has no npm dependencies.
After whole-repo install:
| Action | Description |
|---|---|
<leader>hh |
Help float (g:nvimplugins_keys_help to change) |
:NvimpluginsHelp |
Same |
Lists commands and current keymaps for loaded plugins only (unloaded plugins are hidden). Lines with ▶ run on Enter / click (commands that need args are pre-filled on the cmdline).
No shared setup() is required (call require(...).setup only when tuning options).
Do not mix whole-repo and per-plugin installs for the same plugins. Double-load is mostly guarded by loaded_*, but rtp would list paths twice.
Recommended when you want all sub-plugins. GitHub: cfwang123/nvimplugins.
Install is one line only — no bootstrap in your init. After plug#end(), require("imgbuf") etc. work immediately (root lua/* proxies). Commands load via plugin/nvimplugins.* on startup.
call plug#begin()
Plug 'cfwang123/nvimplugins'
call plug#end()Then run :PlugInstall once (later: :PlugUpdate). Optional require("…").setup({...}) lines are configuration only, not install.
Optional subset (before load; names match directories):
let g:nvimplugins_enable = ['mdview', 'pdfview', 'xlsview', 'tts', 'imgbuf', 'music', 'nvimgames']Default bundle: mdview · pdfview · xlsview · tts · imgbuf · music · nvimgames · drawbuf · videobuf · … · weather · ntemoji · tablemode.
{ "cfwang123/nvimplugins", lazy = false }call plug#begin()
Plug '/path/to/nvimplugins/mdview'
Plug '/path/to/nvimplugins/pdfview'
Plug '/path/to/nvimplugins/xlsview'
Plug '/path/to/nvimplugins/tts'
Plug '/path/to/nvimplugins/imgbuf'
Plug '/path/to/nvimplugins/music'
Plug '/path/to/nvimplugins/nvimgames'
Plug '/path/to/nvimplugins/drawbuf'
Plug '/path/to/nvimplugins/videobuf'
call plug#end(){
{ dir = "/path/to/nvimplugins/mdview", name = "mdview", lazy = false },
{ dir = "/path/to/nvimplugins/pdfview", name = "pdfview", lazy = false },
{ dir = "/path/to/nvimplugins/xlsview", name = "xlsview", lazy = false },
{ dir = "/path/to/nvimplugins/tts", name = "tts", lazy = false },
{ dir = "/path/to/nvimplugins/imgbuf", name = "imgbuf", lazy = false },
{ dir = "/path/to/nvimplugins/music", name = "music", lazy = false },
{ dir = "/path/to/nvimplugins/nvimgames", name = "nvimgames", lazy = false },
{ dir = "/path/to/nvimplugins/drawbuf", name = "drawbuf", lazy = false },
{ dir = "/path/to/nvimplugins/videobuf", name = "videobuf", lazy = false },
}Per-plugin install details live in each subdirectory README (mdview has tiers ① minimal → ③ full).
All optional. Loading the plugin applies defaults. Call require("…").setup({ ... }) only to override options, after the plugin is on rtp (e.g. after plug#end()).
-- mdview — Markdown preview
require("mdview").setup({
split_direction = "right",
width = 0.45,
ui_lang = "auto", -- "auto" | "zh" | "en"; L in preview
keys = { view = "<leader>mv", side = "<leader>ms" },
image = {
mode = "thumb",
python = "python",
float_hd = "always",
},
})
-- pdfview — PDF / Word
require("pdfview").setup({
auto_open = true,
ui_lang = "auto", -- L
python = "python",
image = {
backend = "python",
open_with = "float",
float_hd = "always",
},
})
-- xlsview — Excel
require("xlsview").setup({
auto_open = true,
ui_lang = "auto", -- L
python = "python",
max_rows = 500,
max_cols = 64,
fit_to_window = false, -- natural col width + h-scroll
min_col_width = 6,
max_col_width = 28,
})
-- tts — Windows SAPI speech
require("tts").setup({
volume = 80,
rate = 0,
ui_lang = "auto", -- bar EN/中文 or L
keys_play = "<leader>vo", -- from cursor segment; press again to jump
keys_stop = "<leader>vs",
-- voice = "Huihui", -- optional default; float choice is remembered
})
-- imgbuf — character art + optional HD
require("imgbuf").setup({
backend = "auto",
mode = "block",
scale = "fill",
hd = "always",
ui_lang = "auto", -- L
auto_open = true,
})
-- music — buffer audio + Windows MIDI
require("music").setup({
volume = 70,
auto_open = true,
auto_play = true,
toggle_key = "<M-m>",
keys_midi = "<leader>mx", -- MIDI player / presets
ui_lang = "auto", -- L language; o = loop (audio)
python = "python",
})
-- nvimgames — mini-games
require("nvimgames").setup({
lang = "auto", -- "auto" | "zh" | "en"; L toggles language
mine = { difficulty = "beginner" },
sokoban = { remember_level = true },
twentyfour = { solvable_only = true },
tetris = { special_score = 1000 },
})
-- drawbuf — Unicode block drawing
require("drawbuf").setup({
width = 80,
height = 24,
canvas_bg = "ffffff",
statusline = true,
ui_lang = "auto", -- status [EN/中] or L; | = line tool
})Full option lists: each plugin’s README / lua/*/config.lua (or init.lua).
| Plugin | Command / key | Action |
|---|---|---|
| mdview | <leader>mv / <leader>ms · L |
Single / side preview · language |
| pdfview | open pdf/docx · L · gh |
Preview · language · page HD |
| xlsview | open xlsx · n/p · arrows · Ctrl-v/y · L |
Preview · cells · block yank · language |
| tts | <leader>vo / <leader>vs · L |
Play from cursor segment / stop · language |
| imgbuf | open image · L |
Preview · language |
| music | open audio · <M-m> · L · o |
Player · language · loop |
| music | :Music / :MusicMidi / <leader>mx · L |
Audio + Windows MIDI · language |
| videobuf | open video · L · o |
Preview · language · loop |
| weather | :Weather / <leader>we · L |
10-day popup · language |
| ntemoji | (auto with NERDTree) | Emoji icons |
| tablemode | :TableModeToggle / <leader>tm · <leader>tr |
Table mode · realign |
| nvimgames | :NvimGames · L in-game |
Menu · language |
| drawbuf | :Draw · L · | |
Canvas · language · line tool |
| bundle | <leader>hh |
Help (loaded plugins only) |
| Plugin | Entry |
|---|---|
| mdview | EN · 中文 · demo · screenshots |
| pdfview | EN · 中文 |
| xlsview | EN · 中文 |
| tts | EN · 中文 · samples |
| imgbuf | EN · 中文 |
| music | EN · 中文 |
| nvimgames | EN · 中文 |
| drawbuf | EN · 中文 |
| videobuf | EN · 中文 · design |
| es | EN · 中文 |
| qrbuf | EN · 中文 |
| httpbuf | EN · 中文 |
| weather | EN · 中文 |
| ntemoji | EN · 中文 |
| tablemode | EN · 中文 |
Personal / prototype collection. Copy subfolders as needed. Prefer filing issues and changes under the matching plugin directory.












