Neovim is my terminal text editor. it’s a fork of Vim with better plugin support, built-in LSP and Lua configuration.

Taking CS2030 in my second semester of uni irreversibly changed my life and made me infinitely more annoying because it: 1. introduced me to java and 2. introduced me to Vim. I love vim motions and try to use them wherever I can (the ability to do this within Obsidian and not Notion was very appealing). Honestly top-2 favorite mods I’ve taken at NUS. Neovim gives me a really comfortable environment to code in within my terminal, and I’m a really big fan of the plugins. This was my first order of business when I was setting up my dev environment on my work laptop and it’s been awesome so far.

Config Structure

~/.config/nvim/
├── init.lua             # Entry point, sets leader key
├── lua/kienanana/
│   ├── lazy_init.lua          # Lazy.nvim setup
│   ├── remap.lua              # Keybindings
│   ├── set.lua                # Editor options
│   └── lazy/                  # Plugin configs
│       ├── kanagawa.lua       # Colorscheme (active)
│       ├── tokyonight.lua     # Colorscheme (available)
│       ├── neotree.lua        # File explorer
│       ├── telescope.lua      # Fuzzy finder
│       ├── lsp.lua            # LSP config
│       ├── cmp.lua            # Completion
│       ├── mason.lua          # LSP installer
│       ├── lualine.lua        # Statusline
│       ├── snacks.lua         # Utilities
│       ├── tmux-navigator.lua # tmux integration
│       └── treesitter.lua     # Disabled

Plugins

Core

  • lazy.nvim - Plugin manager
  • kanagawa - Colorscheme (transparent, custom green cursor line)
  • lualine - Statusline (tokyonight theme)
  • neo-tree - File explorer (width: 32, follows current file)
  • telescope - Fuzzy finder (files, grep, buffers, help)
  • vim-tmux-navigator - Seamless vim/tmux navigation

LSP & Completion

  • nvim-lspconfig - LSP client (lua_ls, pyright, tsserver)
  • nvim-cmp - Completion engine
  • mason + mason-lspconfig - LSP server installer

Utilities

  • snacks.nvim - Dashboard, scratch buffers, lazygit, file picker, explorer
  • LuaSnip - Snippet engine

Disabled

  • treesitter - Currently disabled

Essential Keybindings

Leader key: space

File Management

  • <leader>e - Toggle Neotree
  • <C-p> - Snacks file picker
  • <C-n> - Snacks explorer
  • <leader><leader> - Recent files

Telescope

  • <leader>ff - Find files
  • <leader>fg - Live grep
  • <leader>fb - Buffers
  • <leader>fh - Help tags

tmux Navigation

  • <C-h> - Left
  • <C-j> - Down
  • <C-k> - Up
  • <C-l> - Right

LSP

  • K - Hover docs
  • <leader>gd - Go to definition
  • <leader>gr - References
  • <leader>ca - Code actions
  • <leader>rn - Rename
  • <leader>gf - Format

Completion

  • <C-Space> - Trigger
  • <CR> - Confirm
  • <Tab> - Next
  • <S-Tab> - Previous

Git (Snacks)

  • <leader>lg - Lazygit
  • <leader>gl - Lazygit log

Scratch

  • <leader>sf - Toggle scratch
  • <leader>S - Select scratch