skywind3000/vim-quickui

The missing UI extensions for Vim 9 (and NeoVim) !! 😎

Vim Script

1,179

35 commits

updated Jun 30, 2026

See the code

README

vim-quickui

GitHub Stars License: MIT Vim NeoVim

Borland/Turbo C++ inspired TUI widget library for Vim and NeoVim β€” menus, dialogs, context menus and more, all in pure VimScript with no dependencies.

Features

  • Rich widget set β€” menubar, context menu, data-driven dialog, listbox, textbox, preview window, and more
  • Data-driven dialog system β€” declare UI controls as data, get results as a dictionary
  • Cross-platform β€” consistent experience across Vim 8.2+ and NeoVim 0.4+
  • Keyboard-driven β€” navigate with hjkl, confirm with Enter, cancel with ESC; full mouse support
  • Customizable β€” multiple color schemes (Borland, gruvbox, solarized...) and border styles
  • Pure VimScript β€” no +python, no external dependencies, zero overhead

Installation

Using vim-plug:

Plug 'skywind3000/vim-quickui'

Using Vim's built-in package manager:

mkdir -p ~/.vim/pack/vendor/start
cd ~/.vim/pack/vendor/start
git clone https://github.com/skywind3000/vim-quickui

Quick Start

Add a dropdown menubar to your Vim β€” just put this in your .vimrc:

" clear all the menus
call quickui#menu#reset()

" install a 'File' menu
call quickui#menu#install('&File', [
            \ [ "&Open\t(:w)", 'call feedkeys(":tabe ")'],
            \ [ "&Save\t(:w)", 'write'],
            \ [ "--", ],
            \ [ "E&xit", 'qa' ],
            \ ])

" install a 'Edit' menu
call quickui#menu#install('&Edit', [
            \ [ '&Trailing Space', 'call StripTrailingWhitespace()' ],
            \ [ 'Format J&son', '%!python -m json.tool' ],
            \ ])

" map to a key
noremap <silent><space><space> :call quickui#menu#open()<cr>

Press <space><space> and you'll see a menubar at the top of Vim β€” navigate with hjkl or mouse, pick an item with Enter:

For a complete configuration example, see menu_example.vim.

Showcase

The menubar displays a row of dropdown menus at the top of the screen, similar to the classic Borland/Turbo C++ IDE. Use & in item text to define hotkeys, and \t to add right-aligned annotations:

Customizable border styles and color schemes:

Border StylesColor Schemes

See: Menu API reference

Context Menu

A right-click style menu that appears near the cursor β€” ideal for presenting commands relevant to the current context:

Default BorderCustom Border
let content = [
            \ ['&Help Keyword', 'echo 123' ],
            \ ['&Signature', 'echo 456' ],
            \ ['-'],
            \ ['&Peek Definition', 'echo 789'],
            \ ]
call quickui#context#open(content, {})

See: Context Menu API reference

Dialog

The most powerful widget in QuickUI. Declare a list of controls β€” inputs, radio buttons, checkboxes, dropdowns, buttons β€” and get all values back as a dictionary:

let items = [
            \ {'type': 'label', 'text': 'Settings:'},
            \ {'type': 'input', 'name': 'name', 'prompt': 'Name:', 'value': 'test'},
            \ {'type': 'radio', 'name': 'choice', 'prompt': 'Pick:', 'items': ['A', 'B', 'C']},
            \ {'type': 'check', 'name': 'flag', 'text': 'Enable Feature'},
            \ {'type': 'button', 'name': 'confirm', 'items': [' &OK ', ' &Cancel ']},
            \ ]
let result = quickui#dialog#open(items, {'title': 'Settings'})
echo result

Supported controls: label, input, radio, check, button, separator, dropdown. Navigate with Tab/Shift-Tab or hotkeys.

See: Dialog guide | Tutorial | Dialog Examples

More Widgets

QuickUI also provides several additional widgets:

WidgetDescriptionDocs
ListboxScrollable list with search (/ or ?) and mouse wheel support β€” great for buffer switching or function navigationManual
TextboxDisplay arbitrary text in a popup β€” useful for reading help or messages without splitting windowsManual
PreviewPopup preview window near cursor β€” glimpse definitions or quickfix results without opening filesManual
InputboxSingle-line text input popupManual
TerminalRun terminal programs in a popup windowManual
ConfirmSimple choice dialogManual
ListboxPreviewTextbox

Documentation

  • User Manual β€” complete API reference for all widgets
  • Dialog Guide β€” in-depth guide for the dialog system
  • vim-navigator β€” navigate your commands easily, powered by QuickUI

Author

Created by Lin Wei (@skywind3000), an open-source advocate and long-time Vim user. This project is inspired by the Borland/Turbo C++ IDE from the 1990s β€” an attempt to bring that classic TUI experience into modern Vim.

A Turbo C++ style editor I wrote for Watcom C++ back in the day

License

MIT


Like vim-quickui? Star the repo on GitHub and vote on vim.org. Follow @skywind3000 on Twitter for updates.

borland
command-line
gui
neovim
neovim-plugin
neovim-plugins
popup
productive
quickui
terminal
text-editor
tui
ui-components
vim
vim9
vim9-plugin
vim9-script
vim-plugin
vim-plugins
vim-quickui

skywind3000/vim-quickui

The missing UI extensions for Vim 9 (and NeoVim) !! 😎

Vim Script

1,179

35 commits

