Personal configuration for Neovim, Vim, tmux, and assorted CLI tools.
- Install current releases of Vim and Neovim.
- Install a Nerd Font (I usually grab one from nerdfonts.com).
- Copy
.vim/into$HOME/.vim,.config/nvim/into$HOME/.config/nvim, and.vimrcinto$HOME/.vimrc.
- Install Node.js so LSP servers and formatters can run under
node. - Install the Tree-sitter CLI plus Neovim’s npm helper:
npm install -g tree-sitter-cli neovim tree-sitter --version # sanity check
Use your preferred python package manager to create a virtualenv and install debugpy and pynvim.
Update the Python path in .config/nvim/lua/es/globals.lua (vim.g.python_host_path) to point at your virtualenv's Python interpreter. This path is automatically used by init.lua and DAP, keeping the Python host and debugger in sync.
When launching Neovim you'll see the Mason installer and Tree-sitter setup run automatically.
- Telescope pickers expect
ripgrepandfdon$PATH. - Language-specific runtimes (Go, Python, etc.) should be installed before launching Mason or DAP adapters.
- Git, tmux, and a POSIX shell are assumed.
- Install tpm.
- Copy
.tmux.confto$HOME/.tmux.conf. - Start tmux and press
<prefix>I(capital i) to install plugins via tpm.
| Shortcut | Action |
|---|---|
C-k (no prefix) |
Reset pane display and clear scrollback (send-keys -R, C-l, clear-history). |
<prefix>a |
Toggle synchronize-panes for the current window. |
M-9 / M-0 (no prefix) |
Swap to previous/next window and focus it. |
S-Left / S-Right |
Resize pane 10 cells horizontally. |
S-Up / S-Down |
Resize pane 10 cells vertically. |
| Category | Plugins |
|---|---|
| Formatting | stevearc/conform.nvim |
| LSP | neovim/nvim-lspconfig, williamboman/mason.nvim, williamboman/mason-lspconfig.nvim, jay-babu/mason-nvim-dap.nvim |
| Treesitter | nvim-treesitter/nvim-treesitter, nvim-treesitter/nvim-treesitter-context |
| Completion | hrsh7th/nvim-cmp, hrsh7th/cmp-buffer, hrsh7th/cmp-path, hrsh7th/cmp-cmdline, hrsh7th/cmp-nvim-lua, hrsh7th/cmp-nvim-lsp, hrsh7th/cmp-nvim-lsp-signature-help |
| Debugging | mfussenegger/nvim-dap, rcarriga/nvim-dap-ui, mfussenegger/nvim-dap-python, leoluz/nvim-dap-go, nvim-neotest/nvim-nio |
| Telescope | nvim-telescope/telescope.nvim, nvim-telescope/telescope-file-browser.nvim, nvim-telescope/telescope-live-grep-args.nvim, nvim-telescope/telescope-fzf-native.nvim |
| UI | nvim-tree/nvim-web-devicons, windwp/nvim-autopairs, folke/tokyonight.nvim, nvim-tree/nvim-tree.lua, stevearc/dressing.nvim, nvim-lualine/lualine.nvim, nvimdev/dashboard-nvim, ellisonleao/glow.nvim, stevearc/oil.nvim, karb94/neoscroll.nvim |
| Navigation | folke/flash.nvim, ggandor/flit.nvim, ggandor/lightspeed.nvim |
| Productivity | tpope/vim-surround, tpope/vim-unimpaired, tpope/vim-fugitive, lewis6991/gitsigns.nvim, wellle/targets.vim, kana/vim-textobj-user, echasnovski/mini.ai, LuanVSO/nvim-regexplacement, andymass/vim-matchup |
| Language Extras | nordtheme/vim, dracula/vim, fatih/vim-go, terrastruct/d2-vim |
Both Vim and Neovim use
github/copilot.vim. In Neovim, it is lazy-loaded and can be manually triggered via:Copilotif needed. Plugins auto-load from.config/nvim/lua/es/plugins/*.luavia lazy.nvim. Tree-sitter usesprefer_git = trueto download pre-built parsers. Mason auto-installs DAP adapters (debugpy,delve,codelldb,js-debug-adapter) on first launch.The configuration follows modern Neovim 0.11+ idioms with proper lazy loading, uses
vim.uvfor async operations, and centralizes settings for maintainability.
Most Neovim keymaps are centralized in .config/nvim/lua/es/keymaps.lua. Buffer-local keymaps (like gitsigns) are defined in keymaps.lua as exported functions and called from plugin on_attach callbacks. Shared vim/neovim keymaps live in .vim/common.vim. Leader key is <Space>.
The keymap system follows a consistent namespace that mirrors the Neovim API:
<Leader>l*= LSP operations (mirrorsvim.lsp.buf.*API)<Leader>d*= Diagnostic operations (mirrorsvim.diagnostic.*API, navigation uses]d/[ddefaults)<Leader>b*= Debug/breakpoint operations (DAP)<Leader>f*= Find operations (Telescope with ripgrep/fd)<Leader>h*= Hunk operations (gitsigns, buffer-local in git files)<Leader>t*= Toggle operations (gitsigns)<Leader>g*= Git operations (Fugitive)<Leader>e*= NvimTree operations (explorer/file tree navigation)
| Shortcut | Action |
|---|---|
]d / [d |
Next/previous diagnostic |
]D / [D |
First/last diagnostic |
Keymaps mirror vim.lsp.buf.* API methods for easy memorization.
| Shortcut | Action |
|---|---|
<Leader>la |
Code action |
<Leader>lc |
Incoming calls |
<Leader>lC |
Outgoing calls |
<Leader>ld |
Definition |
<Leader>lD |
Declaration |
<Leader>lf |
Format (conform) |
<Leader>lh |
Hover |
<Leader>li |
Implementation |
<Leader>lo |
Document outline (symbols) |
<Leader>lr |
References |
<Leader>ln |
Rename |
<Leader>ls |
Signature help |
<Leader>lt |
Type definition |
<Leader>lw |
Workspace symbols |
Keymaps mirror vim.diagnostic.* API methods. Navigation uses ]d/[d defaults above.
| Shortcut | Action |
|---|---|
<Leader>df |
Diagnostic float |
<Leader>dl |
Diagnostic loclist |
<Leader>dq |
Diagnostic quickfix |
DAP debugger controls and inspection.
| Shortcut | Action |
|---|---|
<Leader>bc |
Continue |
<Leader>bb |
Breakpoint (toggle) |
<Leader>bB |
Breakpoint (conditional) |
<Leader>bs |
Step over |
<Leader>bi |
Step into |
<Leader>bo |
Step out |
<Leader>bt |
Terminate |
<Leader>br |
REPL |
<Leader>bu |
UI (toggle) |
<Leader>bv |
Load vscode config |
<Leader>bl |
Run last |
<Leader>bk |
Kill all breakpoints |
<Leader>bh |
Hover variables |
<Leader>bw |
Watches |
<Leader>bf |
Frames |
<Leader>bp |
Preview scopes |
Telescope pickers using ripgrep for text search and fd for file finding.
Hidden file search (<Leader>fh) and the directory picker that feeds Oil (<Leader>fD) share the same fd exclude list in .config/nvim/lua/es/keymaps.lua, so you can tweak which build artifacts or vendor dirs stay hidden in one place.
| Shortcut | Action |
|---|---|
<Leader>ff |
Find files |
<Leader>fr |
Find with ripgrep (live grep) |
<Leader>fb |
Find buffers |
<Leader>fg |
Find git files |
<Leader>fo |
Find oldfiles (recent) |
<Leader>fh |
Find hidden files |
<Leader>fD |
Browse directories (Oil) |
<Leader>fw |
Find workspace symbols |
<Leader>fd |
Find document symbols |
<Leader>fk |
Find keymaps |
<Leader>fe |
Find explorer (file browser) |
<Leader>fE |
Find explorer all (no gitignore) |
Fugitive operations.
| Shortcut | Action |
|---|---|
<Leader>gg |
Git status |
Gitsigns operations (buffer-local, only in git files).
| Shortcut | Action |
|---|---|
]c / [c |
Next/previous hunk |
<Leader>hs |
Stage hunk |
<Leader>hr |
Reset hunk |
<Leader>hS |
Stage buffer |
<Leader>hR |
Reset buffer |
<Leader>hu |
Undo stage |
<Leader>hp |
Preview hunk |
<Leader>hi |
Preview hunk inline |
<Leader>hb |
Blame line |
<Leader>hd |
Diff |
<Leader>hD |
Diff against ~ |
<Leader>hq / <Leader>hQ |
Hunks to quickfix (current/all) |
<Leader>tb |
Toggle blame |
<Leader>tw |
Toggle word diff |
ih (text object) |
Hunk text object |
File tree navigation.
| Shortcut | Action |
|---|---|
<Leader>et |
NvimTree toggle |
<Leader>ef |
NvimTree find file |
<Leader>ec |
NvimTree close |
<Leader>ep |
NvimTree open parent directory |
<Leader>eo |
NvimTree open Oil directory |
Quick jump navigation (preserves vim defaults for s/S).
| Shortcut | Action |
|---|---|
<Leader>s |
Flash jump |
<Leader>S |
Flash treesitter |
r (operator pending) |
Flash remote |
R (operator/visual) |
Flash treesitter search |
<C-s> (command mode) |
Flash toggle search |
| Shortcut | Action |
|---|---|
- |
Oil parent directory |
<Leader>mp |
Markdown preview |
These work in both Vim and Neovim.
| Shortcut | Action |
|---|---|
<Leader>y |
Yank to system clipboard (normal/visual) |
<Leader>n |
New split |
<Leader>a |
Alternate buffer |
<Leader>r (visual) |
Search selection for quick replace |
<Leader>k |
Clear last search highlight |
<M-.>, <M-,>, <M-'>, <M-;> |
Resize windows |
z0 |
Set foldlevel to 99 (show all folds) |
z1 - z6 |
Set foldlevel 1-6 (useful for Markdown heading hierarchy) |
<Leader><Leader>t |
Open bottom terminal helper |
<Leader><Esc> |
Exit terminal-mode |
| Shortcut | Action |
|---|---|
<CR> |
Accepts the LSP (Popup Menu) selection. |
<C-n> / <C-p> |
Navigates up and down the LSP menu. |