Personal Neovim config in Lua. Requires Neovim 0.12+.
mkdir -p ~/bin
curl -Lo ~/bin/nvim.appimage https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.appimage
chmod +x ~/bin/nvim.appimage
ln -sf ~/bin/nvim.appimage ~/bin/nvim
# Add ~/bin to PATH (add to ~/.bashrc or ~/.zshrc)
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrcgit clone https://github.com/Karthik-PM/nvim-config ~/.config/nvim# Image rendering (for molten-nvim and image.nvim)
sudo apt install ueberzugpp imagemagick
# Python packages (for Jupyter notebook support)
pip install pynvim jupyter_client jupytextnvim
Lazy.nvim bootstraps itself on first launch. Then run:
:Lazy sync
:UpdateRemotePlugins
Mason will install LSP servers automatically (lua_ls, ts_ls, rust_analyzer).
| Plugin | Purpose |
|---|---|
| lazy.nvim | Plugin manager |
| mason.nvim | LSP/tool installer |
| mason-lspconfig | Auto-enable LSP servers |
| nvim-cmp | Completion engine |
| LuaSnip | Snippets |
| nvim-treesitter | Syntax highlighting |
| telescope.nvim | Fuzzy finder |
| nvim-tree | File explorer |
| image.nvim | Inline image rendering |
| molten-nvim | Jupyter kernel integration |
| jupytext.nvim | .ipynb ↔ .py conversion |
| NotebookNavigator.nvim | Cell navigation and execution |
| avante.nvim | AI assistant (Cursor-like) |
| claudecode.nvim | Claude Code terminal integration |
| snacks.nvim | Terminal UI (claudecode.nvim dependency) |
| toggleterm.nvim | Terminal integration |
| lualine.nvim | Status line |
| vim-fugitive | Git integration |
| undotree | Undo history visualizer |
| vimtex | LaTeX support |
Leader key: Space
| Key | Action |
|---|---|
<leader>pv |
Open file explorer (netrw) |
<leader>f |
Format file |
<leader>s |
Search & replace word under cursor |
<leader>x |
Make file executable |
<leader>y / <leader>Y |
Copy to system clipboard |
<leader>p |
Paste without overwriting register |
<C-d> / <C-u> |
Scroll half-page (cursor centered) |
<leader>dt |
Open Terminator in file's directory |
<leader>dr |
Open Terminator |
| Key | Action |
|---|---|
gd |
Go to definition |
K |
Hover documentation |
<leader>vrn |
Rename symbol |
<leader>vca |
Code action |
<leader>vrr |
References |
<leader>vd |
Open diagnostics float |
[d / ]d |
Next / prev diagnostic |
<leader>vws |
Workspace symbol search |
<C-h> (insert) |
Signature help |
| Key | Action |
|---|---|
<leader>ff |
Find files |
<leader>fg |
Live grep |
<leader>fb |
Buffers |
<leader>fh |
Help tags |
<C-p> |
Git files |
<leader>fi |
Find images (media files) |
| Key | Action |
|---|---|
<leader>mi |
Init Jupyter kernel (:MoltenInit) |
<leader>rc |
Run current cell |
<leader>rn |
Run cell and move to next |
<leader>ra |
Run all cells |
<leader>ml |
Run current line |
<leader>mr |
Re-run cell / run visual selection |
<leader>ms |
Show cell output |
<leader>mh |
Hide cell output |
<leader>md |
Delete cell output |
]h / [h |
Next / prev cell |
Requires the Claude Code CLI to be installed (npm install -g @anthropic-ai/claude-code).
| Key | Action |
|---|---|
<leader>ac |
Toggle Claude terminal |
<leader>af |
Focus Claude terminal |
<leader>ar |
Resume previous session |
<leader>aC |
Continue last conversation |
<leader>ab |
Add current buffer as context |
<leader>as (visual) |
Send selected text to Claude |
<leader>as (in NvimTree) |
Add file from tree as context |
<leader>aa |
Accept diff |
<leader>ad |
Deny diff |
| Key | Action |
|---|---|
<C-n> |
Next item |
<C-p> |
Prev item |
<C-y> |
Confirm selection |
<C-Space> |
Trigger completion |
Open a .ipynb file — jupytext auto-converts it to Python with # %% cell markers. Saving writes back to .ipynb.
For a plain Python file, mark cells with # %%:
# %%
import pandas as pd
df = pd.read_csv("data.csv")
# %%
df.head()Then:
<leader>mi— pick a kernel (e.g.python3)<leader>rc— run the cell under cursor- Output renders inline below the cell
To update Neovim in the future:
curl -Lo ~/bin/nvim.appimage https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.appimage
chmod +x ~/bin/nvim.appimage