Fast Neovim with file explorer, fuzzy finder, LSP, git, and markdown preview.
Requirements: Neovim 0.11+
bash <(curl -fsSL ifaka.github.io/vimzap/i)Then use v, vi, or vim to open Neovim.
Press <Space> to open the command menu.
| Key | Action |
|---|---|
e |
File explorer (toggle) |
f |
File: ff=find fg=grep fb=buffers fr=recent |
c |
Code: ca=action cr=rename cf=format cs=symbols |
d |
Debug: db=breakpoint dc=continue di=step in do=step over |
g |
Git: gg=lazygit gf=files gs=status |
p |
Prophet (SFCC): pe=enable pd=disable pt=toggle pc=upload all pf=find controller pi=find template |
s |
Search: sh=help sk=keymaps sc=commands sq=share markdown (QR) |
h |
Health check (diagnostics + performance) |
? |
Show all keymaps |
Inside the file tree:
| Key | Action |
|---|---|
a |
Add file/folder (end with / for folder) |
d |
Delete |
r |
Rename |
m |
Move (select with Tab first) |
c |
Copy |
Open files appear in a tab bar at the top (like VSCode tabs).
| Key | Action |
|---|---|
Shift+h |
Previous buffer (tab) |
Shift+l |
Next buffer (tab) |
<Space>fb |
Show all buffers |
<Space>bd |
Close current buffer |
<Space>bo |
Close other buffers |
| Key | Action |
|---|---|
gd |
Go to definition |
gr |
Go to references |
gi |
Go to implementation |
gy |
Go to type definition |
K |
Hover docs |
Ctrl+k (insert mode) |
Signature help |
[d ]d |
Prev/next diagnostic |
[e ]e |
Prev/next error |
[h ]h |
Prev/next git hunk |
| Key | Action |
|---|---|
gcc |
Comment/uncomment line |
gc (visual) |
Comment selection |
cs"' |
Change surrounding quotes " to ' |
ds" |
Delete surrounding quotes |
ysiw" |
Surround word with quotes |
| Key | Action |
|---|---|
Ctrl+/ |
Toggle floating terminal |
Open terminal, run npm run dev, then Ctrl+/ to hide (keeps running). Press Ctrl+/ again to show logs.
Start your app with --inspect:
node --inspect server.js
# or for Next.js/Remix:
NODE_OPTIONS='--inspect' npm run devThen attach in Neovim with <Space>dc and select "Attach to Node".
| Key | Action |
|---|---|
<Space>db |
Toggle breakpoint |
<Space>dB |
Conditional breakpoint |
<Space>dc |
Continue / Start debugger |
<Space>di |
Step into |
<Space>do |
Step over |
<Space>dO |
Step out |
<Space>du |
Toggle debug UI |
<Space>de |
Eval expression (works in visual mode) |
<Space>dq |
Stop debugger |
VimZap includes prophet.nvim for SFCC development with optimized performance and non-intrusive notifications. It aims to match the functionality of the VSCode Prophet extension.
| Feature | VimZap | VSCode Prophet |
|---|---|---|
| WebDAV Upload | Yes | Yes |
| Auto-upload on save | Yes | Yes |
| ISML Syntax Highlighting | Yes | Yes |
| DWScript (.ds) Support | Yes | Yes |
| Controller Quick-Find | Yes (<Space>pf) |
Yes (Ctrl+F7) |
| ISML Template Picker | Yes (<Space>pi) |
Via explorer |
| SFCC Completions | Yes (URLUtils, Resource, server.*) | Yes (full LSP) |
| Snippets | Yes | Yes |
| Sandbox Connectivity Check | Yes | Yes |
| Full SDAPI Debugger | No (placeholder) | Yes |
| Log Viewer | Browser link | In-editor |
1. Create dw.json in your project root:
{
"hostname": "your-sandbox-name.demandware.net",
"username": "your-username",
"password": "your-password",
"code-version": "version1"
}2. Authentication:
- hostname: Your SFCC sandbox domain (e.g.,
dev01-company.demandware.net) - username: Your Business Manager username
- password: Your Business Manager password
- code-version: Code version in Business Manager (usually
version1)
Important: Add dw.json to your .gitignore to avoid committing credentials!
| Key | Action |
|---|---|
<Space>pe |
Enable auto-upload (watches file changes) |
<Space>pd |
Disable auto-upload |
<Space>pt |
Toggle auto-upload on/off |
<Space>pc |
Clean upload all cartridges |
<Space>pu |
Upload specific cartridge |
<Space>pC |
Check sandbox connectivity |
<Space>ps |
Show status |
<Space>pf |
Find controller (like Ctrl+F7) |
<Space>pi |
Find ISML template |
<Space>pl |
View logs (opens browser) |
<Space>pr |
Refresh controller cache |
When editing JavaScript files in SFCC projects, you get completions for:
URLUtils.url(),.http(),.https(),.abs(), etc.Resource.msg(),Resource.msgf()server.get(),.post(),.append(),.prepend(),.replace()res.render(),.json(),.redirect(),.setViewData()Transaction.wrap(),.begin(),.commit(),.rollback()require('dw/...')module suggestions
- Auto-upload is disabled by default to prevent accidental uploads
- Use
<Space>pcfor initial upload of all cartridges - Enable auto-upload (
<Space>pe) only when actively developing - Use
<Space>pfto quickly jump to any controller endpoint - All notifications appear in the corner (non-intrusive)
Prophet.nvim automatically detects cartridges using .project files:
your-project/
├── dw.json
├── cartridge1/
│ ├── .project
│ └── cartridge/
│ ├── scripts/
│ ├── templates/
│ └── static/
└── cartridge2/
├── .project
└── cartridge/
VimZap uses system clipboard by default:
yy(yank line) → Copies to system clipboardp→ Pastes from system clipboard- Works with browser Ctrl+C/Ctrl+V
Tip: If you delete something after yanking, use "0p to paste the yanked text (not the deleted text).
Open any .md file to see rendered headings, code blocks, and tables.
| Command | Action |
|---|---|
:RenderMarkdown toggle |
Toggle preview on/off |
Share your markdown file to your phone for reading on the go.
Setup:
brew install qrencodeUsage:
- Open a markdown file in Neovim
- Press
<Space>sqto show QR code - Scan with your phone to open rendered markdown in browser
- Press
qor<Esc>to close QR and stop server
The server runs only on your local network and stops automatically when you close the QR window.
bash <(curl -fsSL ifaka.github.io/vimzap/i) updateRun diagnostics to verify your setup:
:VimZapHealthOr use the keymap: <Space>h
This checks:
- Neovim version
- Plugin installation
- LSP servers
- External tools
- Startup performance
VimZap includes both required and optional plugins:
snacks.nvim- Dashboard, file explorer, fuzzy findermason.nvim- LSP server managernvim-cmp+ completion sources - Autocompletionwhich-key.nvim- Keymap hintsgitsigns.nvim- Git integrationrender-markdown.nvim- Markdown previewconform.nvim- Code formattingmini.nvim- Pairs, comments, surroundnvim-treesitter- Syntax highlighting
nvim-ts-autotag- Auto-close HTML/JSX tagsnvim-dap+nvim-dap-ui+nvim-nio- Debug supportprophet.nvim- Salesforce Commerce Cloud development
Note: VimZap will continue to work even if optional plugins are missing. You may see reduced functionality for specific features (like debugging or SFCC development) but core editing will work fine.
To install optional plugins, use your preferred Neovim package manager or add them to your packpath.
- Check if LSP servers are installed:
:Mason
- Verify LSP is running:
:LspInfo
- Check for errors:
:VimZapHealth
-
Run benchmark:
:VimZapBench
Or press
<Space>B -
If startup > 100ms, check plugin load times in the benchmark output
- Verify keymap is loaded:
:map <Space>
- Check for conflicts:
:verbose map <Space>
LSP servers install automatically on first launch. If they're missing:
:MasonThen select and install: i to install, X to uninstall
macOS:
brew install lazygit qrencode ripgrepLinux:
sudo apt install lazygit qrencode ripgrep # Ubuntu/Debian
sudo dnf install lazygit qrencode ripgrep # Fedora-
Check if qrencode is installed:
which qrencode
-
Check if Python 3 is available:
python3 --version
-
Install missing dependencies:
brew install qrencode # macOS sudo apt install qrencode # Linux
If you have existing Neovim config, VimZap will warn before overwriting. To keep both:
-
Backup your config:
mv ~/.config/nvim ~/.config/nvim.backup
-
Install VimZap:
curl -fsSL ifaka.github.io/vimzap/i | bash -
Merge configs manually or use VimZap exclusively
bash <(curl -fsSL ifaka.github.io/vimzap/i) uninstall