# Neovim IDE Configuration A feature-rich Neovim setup optimized for Python, JSON, and CSV development. ## Features ### LSP (Language Server Protocol) - **Python** (pyright) - Autocomplete, type checking, goto definition, hover docs, rename - **JSON** (jsonls) - Validation, formatting, schema support - **YAML** (yamlls) - YAML file support - **HTML/CSS** (html, cssls) - Web development - **Bash** (bashls) - Shell script support - **Lua** (lua_ls) - Neovim config development ### Completion - **nvim-cmp** - Smart autocomplete with LSP integration - **LuaSnip** - Snippet support ### Syntax Highlighting & Parsing - **Treesitter** - Advanced syntax highlighting for Python, JSON, CSV, YAML, Markdown, and more - **CSV Support** - Syntax highlighting for CSV files ### File Management - **Neo-tree** - File explorer with git integration - **Telescope** - Fuzzy finder for files, text, and more ### Git Integration - **Gitsigns** - Git status in the gutter (added, modified, deleted lines) ### Debugging - **nvim-dap** - Debug Python code with breakpoints, step-through debugging - **dap-ui** - Visual debugging interface ### UI Enhancements - **Catppuccin** - Beautiful dark color scheme (Mocha flavor) - **Lualine** - Custom statusline showing mode, git branch, file, diagnostics ### Formatting - **conform.nvim** - Auto-format on save (ruff for Python, jq for JSON, etc.) ### Utilities - **nvim-comment** - Easy commenting (toggle comments with `gcc`) --- ## Installation 1. **Install Neovim** (version 0.10+ recommended) 2. **Link this config:** ```bash ln -s ~/.dotfiles/nvim ~/.config/nvim ``` 3. **Open Neovim** - plugins will install automatically 4. **Install debugpy for Python debugging:** ```bash pip install debugpy ``` 5. **Install formatters (optional):** ```bash pip install ruff black ``` --- ## Keymaps ### General | Keymap | Action | |--------|--------| | `w` | Save file | | `q` | Quit Neovim | | `` | Exit insert mode | | `u` | Undo | | `` | Redo | | `dd` | Delete line | | `yy` | Yank (copy) line | | `p` | Paste | ### Navigation | Keymap | Action | |--------|--------| | `h/j/k/l` | Move left/down/up/right | | `w/b` | Jump forward/back by word | | `0/$` | Jump to start/end of line | | `gg` | Jump to beginning of file | | `G` | Jump to end of file | | `/` | Jump down/up half page | | `/` | Jump forward/back page | ### File Explorer (Neo-tree) | Keymap | Action | |--------|--------| | `` | Toggle file explorer | | `Enter` | Open file/folder | | `h` | Close folder | | `l` | Open folder | | `a` | Add file | | `d` | Delete file | | `r` | Rename file | | `y/x` | Copy/Cut file | | `p` | Paste | ### Fuzzy Finder (Telescope) | Keymap | Action | |--------|--------| | `` | Find files | | `fg` | Grep (search text in files) | ### LSP (Language Server) | Keymap | Action | |--------|--------| | `gd` | Go to definition | | `gD` | Go to declaration | | `gi` | Go to implementation | | `gr` | Show references | | `K` | Show hover documentation | | `rn` | Rename symbol | | `ca` | Code actions / quick fixes | | `e` | Show diagnostic error | | `[d / ]d` | Previous/next diagnostic | ### Formatting | Keymap | Action | |--------|--------| | `f` | Format file | ### Git (Gitsigns) | Keymap | Action | |--------|--------| | `]c / [c` | Next/previous hunk (change) | | `hs` | Stage current hunk | | `hr` | Reset current hunk | | `hp` | Preview hunk changes | | `hb` | Blame line | ### Debugging (DAP) | Keymap | Action | |--------|--------| | `` | Continue / Start debugger | | `` | Toggle breakpoint | | `` | Step over | | `` | Step into | | `` | Step out | | `du` | Toggle debugger UI | ### Commenting | Keymap | Action | |--------|--------| | `gcc` | Toggle line comment | | `gc` (visual) | Toggle selection comment | ### Folding | Keymap | Action | |--------|--------| | `zc` | Close (fold) current block | | `zo` | Open (unfold) current block | | `za` | Toggle fold at cursor | | `zM` | Close all folds | | `zR` | Open all folds | | `zC` | Close folds recursively | | `zO` | Open folds recursively | | `zE` | Eliminate all folds | | `zv` | Open folds enough to see cursor | --- ## File Type Specifics ### Python (.py) - **LSP**: Full autocompletion, type checking, goto definition - **Formatting**: ruff format (fast), black (backup) - **Debugging**: Set breakpoints with `F9`, run with `F5` - **Indentation**: 4 spaces (Python convention) ### JSON (.json) - **LSP**: Validation, schema support - **Formatting**: jq - **Indentation**: 2 spaces - **Folding**: JSON objects/arrays are foldable (`za` to toggle, `zM` to close all) ### CSV (.csv) - **Treesitter**: Syntax highlighting - **No wrap**: Full row visibility - **Navigation**: Standard motions (`j/k`, `/`, etc.) - **Tip**: Use `set nowrap` for viewing wide CSV files without line wrapping ### YAML (.yaml/.yml) - **LSP**: Validation, schema support - **Folding**: Nested structures are foldable ### Python (.py) - **Folding**: Functions, classes, and code blocks are foldable - **Tip**: Use `za` to toggle a fold at cursor, `zM` to close all folds --- ## Troubleshooting ### LSP not working 1. Ensure the language server is installed 2. Run `:LspInfo` to check status 3. Try `:LspRestart` ### Debugging not working 1. Install debugpy: `pip install debugpy` 2. Place breakpoint with `F9` 3. Start with `F5` ### Colors wrong The config uses Catppuccin Mocha theme. If you see color issues, run: ```vim :colorscheme catppuccin ``` --- ## Adding New Plugins Plugins are defined in `lua/plugins/`. Each `.lua` file is a plugin spec that returns a table. Example (`lua/plugins/myplugin.lua`): ```lua return { "username/repo-name", config = function() require("myplugin").setup() end, } ``` --- ## Credits - [lazy.nvim](https://github.com/folke/lazy.nvim) - Plugin manager - [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) - LSP configuration - [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) - Completion - [Telescope](https://github.com/nvim-telescope/telescope.nvim) - Fuzzy finder - [Neo-tree](https://github.com/nvim-neo-tree/neo-tree.nvim) - File explorer - [Catppuccin](https://github.com/catppuccin/nvim) - Colorscheme - [Gitsigns](https://github.com/lewis6991/gitsigns.nvim) - Git integration - [nvim-dap](https://github.com/mfussenegger/nvim-dap) - Debugging