Update nvim config: split plugins, update README
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,18 @@
|
|||||||
# 💤 LazyVim
|
# Personal Neovim Config
|
||||||
|
|
||||||
A starter template for [LazyVim](https://github.com/LazyVim/LazyVim).
|
My personal Neovim configuration built on [LazyVim](https://github.com/LazyVim/LazyVim).
|
||||||
Refer to the [documentation](https://lazyvim.github.io/installation) to get started.
|
|
||||||
|
## Current Setup
|
||||||
|
|
||||||
|
- **Base**: LazyVim with Gruvbox colorscheme
|
||||||
|
- **AI**: Claude Code integration (`claudecode.nvim`)
|
||||||
|
- **UI**: Snacks dashboard (custom STP banner), Which-Key (helix preset)
|
||||||
|
- **Languages**: TypeScript, Vue, Python, Go, SQL, Tailwind, Docker
|
||||||
|
- **Extras**: mini-surround, Prettier formatting, git extras
|
||||||
|
|
||||||
|
## Suggested Plugins to Add
|
||||||
|
|
||||||
|
- **vim-fugitive** or **neogit** - deeper git workflow beyond LazyVim's built-in gitsigns
|
||||||
|
- **nvim-lint** - async linting beyond what LSP provides
|
||||||
|
- **oil.nvim** - file explorer that works like a buffer (edit filesystem like text)
|
||||||
|
- **zen-mode.nvim** - distraction-free writing/coding
|
||||||
|
|||||||
@@ -1,25 +1,21 @@
|
|||||||
{
|
{
|
||||||
"extras": [
|
"extras": [
|
||||||
"lazyvim.plugins.extras.ai.claudecode",
|
"lazyvim.plugins.extras.ai.claudecode",
|
||||||
"lazyvim.plugins.extras.ai.copilot",
|
"lazyvim.plugins.extras.coding.mini-surround",
|
||||||
"lazyvim.plugins.extras.coding.mini-surround",
|
"lazyvim.plugins.extras.formatting.prettier",
|
||||||
"lazyvim.plugins.extras.editor.dial",
|
"lazyvim.plugins.extras.lang.docker",
|
||||||
"lazyvim.plugins.extras.formatting.prettier",
|
"lazyvim.plugins.extras.lang.git",
|
||||||
"lazyvim.plugins.extras.lang.docker",
|
"lazyvim.plugins.extras.lang.go",
|
||||||
"lazyvim.plugins.extras.lang.git",
|
"lazyvim.plugins.extras.lang.python",
|
||||||
"lazyvim.plugins.extras.lang.go",
|
"lazyvim.plugins.extras.lang.sql",
|
||||||
"lazyvim.plugins.extras.lang.python",
|
"lazyvim.plugins.extras.lang.tailwind",
|
||||||
"lazyvim.plugins.extras.lang.sql",
|
"lazyvim.plugins.extras.lang.typescript",
|
||||||
"lazyvim.plugins.extras.lang.tailwind",
|
"lazyvim.plugins.extras.lang.vue"
|
||||||
"lazyvim.plugins.extras.lang.typescript",
|
],
|
||||||
"lazyvim.plugins.extras.lang.vue",
|
"install_version": 8,
|
||||||
"lazyvim.plugins.extras.ui.edgy",
|
"news": {
|
||||||
"lazyvim.plugins.extras.util.dot",
|
"NEWS.md": "11866"
|
||||||
"lazyvim.plugins.extras.util.gitui"
|
},
|
||||||
],
|
"version": 8
|
||||||
"install_version": 8,
|
|
||||||
"news": {
|
|
||||||
"NEWS.md": "11866"
|
|
||||||
},
|
|
||||||
"version": 8
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,7 @@ vim.opt.rtp:prepend(lazypath)
|
|||||||
|
|
||||||
require("lazy").setup({
|
require("lazy").setup({
|
||||||
spec = {
|
spec = {
|
||||||
-- add LazyVim and import its plugins
|
|
||||||
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
||||||
-- import/override with your plugins
|
|
||||||
{ import = "plugins" },
|
{ import = "plugins" },
|
||||||
},
|
},
|
||||||
defaults = {
|
defaults = {
|
||||||
|
|||||||
7
nvim/lua/plugins/autopairs.lua
Normal file
7
nvim/lua/plugins/autopairs.lua
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"windwp/nvim-autopairs",
|
||||||
|
event = "InsertEnter",
|
||||||
|
opts = {},
|
||||||
|
},
|
||||||
|
}
|
||||||
26
nvim/lua/plugins/claudecode.lua
Normal file
26
nvim/lua/plugins/claudecode.lua
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"coder/claudecode.nvim",
|
||||||
|
dependencies = { "folke/snacks.nvim" },
|
||||||
|
config = true,
|
||||||
|
keys = {
|
||||||
|
{ "<leader>a", nil, desc = "AI/Claude Code" },
|
||||||
|
{ "<leader>ac", "<cmd>ClaudeCode<cr>", desc = "Toggle Claude" },
|
||||||
|
{ "<leader>af", "<cmd>ClaudeCodeFocus<cr>", desc = "Focus Claude" },
|
||||||
|
{ "<leader>ar", "<cmd>ClaudeCode --resume<cr>", desc = "Resume Claude" },
|
||||||
|
{ "<leader>aC", "<cmd>ClaudeCode --continue<cr>", desc = "Continue Claude" },
|
||||||
|
{ "<leader>am", "<cmd>ClaudeCodeSelectModel<cr>", desc = "Select Claude model" },
|
||||||
|
{ "<leader>ab", "<cmd>ClaudeCodeAdd %<cr>", desc = "Add current buffer" },
|
||||||
|
{ "<leader>as", "<cmd>ClaudeCodeSend<cr>", mode = "v", desc = "Send to Claude" },
|
||||||
|
{
|
||||||
|
"<leader>as",
|
||||||
|
"<cmd>ClaudeCodeTreeAdd<cr>",
|
||||||
|
desc = "Add file",
|
||||||
|
ft = { "NvimTree", "neo-tree", "oil", "minifiles", "netrw" },
|
||||||
|
},
|
||||||
|
-- Diff management
|
||||||
|
{ "<leader>aa", "<cmd>ClaudeCodeDiffAccept<cr>", desc = "Accept diff" },
|
||||||
|
{ "<leader>ad", "<cmd>ClaudeCodeDiffDeny<cr>", desc = "Deny diff" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
3
nvim/lua/plugins/colorscheme.lua
Normal file
3
nvim/lua/plugins/colorscheme.lua
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
return {
|
||||||
|
{ "ellisonleao/gruvbox.nvim" },
|
||||||
|
}
|
||||||
3
nvim/lua/plugins/dap.lua
Normal file
3
nvim/lua/plugins/dap.lua
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
return {
|
||||||
|
{ import = "lazyvim.plugins.extras.dap.core" },
|
||||||
|
}
|
||||||
16
nvim/lua/plugins/harpoon.lua
Normal file
16
nvim/lua/plugins/harpoon.lua
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"ThePrimeagen/harpoon",
|
||||||
|
branch = "harpoon2",
|
||||||
|
dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
|
opts = {},
|
||||||
|
keys = {
|
||||||
|
{ "<leader>a", function() require("harpoon"):list():add() end, desc = "Harpoon Add File" },
|
||||||
|
{ "<C-e>", function() local harpoon = require("harpoon") harpoon.ui:toggle_quick_menu(harpoon:list()) end, desc = "Harpoon Quick Menu" },
|
||||||
|
{ "<C-1>", function() require("harpoon"):list():select(1) end, desc = "Harpoon File 1" },
|
||||||
|
{ "<C-2>", function() require("harpoon"):list():select(2) end, desc = "Harpoon File 2" },
|
||||||
|
{ "<C-3>", function() require("harpoon"):list():select(3) end, desc = "Harpoon File 3" },
|
||||||
|
{ "<C-4>", function() require("harpoon"):list():select(4) end, desc = "Harpoon File 4" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
11
nvim/lua/plugins/markview.lua
Normal file
11
nvim/lua/plugins/markview.lua
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"OXY2DEV/markview.nvim",
|
||||||
|
ft = "markdown",
|
||||||
|
dependencies = {
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
"nvim-tree/nvim-web-devicons",
|
||||||
|
},
|
||||||
|
opts = {},
|
||||||
|
},
|
||||||
|
}
|
||||||
20
nvim/lua/plugins/neogit.lua
Normal file
20
nvim/lua/plugins/neogit.lua
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"NeogitOrg/neogit",
|
||||||
|
dependencies = {
|
||||||
|
"nvim-lua/plenary.nvim",
|
||||||
|
"sindrets/diffview.nvim",
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{ "<leader>gg", function() require("neogit").open() end, desc = "Neogit" },
|
||||||
|
{ "<leader>gc", function() require("neogit").open({ "commit" }) end, desc = "Neogit Commit" },
|
||||||
|
{ "<leader>gl", function() require("neogit").open({ "log" }) end, desc = "Neogit Log" },
|
||||||
|
{ "<leader>gp", function() require("neogit").open({ "push" }) end, desc = "Neogit Push" },
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
integrations = {
|
||||||
|
diffview = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
return {
|
|
||||||
{ "ellisonleao/gruvbox.nvim" },
|
|
||||||
{
|
|
||||||
"LazyVim/LazyVim",
|
|
||||||
opts = {
|
|
||||||
colorscheme = "gruvbox",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"kawre/leetcode.nvim",
|
|
||||||
dependencies = {
|
|
||||||
"nvim-lua/plenary.nvim",
|
|
||||||
"MunifTanjim/nui.nvim",
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
lang = "rust",
|
|
||||||
|
|
||||||
keys = {
|
|
||||||
toggle = { "q" }, ---@type string|string[]
|
|
||||||
confirm = { "<CR>" }, ---@type string|string[]
|
|
||||||
|
|
||||||
reset_testcases = "r", ---@type string
|
|
||||||
use_testcase = "U", ---@type string
|
|
||||||
focus_testcases = "H", ---@type string
|
|
||||||
focus_result = "L", ---@type string
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- {
|
|
||||||
-- "yetone/avante.nvim",
|
|
||||||
-- build = vim.fn.has("win32") ~= 0 and "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false"
|
|
||||||
-- or "make",
|
|
||||||
-- event = "VeryLazy",
|
|
||||||
-- opts = {
|
|
||||||
-- provider = "copilot",
|
|
||||||
-- selection = {
|
|
||||||
-- hint_display = "none",
|
|
||||||
-- },
|
|
||||||
-- behaviour = {
|
|
||||||
-- auto_set_keymaps = false,
|
|
||||||
-- },
|
|
||||||
-- },
|
|
||||||
-- cmd = {
|
|
||||||
-- "AvanteAsk",
|
|
||||||
-- "AvanteBuild",
|
|
||||||
-- "AvanteChat",
|
|
||||||
-- "AvanteClear",
|
|
||||||
-- "AvanteEdit",
|
|
||||||
-- "AvanteFocus",
|
|
||||||
-- "AvanteHistory",
|
|
||||||
-- "AvanteModels",
|
|
||||||
-- "AvanteRefresh",
|
|
||||||
-- "AvanteShowRepoMap",
|
|
||||||
-- "AvanteStop",
|
|
||||||
-- "AvanteSwitchProvider",
|
|
||||||
-- "AvanteToggle",
|
|
||||||
-- },
|
|
||||||
-- keys = {
|
|
||||||
-- { "<leader>aa", "<cmd>AvanteAsk<CR>", desc = "Ask Avante" },
|
|
||||||
-- { "<leader>ac", "<cmd>AvanteChat<CR>", desc = "Chat with Avante" },
|
|
||||||
-- { "<leader>ae", "<cmd>AvanteEdit<CR>", desc = "Edit Avante" },
|
|
||||||
-- { "<leader>af", "<cmd>AvanteFocus<CR>", desc = "Focus Avante" },
|
|
||||||
-- { "<leader>ah", "<cmd>AvanteHistory<CR>", desc = "Avante History" },
|
|
||||||
-- { "<leader>am", "<cmd>AvanteModels<CR>", desc = "Select Avante Model" },
|
|
||||||
-- { "<leader>an", "<cmd>AvanteChatNew<CR>", desc = "New Avante Chat" },
|
|
||||||
-- { "<leader>ap", "<cmd>AvanteSwitchProvider<CR>", desc = "Switch Avante Provider" },
|
|
||||||
-- { "<leader>ar", "<cmd>AvanteRefresh<CR>", desc = "Refresh Avante" },
|
|
||||||
-- { "<leader>as", "<cmd>AvanteStop<CR>", desc = "Stop Avante" },
|
|
||||||
-- { "<leader>at", "<cmd>AvanteToggle<CR>", desc = "Toggle Avante" },
|
|
||||||
-- },
|
|
||||||
-- },
|
|
||||||
}
|
|
||||||
35
nvim/lua/plugins/snacks.lua
Normal file
35
nvim/lua/plugins/snacks.lua
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"snacks.nvim",
|
||||||
|
opts = {
|
||||||
|
dashboard = {
|
||||||
|
preset = {
|
||||||
|
pick = function(cmd, opts)
|
||||||
|
return LazyVim.pick(cmd, opts)()
|
||||||
|
end,
|
||||||
|
header = [[
|
||||||
|
███████╗████████╗██████╗
|
||||||
|
██╔════╝╚══██╔══╝██╔══██╗
|
||||||
|
███████╗ ██║ ██████╔╝
|
||||||
|
╚════██║ ██║ ██╔═══╝
|
||||||
|
███████║ ██║ ██║
|
||||||
|
╚══════╝ ╚═╝ ╚═╝
|
||||||
|
]],
|
||||||
|
-- stylua: ignore
|
||||||
|
---@type snacks.dashboard.Item[]
|
||||||
|
keys = {
|
||||||
|
{ icon = " ", key = "f", desc = "Find File", action = ":lua Snacks.dashboard.pick('files')" },
|
||||||
|
{ icon = " ", key = "n", desc = "New File", action = ":ene | startinsert" },
|
||||||
|
{ icon = " ", key = "g", desc = "Find Text", action = ":lua Snacks.dashboard.pick('live_grep')" },
|
||||||
|
{ icon = " ", key = "r", desc = "Recent Files", action = ":lua Snacks.dashboard.pick('oldfiles')" },
|
||||||
|
{ icon = " ", key = "c", desc = "Config", action = ":lua Snacks.dashboard.pick('files', {cwd = vim.fn.stdpath('config')})" },
|
||||||
|
{ icon = " ", key = "s", desc = "Restore Session", section = "session" },
|
||||||
|
{ icon = " ", key = "x", desc = "Lazy Extras", action = ":LazyExtras" },
|
||||||
|
{ icon = " ", key = "l", desc = "Lazy", action = ":Lazy" },
|
||||||
|
{ icon = " ", key = "q", desc = "Quit", action = ":qa" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
11
nvim/lua/plugins/spectre.lua
Normal file
11
nvim/lua/plugins/spectre.lua
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"nvim-pack/nvim-spectre",
|
||||||
|
dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
|
keys = {
|
||||||
|
{ "<leader>sr", function() require("spectre").open() end, desc = "Replace in Files (Spectre)" },
|
||||||
|
{ "<leader>sr", function() require("spectre").open_visual({ select_word = true }) end, mode = "v", desc = "Replace Word (Spectre)" },
|
||||||
|
},
|
||||||
|
opts = {},
|
||||||
|
},
|
||||||
|
}
|
||||||
14
nvim/lua/plugins/todo-comments.lua
Normal file
14
nvim/lua/plugins/todo-comments.lua
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"folke/todo-comments.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
|
dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
|
opts = {},
|
||||||
|
keys = {
|
||||||
|
{ "]t", function() require("todo-comments").jump_next() end, desc = "Next Todo Comment" },
|
||||||
|
{ "[t", function() require("todo-comments").jump_prev() end, desc = "Prev Todo Comment" },
|
||||||
|
{ "<leader>xt", "<cmd>Trouble todo<cr>", desc = "Todo (Trouble)" },
|
||||||
|
{ "<leader>st", "<cmd>TodoTelescope<cr>", desc = "Todo" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
8
nvim/lua/plugins/undotree.lua
Normal file
8
nvim/lua/plugins/undotree.lua
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"mbbill/undotree",
|
||||||
|
keys = {
|
||||||
|
{ "<leader>cu", "<cmd>UndotreeToggle<cr>", desc = "Undotree Toggle" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
73
nvim/lua/plugins/whichkey.lua
Normal file
73
nvim/lua/plugins/whichkey.lua
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"folke/which-key.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
|
opts_extend = { "spec" },
|
||||||
|
opts = {
|
||||||
|
preset = "helix",
|
||||||
|
defaults = {},
|
||||||
|
spec = {
|
||||||
|
{
|
||||||
|
mode = { "n", "x" },
|
||||||
|
{ "<leader><tab>", group = "tabs" },
|
||||||
|
{ "<leader>c", group = "code" },
|
||||||
|
{ "<leader>d", group = "debug" },
|
||||||
|
{ "<leader>dp", group = "profiler" },
|
||||||
|
{ "<leader>f", group = "file/find" },
|
||||||
|
{ "<leader>g", group = "git" },
|
||||||
|
{ "<leader>gh", group = "hunks" },
|
||||||
|
{ "<leader>q", group = "quit/session" },
|
||||||
|
{ "<leader>s", group = "search" },
|
||||||
|
{ "<leader>u", group = "ui" },
|
||||||
|
{ "<leader>x", group = "diagnostics/quickfix" },
|
||||||
|
{ "[", group = "prev" },
|
||||||
|
{ "]", group = "next" },
|
||||||
|
{ "g", group = "goto" },
|
||||||
|
{ "gs", group = "surround" },
|
||||||
|
{ "z", group = "fold" },
|
||||||
|
{
|
||||||
|
"<leader>b",
|
||||||
|
group = "buffer",
|
||||||
|
expand = function()
|
||||||
|
return require("which-key.extras").expand.buf()
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>w",
|
||||||
|
group = "windows",
|
||||||
|
proxy = "<c-w>",
|
||||||
|
expand = function()
|
||||||
|
return require("which-key.extras").expand.win()
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
-- better descriptions
|
||||||
|
{ "gx", desc = "Open with system app" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>?",
|
||||||
|
function()
|
||||||
|
require("which-key").show({ global = false })
|
||||||
|
end,
|
||||||
|
desc = "Buffer Keymaps (which-key)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<c-w><space>",
|
||||||
|
function()
|
||||||
|
require("which-key").show({ keys = "<c-w>", loop = true })
|
||||||
|
end,
|
||||||
|
desc = "Window Hydra Mode (which-key)",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
config = function(_, opts)
|
||||||
|
local wk = require("which-key")
|
||||||
|
wk.setup(opts)
|
||||||
|
if not vim.tbl_isempty(opts.defaults) then
|
||||||
|
LazyVim.warn("which-key: opts.defaults is deprecated. Please use opts.spec instead.")
|
||||||
|
wk.register(opts.defaults)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user