Neovim Plugins and Keybindings
I added about a dozen plugins in lua/plugins/, but most were installed casually. Only three or four truly changed my usage habits. I'll discuss those in detail and briefly mention the rest.
im-select solves a common issue for Chinese users: when switching from Insert mode back to Normal mode, the input method often stays in Chinese, causing j/k to type characters instead of moving the cursor. It automatically switches the input method during mode transitions, ensuring command keys are always in English while in Normal mode. Before installing it, I had to manually switch the input method; after installing it, this step disappeared from my conscious thought process.
cutlass separates "delete" and "cut". By default, d/c/x overwrite the register, often leading to situations where "I clearly yanked a section, deleted something else, and then pasted, only to paste what I just deleted." Cutlass prevents delete operations from affecting the register, so pasting always retrieves your last actual yank. Combined with yanky for history management, this is the only default Vim behavior I insist on changing.
roslyn.nvim provides the Roslyn LSP (installed via Mason) for .NET. For larger C# solutions, its autocompletion and navigation are significantly more stable than omnisharp. If you write C#, it's worth switching to it.
claudecode.nvim sends selected text or the entire buffer to Claude for editing, completing the AI workflow within the editor without needing to switch windows back and forth.
There are two more that, although built into LazyVim, are used daily and deserve mention:
flash turns "jumping to a location on screen" from counting line numbers into typing. After pressing s, type the first one or two letters of the target word; matching locations will display jump labels, and pressing the corresponding label letter takes you directly there. S is the Treesitter version, which selects entire expressions or function bodies based on syntax structure. In long files, it largely replaces /search + n and repeated hjkl movements.
gitsigns is more than just the add/delete color bars next to line numbers. ]h/[h jumps between hunks, <leader>ghs/ghr stages/reverts hunks one by one, and <leader>ghp previews changes inline—allowing you to cleanly select which parts of a file should be included in the next commit without opening lazygit. Combined with delta + lazygit, it offers two levels of git view.
Here are the remaining plugins, categorized by use case:
- flutter-tools integrates Flutter development into the editor:
:FlutterRunstarts the device, saving triggers hot reload, and:FlutterDevicesswitches simulators. There's no need to open a separate terminal to run theflutterCLI; logs and LSP are all within nvim. - noice redesigns the UI for the command line, messages, and notifications. The
:command floats in the center of the screen rather than being squeezed into the bottom line. Search,cmdlinecompletion, and LSP progress all use a unified floating window, making the visual experience much cleaner when combined with nui/notify. - snacks is folke's "kitchen sink" toolset (built into LazyVim). I mainly use its image preview (rendering pngs directly in the terminal) and several small components (dashboard, notifier, bigfile, which automatically disables heavy features when opening very large files to prevent lag).
- smear-cursor adds a trailing afterimage effect to cursor movement. It's purely visual sugar and doesn't affect functionality—but it looks quite smooth when combined with the jump plugins mentioned earlier.
- vim-wakatime tracks coding time per project/language in the background and sends the data to WakaTime, allowing you to see where you spent your time at the end of the month.
I haven't changed LazyVim's default keybindings much—the leader key is space, and pressing it once triggers which-key hints. The only thing I've adjusted to fit my muscle memory is Ctrl+hjkl: in nvim, this switches windows, and at the boundary, it crosses into Zellij, giving the editor and the multiplexer the same set of keys. Other default LSP keys like gd/gr/K/<leader>ca are used as is.