---
title: Neovim Plugins and Keybindings
url: https://doc.liz6.com/en/tools/nvim/02-plugins-keymaps
locale: en
area: tools
tags:
- tools
- nvim
date: null
modified: 2026-07-16
description: A few plugins I added on top of LazyVim that truly changed my workflow.
---

# 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](../cli-toolbox.md), it offers two levels of git view.

Here are the remaining plugins, categorized by use case:

- **flutter-tools** integrates Flutter development into the editor: `:FlutterRun` starts the device, saving triggers hot reload, and `:FlutterDevices` switches simulators. There's no need to open a separate terminal to run the `flutter` CLI; 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, `cmdline` completion, 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](../zellij.md), 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.
