refactor(nvim): modernize plugin stack
Removed dead weight: - Drop nightfox, rose-pine, kanagawa, everforest colorschemes - Remove fzf/fzf.vim (redundant with telescope) - Remove vim-fugitive and its keymaps (lazygit covers this) - Remove Comment.nvim (built into nvim 0.10+) Replaced: - nvim-cmp → blink.cmp (Rust-powered, faster, ghost text) - none-ls/null-ls → conform.nvim (async, maintained) - cmp-nvim-lsp capabilities → blink.cmp.get_lsp_capabilities() - Copilot suggestions now routed through blink-copilot Added: - lazydev.nvim for proper Lua LSP in nvim config - flash.nvim (s/S jump anywhere on screen) - which-key.nvim (leader key popup with groups) - snacks.nvim (notifier + word highlights) - nvim-treesitter-textobjects (af/if, ac/ic, ]f/[f) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,7 +5,7 @@ local opt = { noremap = true }
|
||||
local opts = { noremap = true, silent = true }
|
||||
local term_opts = { silent = true }
|
||||
|
||||
local keymap = vim.api.nvim_set_keymap
|
||||
local keymap = vim.keymap.set
|
||||
|
||||
-- {{{ Leader Key (moved to init.lua)
|
||||
-- vim.g.mapleader = " " -- set <Space> as leader key
|
||||
@@ -13,15 +13,15 @@ local keymap = vim.api.nvim_set_keymap
|
||||
-- }}}
|
||||
|
||||
-- {{{ Basic Mappings
|
||||
keymap("n", ";", ":", opt) -- remap ; to :
|
||||
keymap("n", ":", ";", opt) -- remap : to ;
|
||||
keymap("n", ";", ":", opt) -- remap ; to :
|
||||
keymap("n", ":", ";", opt) -- remap : to ;
|
||||
|
||||
keymap("n", "<leader>w", ":w<cr>", opts) -- save
|
||||
keymap("n", "<leader>q", ":q<cr>", opts) -- quit
|
||||
keymap("n", "<leader>wq", ":wq<cr>", opts) -- save and quit
|
||||
keymap("n", "<leader>W", ":w!<cr>", opts) -- force save
|
||||
keymap("n", "<leader>Q", ":q!<cr>", opts) -- force quit
|
||||
keymap("n", "<leader>WQ", ":wq!<cr>", opts) -- force save and quit
|
||||
keymap("n", "<leader>w", ":w<cr>", opts) -- save current buffer
|
||||
keymap("n", "<leader>q", ":confirm qall<cr>", opts) -- quit Neovim (prompt on unsaved changes)
|
||||
keymap("n", "<leader>wq", ":wall | qa<cr>", opts) -- save all writable buffers and quit
|
||||
keymap("n", "<leader>W", ":w!<cr>", opts) -- force save current buffer
|
||||
keymap("n", "<leader>Q", ":qall!<cr>", opts) -- force quit Neovim
|
||||
keymap("n", "<leader>WQ", ":wall! | qa!<cr>", opts) -- force save all and quit
|
||||
-- }}}
|
||||
|
||||
-- {{{ Navigation
|
||||
@@ -29,125 +29,122 @@ keymap("n", "j", "gj", opts) -- move visually down wrapped lines
|
||||
keymap("n", "k", "gk", opts) -- move visually up wrapped lines
|
||||
|
||||
-- Keep arrow key navigation (non-standard but you requested it)
|
||||
keymap("n", "<Left>", "<C-w>h", opts) -- move to left window
|
||||
keymap("n", "<Right>", "<C-w>l", opts) -- move to right window
|
||||
keymap("n", "<Up>", "<C-w>k", opts) -- move to upper window
|
||||
keymap("n", "<Down>", "<C-w>j", opts) -- move to lower window
|
||||
keymap("n", "<Left>", "<C-w>h", opts) -- move to left window
|
||||
keymap("n", "<Right>", "<C-w>l", opts) -- move to right window
|
||||
keymap("n", "<Up>", "<C-w>k", opts) -- move to upper window
|
||||
keymap("n", "<Down>", "<C-w>j", opts) -- move to lower window
|
||||
|
||||
keymap("n", "<s-l>", ":bnext<cr>", opts) -- next buffer
|
||||
keymap("n", "<s-l>", ":bnext<cr>", opts) -- next buffer
|
||||
keymap("n", "<s-h>", ":bprevious<cr>", opts) -- previous buffer
|
||||
-- }}}
|
||||
|
||||
-- {{{ Window Splitting
|
||||
keymap("n", "<leader>sv", ":vsplit<cr>", opts) -- split vertically
|
||||
keymap("n", "<leader>sh", ":split<cr>", opts) -- split horizontally
|
||||
keymap("n", "<leader>sc", ":close<cr>", opts) -- close current split
|
||||
keymap("n", "<leader>so", ":only<cr>", opts) -- close all other splits
|
||||
keymap("n", "<leader>sh", ":split<cr>", opts) -- split horizontally
|
||||
keymap("n", "<leader>sc", ":close<cr>", opts) -- close current split
|
||||
keymap("n", "<leader>so", ":only<cr>", opts) -- close all other splits
|
||||
-- }}}
|
||||
|
||||
-- {{{ Window Resizing
|
||||
keymap("n", "<leader>+", ":resize +5<cr>", opts) -- increase window height
|
||||
keymap("n", "<leader>-", ":resize -5<cr>", opts) -- decrease window height
|
||||
keymap("n", "<leader>+", ":resize +5<cr>", opts) -- increase window height
|
||||
keymap("n", "<leader>-", ":resize -5<cr>", opts) -- decrease window height
|
||||
keymap("n", "<leader><", ":vertical resize -5<cr>", opts) -- decrease window width
|
||||
keymap("n", "<leader>>", ":vertical resize +5<cr>", opts) -- increase window width
|
||||
keymap("n", "<leader>=", "<C-w>=", opts) -- equalize window sizes
|
||||
keymap("n", "<leader>=", "<C-w>=", opts) -- equalize window sizes
|
||||
-- }}}
|
||||
|
||||
-- {{{ Visual Mode / Text, Clipboard
|
||||
keymap("v", ">", ">gv", opts) -- indent right, stay in visual mode
|
||||
keymap("v", "<", "<gv", opts) -- indent left, stay in visual mode
|
||||
keymap("v", ">", ">gv", opts) -- indent right, stay in visual mode
|
||||
keymap("v", "<", "<gv", opts) -- indent left, stay in visual mode
|
||||
|
||||
keymap("x", "<s-j>", ":move '>+1<CR>gv-gv", opts) -- move selected block down
|
||||
keymap("x", "<s-k>", ":move '<-2<CR>gv-gv", opts) -- move selected block up
|
||||
keymap("x", "<s-j>", ":move '>+1<CR>gv-gv", opts) -- move selected block down
|
||||
keymap("x", "<s-k>", ":move '<-2<CR>gv-gv", opts) -- move selected block up
|
||||
|
||||
keymap("n", "Q", "gq", opts) -- format paragraph
|
||||
keymap("x", "Q", "gq", opts) -- format selection
|
||||
keymap("n", "Q", "gq", opts) -- format paragraph
|
||||
keymap("x", "Q", "gq", opts) -- format selection
|
||||
|
||||
keymap("x", "Y", '"+y', opt) -- yank to system clipboard
|
||||
keymap("x", "Y", '"+y', opt) -- yank to system clipboard
|
||||
|
||||
keymap("n", "<space><space>", [[:%s/\<<c-r>=expand("<cword>")<cr>\>/]], opt) -- replace word under cursor
|
||||
-- }}}
|
||||
|
||||
-- {{{ Editing / Behavior
|
||||
keymap("n", "q", "<nop>", opts) -- disable q (record macro)
|
||||
keymap("n", "qq", "q", opts) -- if you really want to record macro use qq
|
||||
keymap("n", "q", "<nop>", opts) -- disable q (record macro)
|
||||
keymap("n", "qq", "q", opts) -- if you really want to record macro use qq
|
||||
|
||||
keymap("n", "c", '"_c', opts) -- change without yanking to default register
|
||||
keymap("n", "C", '"_C', opts) -- change line without yanking to default register
|
||||
keymap("n", "c", '"_c', opts) -- change without yanking to default register
|
||||
keymap("n", "C", '"_C', opts) -- change line without yanking to default register
|
||||
|
||||
vim.keymap.set("n", "<leader>n", function() -- toggle line numbers
|
||||
if vim.wo.number and vim.wo.relativenumber then
|
||||
vim.wo.number = false
|
||||
vim.wo.relativenumber = false
|
||||
elseif vim.wo.number then
|
||||
vim.wo.relativenumber = true
|
||||
else
|
||||
vim.wo.number = true
|
||||
end
|
||||
if vim.wo.number and vim.wo.relativenumber then
|
||||
vim.wo.number = false
|
||||
vim.wo.relativenumber = false
|
||||
elseif vim.wo.number then
|
||||
vim.wo.relativenumber = true
|
||||
else
|
||||
vim.wo.number = true
|
||||
end
|
||||
end, { desc = "Toggle line number modes" })
|
||||
|
||||
keymap("n", "<leader>c", ":set cursorcolumn! cursorline! <cr>", opts) -- toggle cursor column and line
|
||||
|
||||
keymap("n", "<esc>", ":nohlsearch<cr><esc>", opts) -- clear search highlight
|
||||
keymap("n", "<esc>", ":nohlsearch<cr><esc>", opts) -- clear search highlight
|
||||
-- }}}
|
||||
|
||||
-- {{{ Spellcheck
|
||||
keymap("n", "<leader>se", ":setlocal spell! spelllang=en_us<cr>", opts) -- toggle English spell check
|
||||
keymap("n", "<leader>sd", ":setlocal spell! spelllang=de_at<cr>", opts) -- toggle Austrian German spell check
|
||||
keymap("n", "<leader>ss", ":setlocal spell! spelllang=es<cr>", opts) -- toggle Spanish spell check
|
||||
keymap("n", "<leader>ss", ":setlocal spell! spelllang=es<cr>", opts) -- toggle Spanish spell check
|
||||
-- }}}
|
||||
|
||||
-- {{{ Timestamp / Date
|
||||
keymap("n", "<leader>dt", [[i<c-r>=strftime("%d.%m.%Y")<cr><space>]], opts) -- insert current date
|
||||
keymap("n", "<leader>tt", [[i<c-r>=strftime("%H:%M")<cr><space>]], opts) -- insert current time
|
||||
keymap("n", "<leader>tt", [[i<c-r>=strftime("%H:%M")<cr><space>]], opts) -- insert current time
|
||||
-- }}}
|
||||
|
||||
-- {{{ External / System
|
||||
keymap("n", "<leader>x", [[:!open %<cr><cr>]], opts) -- open current file with system default app
|
||||
|
||||
keymap("c", "w!!", [[w !sudo tee %]], opt) -- save file with sudo
|
||||
keymap("c", "w!!", [[w !sudo tee %]], opt) -- save file with sudo
|
||||
-- }}}
|
||||
|
||||
-- {{{ Diff / Git
|
||||
keymap("n", "<leader>gd", ":Gvdiffsplit<cr>", opts) -- git diff split (requires fugitive)
|
||||
keymap("n", "<leader>gs", ":Git<cr>", opts) -- open git status tree (requires fugitive)
|
||||
keymap("n", "<leader>gr", ":terminal git log --graph --oneline --decorate --all<CR>i", opts) -- show git log graph in terminal
|
||||
|
||||
-- GitSigns toggles
|
||||
vim.keymap.set('n', '<leader>gt', function() require('gitsigns').toggle_signs() end, { desc = 'Toggle git signs' })
|
||||
vim.keymap.set('n', '<leader>gb', function() require('gitsigns').toggle_current_line_blame() end, { desc = 'Toggle git blame' })
|
||||
vim.keymap.set('n', '<leader>gb', function() require('gitsigns').toggle_current_line_blame() end,
|
||||
{ desc = 'Toggle git blame' })
|
||||
vim.keymap.set('n', '<leader>gx', function() require('gitsigns').toggle_deleted() end, { desc = 'Toggle git deleted' })
|
||||
vim.keymap.set('n', '<leader>gn', function() require('gitsigns').toggle_numhl() end, { desc = 'Toggle git number highlights' })
|
||||
vim.keymap.set('n', '<leader>gn', function() require('gitsigns').toggle_numhl() end,
|
||||
{ desc = 'Toggle git number highlights' })
|
||||
vim.keymap.set('n', '<leader>gc', function() require('gitsigns').toggle_linehl() end, { desc = 'Toggle git line colors' })
|
||||
|
||||
-- LSP diagnostic toggle
|
||||
vim.keymap.set('n', '<leader>ld', function()
|
||||
local config = vim.diagnostic.config()
|
||||
vim.diagnostic.config({
|
||||
virtual_text = not config.virtual_text,
|
||||
signs = not config.signs,
|
||||
underline = not config.underline,
|
||||
})
|
||||
local config = vim.diagnostic.config()
|
||||
vim.diagnostic.config({
|
||||
virtual_text = not config.virtual_text,
|
||||
signs = not config.signs,
|
||||
underline = not config.underline,
|
||||
})
|
||||
end, { desc = 'Toggle LSP diagnostics' })
|
||||
|
||||
-- Toggle fold column
|
||||
vim.keymap.set("n", "<leader>un", function()
|
||||
vim.wo.foldcolumn = vim.wo.foldcolumn == "0" and "1" or "0"
|
||||
vim.wo.foldcolumn = vim.wo.foldcolumn == "0" and "1" or "0"
|
||||
end, { desc = "Toggle fold column" })
|
||||
|
||||
keymap("n", "<leader>si", ":source $MYVIMRC<CR>", opts) -- source init.lua ($MYVIMRC is auto path to your init.lua)
|
||||
-- }}}
|
||||
|
||||
-- {{{ Plugins
|
||||
-- Yazi (keeping this here since it's a simple command keymap)
|
||||
keymap("n", "<leader>y", ":Yazi<cr>", opt) -- open Yazi file manager
|
||||
|
||||
-- mkdx checkbox toggle (disable default space key, use leader+t instead)
|
||||
vim.g["mkdx#settings"] = {
|
||||
checkbox = {
|
||||
toggles = {' ', 'x', '-'},
|
||||
toggle_key = ''
|
||||
}
|
||||
checkbox = {
|
||||
toggles = { ' ', 'x', '-' },
|
||||
toggle_key = ''
|
||||
}
|
||||
}
|
||||
keymap("n", "<leader>t", "<Plug>(mkdx-checkbox-next-n)", opt) -- toggle markdown checkbox
|
||||
-- }}}
|
||||
|
||||
Reference in New Issue
Block a user