// VIM-ARB — VIM / NEOVIM SUPPORT FOR THE ARB LANGUAGE

filetype detection (*.arb + arb shebang) · standalone arb grammar (widgets, query verbs, sources, directives) · brace-aware indent · :make / :ArbRun via arb · ALE lint via arb --check

vim-lsp / coc via arb --lsp · nvim-dap via arb --dap · pathogen / vim-plug / native packages · zero config · opt-outs g:vim_arb_no_ale, g:vim_arb_no_lsp

Report GitHub Issues
// Color scheme

>_VIM-ARB — ARB IN VIM AND NEOVIM

Load it with pathogen, get full arb support in Vim / Neovim. arb is a Tcl/Tk-flavored declarative language for visualizing and modifying Unix pipelines — pipe a stream in and it spawns a ratatui TUI or a served web page from a small spec, on fusevm/JIT. vim-arb registers the arb filetype for *.arb files and arb shebangs, highlights with a standalone arb grammar (widgets, query verbs, input sources, directives, keywords, widget paths, -flags, /regex/), indents with a brace-aware indenter, wires :make / :ArbRun through the arb binary, registers arb --check as an ALE linter, and registers arb --lsp for vim-lsp and coc.nvim (plus arb --dap guidance for nvim-dap).

Install

The arb binary must be on $PATH for running, linting and LSP. Then drop the plugin into your runtimepath:

# pathogen
cd ~/.vim/bundle
git clone https://github.com/MenkeTechnologies/vim-arb
# then, inside vim:  :Helptags

# vim-plug (add to ~/.vimrc / init.vim)
Plug 'MenkeTechnologies/vim-arb'

# native packages (Vim 8+ / Neovim)
git clone https://github.com/MenkeTechnologies/vim-arb \
    ~/.vim/pack/plugins/start/vim-arb

Open any .arb file and it lights up — no further configuration. Help: :help vim-arb.

What you get

Filetype detection

Every *.arb file becomes filetype=arb. Extensionless scripts with a #!/usr/bin/env arb shebang are detected too.

Syntax highlighting

A standalone arb grammar — widgets, query verbs, input sources, directives, control flow, declarations, widget paths, -flags, /regex/, strings, durations/sizes, and operators — built from arb's own LSP corpus.

Indentation

A standalone brace-aware indenter — indents after a line that opens a block / paren / bracket, dedents lines that start with a closing delimiter.

Run & lint

:compiler arb wires :make to arb --check into the quickfix list; :ArbRun executes the buffer via arb %. ALE runs the same lint inline.

Language server & debugger

Registers arb --lsp for vim-lsp (filetype arb) — diagnostics, hover, completion; coc.nvim + nvim-dap (arb --dap) snippets in the README. Each is invoked with only its flag (no appended --stdio), and the wiring is guarded so the plugin still loads cleanly if the binary is absent.

Zero config

No settings required. Opt-outs: g:vim_arb_no_ale, g:vim_arb_no_lsp, and g:vim_arb_no_maps to skip an integration or the run mapping.

Token categories

The grammar classifies tokens into the categories arb's language defines — built from the verb / widget / directive corpus the arb binary ships:

GroupTokens (sample)
Widgetstext tail table list gauge spark bars histo chart select input tabs block frame grid
Input sourcesin in.json in.csv in.tsv in.xml in.html in.yaml in.toml in.logfmt
Directivessource bind configure grid import out search timeout expect
Control flowif elif else for while match case when break continue return
Declarationsfn var let import save as
Query verbsfield fields find attr where pick map tally count sum sort_by group_by uniq percentile sma
Actionsalert beep exec flash quit
Widget paths.codes .errors .ps.sel
Flags-label -max -cols -color -prompt -tabs

Regex literals (/.../, optional trailing i), single- and double-quoted strings with escapes, the |> / <- / => operators, durations / sizes, numbers, and the full operator set are handled too. Everything links to standard highlight groups, so every colorscheme covers it without bespoke tuning.

Layout

vim-arb/
├── ftdetect/arb.vim     # *.arb + arb shebang -> filetype=arb
├── syntax/arb.vim       # standalone arb grammar (widgets, verbs, sources)
├── scripts/gen_syntax.sh # stamps syntax/arb.vim with the arb version
├── ftplugin/arb.vim     # commentstring '# %s', :compiler arb, :ArbRun
├── compiler/arb.vim     # :make via arb --check -> quickfix
├── indent/arb.vim       # standalone brace-aware indenter
├── plugin/arb.vim       # ALE linter + vim-lsp + coc + nvim-dap wiring
└── doc/arb.txt          # :help vim-arb

Standard Vim runtime layout, so pathogen / vim-plug / native packages add it to runtimepath with no special handling. Licensed MIT.

Compatibility

Editor / pluginStatus
Vim 8+Filetype, syntax, indent, ftplugin, compiler
NeovimSame runtime files
ALEarb --check linter
vim-lsparb --lsp language server
coc.nvimlanguageserver config in README
nvim-daparb --dap debug adapter config in README