>_VIM-STRYKE — STRYKE IN VIM AND NEOVIM
Load it with pathogen, get full stryke support in Vim / Neovim. stryke is a highly parallel Perl 5 superset interpreter written in Rust. vim-stryke registers the stryke filetype for *.stk files and stryke shebangs, highlights with a standalone stryke grammar generated from the stryke binary's own reflection tables (all 10,407 builtins, 90 keywords, 39 parallel primitives), indents with a brace-aware indenter, wires up stryke --lint as an ALE linter, and registers stryke --lsp for vim-lsp and coc.nvim.
Install
The stryke binary must be on $PATH for linting and LSP (brew install stryke or build strykelang). Then drop the plugin into your runtimepath:
# pathogen
cd ~/.vim/bundle
git clone https://github.com/MenkeTechnologies/vim-stryke
# then, inside vim: :Helptags
# vim-plug (add to ~/.vimrc / init.vim)
Plug 'MenkeTechnologies/vim-stryke'
# native packages (Vim 8+ / Neovim)
git clone https://github.com/MenkeTechnologies/vim-stryke \
~/.vim/pack/plugins/start/vim-stryke
Open any .stk file and it lights up — no further configuration. Help: :help vim-stryke.
What you get
Filetype detection
Every *.stk file becomes filetype=stryke. Extensionless scripts with a #!/usr/bin/env stryke shebang are detected too.
Syntax highlighting
A standalone stryke grammar — all 10,407 builtins, keywords, parallel builtins, sigil variables, strings, here-docs, regex, and thread macros — generated from the stryke binary, not a perl reskin.
Indentation
A standalone brace-aware indenter — indents after a line that opens a block / paren / bracket, dedents lines that start with a closing delimiter.
Linting (ALE)
Runs stryke --lint %t and surfaces <message> at <file> line <n> diagnostics inline. Skips silently if ALE is absent.
Language server
Registers stryke --lsp for vim-lsp, allowlisted for stryke + perl. coc.nvim snippet in the README.
Zero config
No settings required. Two opt-outs: g:vim_stryke_no_ale and g:vim_stryke_no_lsp to skip either integration.
Token categories
The grammar is generated from the stryke binary's own reflection tables — the %k keyword table, the %b builtin table (all 10,407), and the $c{parallel} category:
| Group | Tokens (sample) |
|---|---|
| Declarations | my var val our local state const typed use package pub is as |
| Function / type introducers | fn sub method class trait struct enum impl extends |
| Control flow | if elsif else unless while until loop for match when try catch finally defer |
| Phase / block hooks | BEGIN END INIT CHECK UNITCHECK BUILD DESTROY |
| Word operators | and or not xor cmp eq ne lt le gt ge x |
| Parallel builtins (39) | pmap pgrep pfor ploop pwhile pchannel preduce fan par_walk |
| Builtins (10,407) | p say print map grep reduce json_encode sha256 fetch ai a_law_decode |
| Type names (12) | Int Str Float Bool Num Any Array Hash List Map Set Void |
| Thread macros | ~> ~>> ->> |> (plus ~s> / ~p> / ~d> variants) |
Sigil variables, the $_ topic, strings / here-docs / interpolation, and m// / s/// / tr/// / qr// regex are handled too. Everything links to standard highlight groups, so every colorscheme covers it without bespoke tuning.
Layout
vim-stryke/ ├── ftdetect/stryke.vim # *.stk + #!/usr/bin/env stryke -> filetype=stryke ├── syntax/stryke.vim # standalone stryke grammar (generated; 10,407 builtins) ├── ftplugin/stryke.vim # commentstring '# %s', comments, formatoptions ├── indent/stryke.vim # standalone brace-aware indenter ├── plugin/stryke.vim # ALE linter + vim-lsp + coc wiring └── doc/stryke.txt # :help vim-stryke
Standard Vim runtime layout, so pathogen / vim-plug / native packages add it to runtimepath with no special handling. Licensed MIT.
Compatibility
| Editor / plugin | Status |
|---|---|
| Vim 8+ | Filetype, syntax, indent, ftplugin |
| Neovim | Same runtime files |
| ALE | stryke --lint linter |
| vim-lsp | stryke --lsp server |
| coc.nvim | languageserver config in README |