updated Jun 30, 2026

See the code

README

vim-quickui

GitHub Stars License: MIT Vim NeoVim

Borland/Turbo C++ inspired TUI widget library for Vim and NeoVim β€” menus, dialogs, context menus and more, all in pure VimScript with no dependencies.

Features

  • Rich widget set β€” menubar, context menu, data-driven dialog, listbox, textbox, preview window, and more
  • Data-driven dialog system β€” declare UI controls as data, get results as a dictionary
  • Cross-platform β€” consistent experience across Vim 8.2+ and NeoVim 0.4+
  • Keyboard-driven β€” navigate with hjkl, confirm with Enter, cancel with ESC; full mouse support
  • Customizable β€” multiple color schemes (Borland, gruvbox, solarized...) and border styles
  • Pure VimScript β€” no +python, no external dependencies, zero overhead

Installation

Using vim-plug:

Plug 'skywind3000/vim-quickui'

Using Vim's built-in package manager:

mkdir -p ~/.vim/pack/vendor/start
cd ~/.vim/pack/vendor/start
git clone https://github.com/skywind3000/vim-quickui

Quick Start

Add a dropdown menubar to your Vim β€” just put this in your .vimrc:

" clear all the menus
call quickui#menu#reset()

" install a 'File' menu
call quickui#menu#install('&File', [
            \ [ "&Open\t(:w)", 'call feedkeys(":tabe ")'],
            \ [ "&Save\t(:w)", 'write'],
            \ [ "--", ],
            \ [ "E&xit", 'qa' ],
            \ ])

" install a 'Edit' menu
call quickui#menu#install('&Edit', [
            \ [ '&Trailing Space', 'call StripTrailingWhitespace()' ],
            \ [ 'Format J&son', '%!python -m json.tool' ],
            \ ])

" map to a key
noremap <silent><space><space> :call quickui#menu#open()<cr>

Press <space><space> and you'll see a menubar at the top of Vim β€” navigate with hjkl or mouse, pick an item with Enter:

For a complete configuration example, see menu_example.vim.

Showcase

The menubar displays a row of dropdown menus at the top of the screen, similar to the classic Borland/Turbo C++ IDE. Use & in item text to define hotkeys, and \t to add right-aligned annotations:

Customizable border styles and color schemes:

Border StylesColor Schemes

See: Menu API reference

Context Menu

A right-click style menu that appears near the cursor β€” ideal for presenting commands relevant to the current context:

Default BorderCustom Border
let content = [
            \ ['&Help Keyword', 'echo 123' ],
            \ ['&Signature', 'echo 456' ],
            \ ['-'],
            \ ['&Peek Definition', 'echo 789'],
            \ ]
call quickui#context#open(content, {})

See: Context Menu API reference

Dialog

The most powerful widget in QuickUI. Declare a list of controls β€” inputs, radio buttons, checkboxes, dropdowns, buttons β€” and get all values back as a dictionary:

let items = [
            \ {'type': 'label', 'text': 'Settings:'},
            \ {'type': 'input', 'name': 'name', 'prompt': 'Name:', 'value': 'test'},
            \ {'type': 'radio', 'name': 'choice', 'prompt': 'Pick:', 'items': ['A', 'B', 'C']},
            \ {'type': 'check', 'name': 'flag', 'text': 'Enable Feature'},
            \ {'type': 'button', 'name': 'confirm', 'items': [' &OK ', ' &Cancel ']},
            \ ]
let result = quickui#dialog#open(items, {'title': 'Settings'})
echo result

Supported controls: label, input, radio, check, button, separator, dropdown. Navigate with Tab/Shift-Tab or hotkeys.

See: Dialog guide | Tutorial | Dialog Examples

More Widgets

QuickUI also provides several additional widgets:

WidgetDescriptionDocs
ListboxScrollable list with search (/ or ?) and mouse wheel support β€” great for buffer switching or function navigationManual
TextboxDisplay arbitrary text in a popup β€” useful for reading help or messages without splitting windowsManual
PreviewPopup preview window near cursor β€” glimpse definitions or quickfix results without opening filesManual
InputboxSingle-line text input popupManual
TerminalRun terminal programs in a popup windowManual
ConfirmSimple choice dialogManual
ListboxPreviewTextbox

Documentation

  • User Manual β€” complete API reference for all widgets
  • Dialog Guide β€” in-depth guide for the dialog system
  • vim-navigator β€” navigate your commands easily, powered by QuickUI

Author

Created by Lin Wei (@skywind3000), an open-source advocate and long-time Vim user. This project is inspired by the Borland/Turbo C++ IDE from the 1990s β€” an attempt to bring that classic TUI experience into modern Vim.

A Turbo C++ style editor I wrote for Watcom C++ back in the day

License

MIT


Like vim-quickui? Star the repo on GitHub and vote on vim.org. Follow @skywind3000 on Twitter for updates.

borland
command-line
gui
neovim
neovim-plugin
neovim-plugins
popup
productive
quickui
terminal
text-editor
tui
ui-components
vim
vim9
vim9-plugin
vim9-script
vim-plugin
vim-plugins
vim-quickui

Significant stargazers

TomΓ‘Ε‘ JanouΕ‘ek

159 followers Β· starred Feb 2020

Chayoung You

285 followers Β· starred May 2020

Csaba Hruska

228 followers Β· starred Dec 2019

Muhammed Zakir

19 followers Β· starred May 2022