Skip to content

Repository files navigation

nvimplugins

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)

Plugins

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 · 中文

UI language (zh / 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" })

Screenshots

mdview

mdview

pdfview (PDF)

pdfview

xlsview

xlsview

tts

tts

imgbuf

imgbuf

music

music

nvimgames — Minesweeper

mine

nvimgames — Sokoban

sokoban

nvimgames — 24-point

24

nvimgames — Tetris

tetris

drawbuf

drawbuf

videobuf

videobuf

es (Everything file search)

es

More mdview shots: mdview/testdata/screenshots/ and demo mdview/testdata/demo.md.
TTS samples: tts/testdata/ (sample.zh.txt / sample.en.txt).

Dependencies (summary)

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.

Bundle help

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).

Quick install

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.

Style A: whole repo via vim-plug (network)

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.

vim-plug

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.

lazy.nvim

{ "cfwang123/nvimplugins", lazy = false }

Style B: per plugin (local path)

vim-plug

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()

lazy.nvim (example)

{
  { 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).

Optional setup() (per plugin)

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).

Quick commands / keys

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)

Doc index

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 · 中文

License / notes

Personal / prototype collection. Copy subfolders as needed. Prefer filing issues and changes under the matching plugin directory.

About

Small experimental Neovim plugins: mdview (Markdown preview), pdfview / xlsview (document previews), tts (Windows SAPI speech), imgbuf (images), music / mixer (audio & MIDI), nvimgames (mini-games), drawbuf (block drawing), videobuf (video), es (Everything file search). Each plugin installs independently; no hard dependencies.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages