This is my current Neovim configuration. This is not a generic or customization oriented config: my current focus is on machine learning research on Python and Quarto, using tools like virtual environments, and web development (Go, Next.js, TypeScript, TailwindCSS, etc.). There is built-in support for many other languages, but you need to investigate yourself. Nonetheless, hopefully it is easy to tweak for other purposes.
I'm using a lot of plugins (+100!). This can be scary as it generally correlates to poor performance, and performance is a top reason why a lot of people use n/vim. However, this config runs at a fair speed thanks, mostly, to lazy loading: most plugins are only loaded when used via their commands or on specific events. I am dropping a personally acceptable amount of performance for great functionality gains, which in my view and for my use cases is worth it.
Startup times vary depending on the file type. In particular, markdown and quarto files take some 100 ms more to load due to fancy rendering. Performance when editing and navigating files is generally very good, with minimal input lag differences compared to vanilla Neovim.
You can install this config by cloning the repo and performing make install from root. The installer has been tested on MacOS, other systems may not work. In any case, if you encounter issues running it, you can always simply run each line of the script scripts/install.sh in your shell; there, you can see all steps and tools necessary for this config to work well, and you can install them in a way that works for your system. It is also highly recommended to install a nerdfont of your choice.
w, e, and b move through subwords, including parts of camelCase and snake_case names.
In a CodeDiff tab, <leader>h opens Outline for the selected file without leaving the diff. Revision buffers use Markdown headings or available Tree-sitter symbols because CodeDiff keeps LSPs detached from them. Select a file in the explorer first.
CodeDiff's hunk actions use <leader>gxs (stage), <leader>gxu (unstage), and <leader>gxr (discard), leaving <leader>h immediately available for Outline.
CodeDiff's side explorer opens in tree view; press i there to switch between tree and list views.
CodeDiff wraps lines in its inline view. Side-by-side and conflict views keep lines unwrapped to preserve pane alignment.
For Python files, Outline skips pytest_language_server so ty can provide document symbols.
Split sizes stay fixed when switching windows; use Alt+arrow keys to resize them manually.
In Herdr or tmux, automatic sessions are separated by tab or window. Files over 2 MB open in a new pane with the minimal Neovim config by default.
Canola and canola-collection are installed from Forgejo, with Canola on the canola branch.
On macOS, fff.nvim builds its native library from source with symbol stripping disabled to avoid a Rust Mach-O alignment bug. This requires Rust/Cargo and the Xcode Command Line Tools. To rebuild it, run :Lazy build fff.nvim, then restart Neovim. Other platforms use the plugin's binary downloader with a source-build fallback.
To connect to a remote file-system via SSH:
- Use
ssh-addto add the private key you use to identify with the server. - Start Neovim as
nvim canola-ssh://<user>@<ip>:<port>/
This config is just the work of the Neovim team and contributors, as well as the developers who contribute to the Neovim plugin ecosystem, glued together in a certain way. Much appreciation for this community!
Initially when starting to write this config, I took as reference boilerplate code from many open source configs out there in order to develop different parts and features. These include (but are not limited to):