diff --git a/platforms/win/glzr/glazewm/config.yaml b/platforms/win/glzr/glazewm/config.yaml index 7bc8582..ecbda6e 100644 --- a/platforms/win/glzr/glazewm/config.yaml +++ b/platforms/win/glzr/glazewm/config.yaml @@ -21,7 +21,7 @@ general: config_reload_commands: [] # Whether to automatically focus windows underneath the cursor. - focus_follows_cursor: false + focus_follows_cursor: true # Whether to switch back and forth between the previously focused # workspace when focusing the current workspace. diff --git a/tools/nvim/.gitignore b/tools/nvim/.gitignore deleted file mode 100644 index 7051991..0000000 --- a/tools/nvim/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -lazy-lock.json -./lua/config/keymaps/obsidian-nvim.lua diff --git a/tools/nvim/init.lua b/tools/nvim/init.lua index 709d609..cb00770 100644 --- a/tools/nvim/init.lua +++ b/tools/nvim/init.lua @@ -21,13 +21,9 @@ vim.api.nvim_create_autocmd("FileType", { -- 加载配置 require("config.options") --- 加载键位映射 -require("config.keymaps") - -- 加载插件 require("config.plugins") - -- 加载主题 require("config.colorscheme") - --- vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree }) +-- 加载键位映射 +require("config.keymaps") diff --git a/tools/nvim/lua/config/options.lua b/tools/nvim/lua/config/options.lua index a3d6e36..d978c69 100644 --- a/tools/nvim/lua/config/options.lua +++ b/tools/nvim/lua/config/options.lua @@ -25,6 +25,7 @@ opt.linebreak = true -- Indentation opt.expandtab = true opt.shiftwidth = 4 +opt.tabstop = 4 opt.shiftround = true -- Case diff --git a/tools/nvim/lua/config/servers.lua b/tools/nvim/lua/config/servers.lua index e99c5da..e11a6ec 100644 --- a/tools/nvim/lua/config/servers.lua +++ b/tools/nvim/lua/config/servers.lua @@ -3,20 +3,14 @@ --- for available server and name local M = {} M.servers = { - "arduino_language_server", -- Arduino - "bashls", -- Bash "clangd", -- C/C++ -- "cmake", -- CMake "eslint", -- JavaScript - "gopls", -- Go "html", -- HTML - "julials", -- Julia "lua_ls", -- Lua "omnisharp", -- C# & F# "powershell_es", -- PowerShell "pyright", -- Python - "rust_analyzer", -- Rust - "taplo", -- TOML "vimls", -- vimscript } diff --git a/tools/nvim/lua/keymaps/basic.lua b/tools/nvim/lua/keymaps/basic.lua index 0a4f4eb..a8c5bef 100644 --- a/tools/nvim/lua/keymaps/basic.lua +++ b/tools/nvim/lua/keymaps/basic.lua @@ -1,15 +1,39 @@ local mode_arrow = { "n", "v", "o", "s", "x" } local keymaps_basic = { -- Modification of Original Keymap - Colemak - { mode = mode_arrow, keys = "n", cmd = "j", desc = "Down" }, - { mode = mode_arrow, keys = "e", cmd = "k", desc = "Up" }, - { mode = mode_arrow, keys = "i", cmd = "l", desc = "Right" }, + -- https://github.com/LazyVim/LazyVim/blob/d1529f650fdd89cb620258bdeca5ed7b558420c7/lua/lazyvim/config/keymaps.lua#L8 + { + mode = mode_arrow, + keys = "n", + cmd = "v:count == 0 ? 'gj' : 'j'", + opts = { desc = "Down", expr = true, silent = true }, + }, + { + mode = mode_arrow, + keys = "", + cmd = "v:count == 0 ? 'gj' : 'j'", + opts = { desc = "Up", expr = true, silent = true }, + }, + { + mode = mode_arrow, + keys = "e", + cmd = "v:count == 0 ? 'gk' : 'k'", + opts = { desc = "Up", expr = true, silent = true }, + }, + { + mode = mode_arrow, + keys = "", + cmd = "v:count == 0 ? 'gk' : 'k'", + opts = { desc = "Up", expr = true, silent = true }, + }, + { mode = mode_arrow, keys = "h", cmd = "h", opts = { desc = "Left", silent = true } }, + { mode = mode_arrow, keys = "i", cmd = "l", opts = { desc = "Right", silent = true } }, { keys = "H", cmd = ":bprevious" }, { keys = "N", cmd = "5j" }, { keys = "E", cmd = "5k" }, { keys = "I", cmd = ":bnext" }, -- Text object implementation - { mode = { "n", "o", "x" }, keys = "l", cmd = "i", group = "inside" }, + { mode = { "n", "o", "x" }, keys = "l", cmd = "i", opts = { desc = "inside" } }, { keys = "L", cmd = "I" }, { keys = "k", cmd = "n" }, { keys = "K", cmd = "N" }, diff --git a/tools/nvim/lua/keymaps/init.lua b/tools/nvim/lua/keymaps/init.lua index fc1284f..9c076cc 100644 --- a/tools/nvim/lua/keymaps/init.lua +++ b/tools/nvim/lua/keymaps/init.lua @@ -15,22 +15,24 @@ end local keymaps_basic = require("keymaps.basic") local keymaps_nvim_tree_general = require("keymaps.nvim-tree").global local keymaps_leader = require("keymaps.leaders") +local keymaps_lsp = require("keymaps.lspkeys") set_keymaps(keymaps_basic, global_default_opts, global_default_mode) set_keymaps(keymaps_nvim_tree_general, global_default_opts, global_default_mode) set_keymaps(keymaps_leader, global_default_opts, global_default_mode) +set_keymaps(keymaps_lsp, global_default_opts, global_default_mode) M.nvim_tree_keymaps = require("keymaps.nvim-tree").plugin --- `map` default for `cmp.mapping` function M.cmp_nvim_keymaps(map) return { - { keys = "", cmd = map.select_next_item(), desc = "Select next completion item" }, - { keys = "", cmd = map.select_prev_item(), desc = "Select previous completion item" }, - { keys = "", cmd = map.confirm({ select = true }), desc = "Confirm completion" }, - { keys = "", cmd = map.confirm({ select = true }), desc = "Confirm completion" }, - { keys = "", cmd = map.complete(), desc = "Trigger completion" }, - { keys = "", cmd = map.abort(), desc = "Abort completion" }, + { keys = "", cmd = map.select_next_item(), opts = { desc = "Select next completion item" } }, + { keys = "", cmd = map.select_prev_item(), opts = { desc = "Select previous completion item" } }, + { keys = "", cmd = map.confirm({ select = true }), opts = { desc = "Confirm completion" } }, + { keys = "", cmd = map.confirm({ select = true }), opts = { desc = "Confirm completion" } }, + { keys = "", cmd = map.complete(), opts = { desc = "Trigger completion" } }, + { keys = "", cmd = map.abort(), opts = { desc = "Abort completion" } }, } end @@ -46,6 +48,7 @@ vim.api.nvim_create_autocmd("FileType", { end, }) -require("keymaps.language") +-- which-key.nvim +require("keymaps.which") return M diff --git a/tools/nvim/lua/keymaps/language.lua b/tools/nvim/lua/keymaps/language.lua index a2093b1..562a315 100644 --- a/tools/nvim/lua/keymaps/language.lua +++ b/tools/nvim/lua/keymaps/language.lua @@ -25,4 +25,27 @@ vim.api.nvim_create_autocmd("FileType", { end, }) +--- buffer that doesn't act as an editor or common buffer. +--- Use `q` to close the buffer. +local tmp_buf = { + "qf", -- quickfix + "crunner", -- code runner +} + +M.tmp_buf_keymaps = { + { mode = "n", keys = "q", cmd = "q", desc = "Close buffer" }, +} + +for _, buf in ipairs(tmp_buf) do + vim.api.nvim_create_autocmd("FileType", { + pattern = buf, + callback = function() + for _, map in ipairs(M.tmp_buf_keymaps) do + local opts = vim.tbl_extend("force", { buffer = 0 }, map.opts or {}) + vim.keymap.set(map.mode, map.keys, map.cmd, opts) + end + end, + }) +end + return M diff --git a/tools/nvim/lua/keymaps/leaders.lua b/tools/nvim/lua/keymaps/leaders.lua index 88afe83..719eea9 100644 --- a/tools/nvim/lua/keymaps/leaders.lua +++ b/tools/nvim/lua/keymaps/leaders.lua @@ -27,139 +27,107 @@ local renameCurrentBuffer = function() vim.cmd("bdelete " .. old_name) end +-- 通用映射函数 +local function apply_mappings(maps, prefix) + for _, map in ipairs(maps) do + local new_map = { + keys = prefix .. map.keys, + cmd = map.cmd, + opts = map.opts, + } + table.insert(M, new_map) + end +end vim.api.nvim_create_user_command("Rename", renameCurrentBuffer, {}) -local leader_general = { - { keys = "", cmd = ":Telescope find_files", desc = "Find Files" }, - { keys = "/", cmd = ":Telescope live_grep", desc = "Grep Files" }, - { keys = "-", cmd = ":split", desc = "Split to down" }, - { keys = "\\", cmd = ":vsplit", desc = "Split to right" }, - { keys = "|", cmd = ":vsplit", desc = "Split to right" }, - { keys = "h", cmd = "h", desc = "Left Window" }, - { keys = "n", cmd = "j", desc = "Down Window" }, - { keys = "e", cmd = "k", desc = "Up Window" }, - { keys = "i", cmd = "l", desc = "Right Window" }, +local leader_mappings = { + general = { + { keys = "", cmd = ":Telescope find_files", opts = { desc = "Find Files" } }, + { keys = "/", cmd = ":Telescope live_grep", opts = { desc = "Grep Files" } }, + { keys = "-", cmd = ":split", opts = { desc = "Split to down" } }, + { keys = "\\", cmd = ":vsplit", opts = { desc = "Split to right" } }, + { keys = "|", cmd = ":vsplit", opts = { desc = "Split to right" } }, + { keys = "h", cmd = "h", opts = { desc = "Left Window" } }, + { keys = "n", cmd = "j", opts = { desc = "Down Window" } }, + { keys = "e", cmd = "k", opts = { desc = "Up Window" } }, + { keys = "i", cmd = "l", opts = { desc = "Right Window" } }, + }, + b = { -- +buffer + { keys = "a", cmd = ":Alpha", opts = { desc = "Dashboard" } }, + { keys = "b", cmd = ":Telescope buffers", opts = { desc = "List Buffers" } }, + { keys = "d", cmd = ":bdelete", opts = { desc = "Delete Buffer" } }, + { keys = "h", cmd = ":bprevious", opts = { desc = "Previous Buffer" } }, + { keys = "i", cmd = ":bnext", opts = { desc = "Next Buffer" } }, + { keys = "H", cmd = ":bfirst", opts = { desc = "First Buffer" } }, + { keys = "I", cmd = ":blast", opts = { desc = "Last Buffer" } }, + { keys = "0", cmd = ":bfirst", opts = { desc = "First Buffer" } }, + { keys = "^", cmd = ":bfirst", opts = { desc = "First Buffer" } }, + { keys = "$", cmd = ":blast", opts = { desc = "Last Buffer" } }, + -- { keys = "s", cmd = ":Telescope buffers", opts = { desc = "Search buffers" } }, + }, + c = { -- +code/compile + { keys = "r", cmd = ":RunCode", opts = { desc = "Run code" } }, + { keys = "e", cmd = ":Telescope diagnostics", opts = { desc = "Navigate errors/warnings" } }, + { keys = "f", cmd = formatFx, opts = { desc = "Format buffer" } }, + { keys = "s", cmd = ":Telescope treesitter", opts = { desc = "Search symbols" } }, + { keys = "S", cmd = ":Telescope grep_string", opts = { desc = "Search current symbol" } }, + }, + f = { -- +file/find + { keys = "f", cmd = ":Telescope fd", opts = { desc = "Find Files" } }, + { keys = "s", cmd = ":Telescope live_grep", opts = { desc = "Grep Files" } }, + { keys = "b", cmd = ":Telescope buffers", opts = { desc = "List Buffers" } }, + { keys = "e", cmd = ":NvimTreeToggle", opts = { desc = "Toggle File Explorer" } }, + { keys = "t", cmd = ":FloatermToggle", opts = { desc = "toggle visibility of the float terminal" } }, + { keys = "T", cmd = ":FloatermNew", opts = { desc = "Spawn a float terminal" } }, + { keys = "h", cmd = ":Telescope oldfiles", opts = { desc = "Search history files" } }, + { keys = "c", cmd = ":Telescope find_files cwd=~/.config/nvim", opts = { desc = "Search Config" } }, + { keys = "o", cmd = ":!open %", opts = { desc = "Open file in default program" } }, + { keys = "R", cmd = renameCurrentBuffer, opts = { desc = "Rename current file" } }, + }, + p = { -- +project + { keys = "p", cmd = ":Telescope projects", opts = { desc = "List all Projects" } }, + { keys = "g", cmd = ":Telescope projects", opts = { desc = "List all Git Projects" } }, + { keys = "s", cmd = ":Telescope session-lens", opts = { desc = "List all sessions" } }, + }, + q = { -- +quit + { keys = "q", cmd = ":q", opts = { desc = "Quit" } }, + { keys = "Q", cmd = ":qa!", opts = { desc = "Force Quit" } }, + { keys = "w", cmd = ":wq", opts = { desc = "Write and Quit" } }, + { keys = "W", cmd = ":wall:qa!", opts = { desc = "Write all and Force Quit" } }, + }, + t = { -- +toggle + { keys = "f", cmd = ":NvimTreeToggle", opts = { desc = "Toggle File Explorer" } }, + { keys = "F", cmd = ":FormatToggle", opts = { desc = "Toggle autoformat-on-save" } }, + { keys = "t", cmd = ":FloatermToggle", opts = { desc = "toggle visibility of the float terminal" } }, + }, + u = { -- +ui + { keys = "i", cmd = ":Telescope colorscheme", opts = { desc = "Change colorscheme" } }, + }, + w = { -- +window + { keys = "h", cmd = "h", opts = { desc = "Left Window" } }, + { keys = "n", cmd = "j", opts = { desc = "Down Window" } }, + { keys = "e", cmd = "k", opts = { desc = "Up Window" } }, + { keys = "i", cmd = "l", opts = { desc = "Right Window" } }, + { keys = "-", cmd = ":split", opts = { desc = "Split to down" } }, + { keys = "|", cmd = ":vsplit", opts = { desc = "Split to right" } }, + { keys = "c", cmd = "c", opts = { desc = "Close Window" } }, + { keys = "o", cmd = "o", opts = { desc = "Close Other Windows" } }, + { keys = "r", cmd = "r", opts = { desc = "Rotate Windows" } }, + { keys = "R", cmd = "R", opts = { desc = "Reverse Rotate Windows" } }, + { keys = "t", cmd = "T", opts = { desc = "Move Window to New Tab" } }, + { keys = "H", cmd = ":vertical resize -5", opts = { desc = "Decrease Window Height" } }, + { keys = "N", cmd = ":resize +5", opts = { desc = "Increase Window Height" } }, + { keys = "E", cmd = ":vertical resize +5", opts = { desc = "Increase Window Width" } }, + { keys = "I", cmd = ":resize -5", opts = { desc = "Decrease Window Width" } }, + }, } -for _, map in ipairs(leader_general) do - map.keys = "" .. map.keys - table.insert(M, map) -end - -local leader_q = { -- leader q: Quit - { keys = "q", cmd = ":q", desc = "Quit" }, - { keys = "Q", cmd = ":qa!", desc = "Force Quit" }, - { keys = "w", cmd = ":wq", desc = "Write and Quit" }, - { keys = "W", cmd = ":wall:qa!", desc = "Write all and Force Quit" }, -} - -local leader_w = { -- leader w: Windows Management - { keys = "h", cmd = "h", desc = "Left Window" }, - { keys = "n", cmd = "j", desc = "Down Window" }, - { keys = "e", cmd = "k", desc = "Up Window" }, - { keys = "i", cmd = "l", desc = "Right Window" }, - { keys = "-", cmd = ":split", desc = "Split to down" }, - { keys = "|", cmd = ":vsplit", desc = "Split to right" }, - { keys = "c", cmd = "c", desc = "Close Window" }, - { keys = "o", cmd = "o", desc = "Close Other Windows" }, - { keys = "r", cmd = "r", desc = "Rotate Windows" }, - { keys = "R", cmd = "R", desc = "Reverse Rotate Windows" }, - { keys = "t", cmd = "T", desc = "Move Window to New Tab" }, - { keys = "H", cmd = ":vertical resize -5", desc = "Decrease Window Height" }, - { keys = "N", cmd = ":resize +5", desc = "Increase Window Height" }, - { keys = "E", cmd = ":vertical resize +5", desc = "Increase Window Width" }, - { keys = "I", cmd = ":resize -5", desc = "Decrease Window Width" }, -} - -local leader_f = { -- f: +files/find - { keys = "f", cmd = ":Telescope fd", desc = "Find Files" }, - { keys = "s", cmd = ":Telescope live_grep", desc = "Grep Files" }, - { keys = "b", cmd = ":Telescope buffers", desc = "List Buffers" }, - { keys = "e", cmd = ":NvimTreeToggle", desc = "Toggle File Explorer" }, - { keys = "t", cmd = ":FloatermToggle", desc = "toggle visibility of the float terminal" }, - { keys = "T", cmd = ":FloatermNew", desc = "Spawn a float terminal" }, - { keys = "h", cmd = ":Telescope oldfiles", desc = "Search history files" }, - { keys = "c", cmd = ":Telescope find_files cwd=~/.config/nvim", desc = "Search Config" }, - { keys = "o", cmd = ":!open %", desc = "Open file in default program" }, - { keys = "R", cmd = renameCurrentBuffer, desc = "Rename current file" }, -} - -local leader_p = { -- leader p: Project - { keys = "p", cmd = ":Telescope projects", desc = "List all Projects" }, - { keys = "g", cmd = ":Telescope projects", desc = "List all Git Projects" }, - { keys = "s", cmd = ":Telescope session-lens", desc = "List all sessions" }, -} - -local leader_b = { -- b: +buffer - { keys = "a", cmd = ":Alpha", desc = "Dashboard" }, - { keys = "b", cmd = ":Telescope buffers", desc = "List Buffers" }, - { keys = "d", cmd = ":bdelete", desc = "Delete Buffer" }, - { keys = "h", cmd = ":bprevious", desc = "Previous Buffer" }, - { keys = "i", cmd = ":bnext", desc = "Next Buffer" }, - { keys = "H", cmd = ":bfirst", desc = "First Buffer" }, - { keys = "I", cmd = ":blast", desc = "Last Buffer" }, - { keys = "0", cmd = ":bfirst", desc = "First Buffer" }, - { keys = "^", cmd = ":bfirst", desc = "First Buffer" }, - { keys = "$", cmd = ":blast", desc = "Last Buffer" }, - -- { keys = "s", cmd = ":Telescope buffers", desc = "Search buffers" }, -} - -local leader_t = { -- t: +toggle/test - { keys = "f", cmd = ":NvimTreeToggle", desc = "Toggle File Explorer" }, - { keys = "F", cmd = ":FormatToggle", desc = "Toggle autoformat-on-save" }, - { keys = "t", cmd = ":FloatermToggle", desc = "toggle visibility of the float terminal" }, -} - -local leader_c = { -- c: +code/compile - { keys = "r", cmd = ":RunCode", desc = "Run code" }, - { keys = "e", cmd = ":Telescope diagnostics", desc = "Navigate errors/warnings" }, - { keys = "f", cmd = formatFx, desc = "Format buffer" }, - { keys = "s", cmd = ":Telescope treesitter", desc = "Search symbols" }, - { keys = "S", cmd = ":Telescope grep_string", desc = "Search current symbol" }, -} - -local leader_u = { -- u: +ui - { keys = "i", cmd = ":Telescope colorscheme", desc = "Change colorscheme" }, -} - -for _, map in ipairs(leader_q) do - map.keys = "q" .. map.keys - table.insert(M, map) -end - -for _, map in ipairs(leader_w) do - map.keys = "w" .. map.keys - table.insert(M, map) -end - -for _, map in ipairs(leader_f) do - map.keys = "f" .. map.keys - table.insert(M, map) -end - -for _, map in ipairs(leader_b) do - map.keys = "b" .. map.keys - table.insert(M, map) -end - -for _, map in ipairs(leader_c) do - map.keys = "c" .. map.keys - table.insert(M, map) -end - -for _, map in ipairs(leader_t) do - map.keys = "t" .. map.keys - table.insert(M, map) -end - -for _, map in ipairs(leader_u) do - map.keys = "u" .. map.keys - table.insert(M, map) -end - -for _, map in ipairs(leader_p) do - map.keys = "p" .. map.keys - table.insert(M, map) +for key, maps in pairs(leader_mappings) do + if key == "general" then + apply_mappings(maps, "") + else + apply_mappings(maps, "" .. key) + end end return M diff --git a/tools/nvim/lua/keymaps/lspkeys.lua b/tools/nvim/lua/keymaps/lspkeys.lua new file mode 100644 index 0000000..1682232 --- /dev/null +++ b/tools/nvim/lua/keymaps/lspkeys.lua @@ -0,0 +1,8 @@ +local M = { + { keys = "gd", cmd = vim.lsp.buf.definition, opts = { desc = "Goto Definition" } }, + { keys = "gD", cmd = vim.lsp.buf.declaration, opts = { desc = "Goto Declaration" } }, + { keys = "gr", cmd = vim.lsp.buf.references, opts = { desc = "Goto References" } }, + { keys = "gi", cmd = vim.lsp.buf.implementation, opts = { desc = "Goto Implementation" } }, +} + +return M diff --git a/tools/nvim/lua/keymaps/nvim-tree.lua b/tools/nvim/lua/keymaps/nvim-tree.lua index 0fa4446..6d85c5c 100644 --- a/tools/nvim/lua/keymaps/nvim-tree.lua +++ b/tools/nvim/lua/keymaps/nvim-tree.lua @@ -1,7 +1,7 @@ local M = {} M.global = { - { mode = "n", keys = "e", cmd = ":NvimTreeToggle" }, + { mode = "n", keys = "E", cmd = ":NvimTreeToggle" }, { mode = "n", keys = "", cmd = ":NvimTreeFocus" }, } diff --git a/tools/nvim/lua/keymaps/which.lua b/tools/nvim/lua/keymaps/which.lua new file mode 100644 index 0000000..fd01c41 --- /dev/null +++ b/tools/nvim/lua/keymaps/which.lua @@ -0,0 +1,23 @@ +local wk = require("which-key") +wk.add({ + -- https://github.com/folke/which-key.nvim/tree/main?tab=readme-ov-file#%EF%B8%8F-mappings + { + -- Nested mappings are allowed and can be added in any order + -- Most attributes can be inherited or overridden on any level + -- There's no limit to the depth of nesting + mode = { "n" }, + { "b", group = "Buffer" }, -- no need to specify mode since it's inherited + { "c", group = "Code/Compile" }, + { "f", group = "File" }, + { "p", group = "Project" }, + { "q", group = "Quit" }, + { "t", group = "Toggle" }, + { "u", group = "UI" }, + { "w", group = "Window" }, + }, + { + "l", + mode = { "o", "x" }, + group = "inside", + }, +}) diff --git a/tools/nvim/lua/plugins/fileutils.lua b/tools/nvim/lua/plugins/fileutils.lua index 95f49c6..b299de4 100644 --- a/tools/nvim/lua/plugins/fileutils.lua +++ b/tools/nvim/lua/plugins/fileutils.lua @@ -15,7 +15,7 @@ return { -- require('hover.providers.jira') -- require('hover.providers.dap') -- require('hover.providers.fold_preview') - -- require('hover.providers.diagnostic') + require("hover.providers.diagnostic") -- require('hover.providers.man') -- require('hover.providers.dictionary') end, @@ -46,4 +46,10 @@ return { vim.o.mousemoveevent = true end, }, + { + "lewis6991/gitsigns.nvim", + config = function() + require("gitsigns").setup() + end, + }, } diff --git a/tools/nvim/lua/plugins/init.lua b/tools/nvim/lua/plugins/init.lua index 53217be..89b5a13 100644 --- a/tools/nvim/lua/plugins/init.lua +++ b/tools/nvim/lua/plugins/init.lua @@ -1,25 +1,2 @@ -- Entry point of the plugin manager -local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end -end -vim.opt.rtp:prepend(lazypath) - -require("lazy").setup({ - { import = "plugins.appearance" }, - { import = "plugins.completion" }, - { import = "plugins.fileutils" }, - { import = "plugins.lsp" }, - { import = "plugins.syntax" }, - { import = "plugins.misc" }, -}) +require("plugins.lazy-nvim") diff --git a/tools/nvim/lua/plugins/lazy-nvim.lua b/tools/nvim/lua/plugins/lazy-nvim.lua new file mode 100644 index 0000000..8dacc43 --- /dev/null +++ b/tools/nvim/lua/plugins/lazy-nvim.lua @@ -0,0 +1,39 @@ +-- Bootstrap lazy.nvim +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +-- Make sure to setup `mapleader` and `maplocalleader` before +-- loading lazy.nvim so that mappings are correct. +-- This is also a good place to setup other settings (vim.opt) +vim.g.mapleader = " " +vim.g.maplocalleader = "\\" + +-- Setup lazy.nvim +require("lazy").setup({ + spec = { + -- import your plugins + { import = "plugins.appearance" }, + { import = "plugins.completion" }, + { import = "plugins.fileutils" }, + { import = "plugins.lsp" }, + { import = "plugins.syntax" }, + { import = "plugins.misc" }, + }, + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + -- automatically check for plugin updates + checker = { enabled = true }, +}) diff --git a/tools/nvim/lua/plugins/lsp.lua b/tools/nvim/lua/plugins/lsp.lua index f067dd6..983cadf 100644 --- a/tools/nvim/lua/plugins/lsp.lua +++ b/tools/nvim/lua/plugins/lsp.lua @@ -1,8 +1,7 @@ return { - { import = "plugins.mod.lspconfig" }, { - "NoahTheDuke/vim-just", - ft = { "just" }, + "neovim/nvim-lspconfig", + lazy = false, }, { import = "plugins.mod.render-markdown" }, -- { import = "plugins.mod.markview" }, @@ -63,4 +62,8 @@ return { }, { import = "plugins.mod.conform-nvim" }, { "nvim-treesitter/nvim-treesitter-context" }, + { + "NoahTheDuke/vim-just", + ft = { "just" }, + }, } diff --git a/tools/nvim/lua/plugins/misc.lua b/tools/nvim/lua/plugins/misc.lua index 6fecdc5..9a7bd8f 100644 --- a/tools/nvim/lua/plugins/misc.lua +++ b/tools/nvim/lua/plugins/misc.lua @@ -7,25 +7,7 @@ return { } }, { "CRAG666/code_runner.nvim", config = true }, { import = "plugins.mod.obsidian-nvim" }, - { - - "folke/which-key.nvim", - event = "VeryLazy", - opts = { - -- your configuration comes here - -- or leave it empty to use the default settings - -- refer to the configuration section below - }, - keys = { - { - "?", - function() - require("which-key").show({ global = false }) - end, - desc = "Buffer Local Keymaps (which-key)", - }, - }, - }, + { import = "plugins.mod.which-keys-nvim" }, { "github/copilot.vim", lazy = false, diff --git a/tools/nvim/lua/plugins/mod/lualine.lua b/tools/nvim/lua/plugins/mod/lualine.lua index 7282117..56af922 100644 --- a/tools/nvim/lua/plugins/mod/lualine.lua +++ b/tools/nvim/lua/plugins/mod/lualine.lua @@ -91,7 +91,7 @@ ins_left({ ins_left({ -- mode component function() - return "" + return "" end, color = function() -- auto change color according to neovims mode diff --git a/tools/nvim/lua/plugins/mod/which-keys-nvim.lua b/tools/nvim/lua/plugins/mod/which-keys-nvim.lua new file mode 100644 index 0000000..eb228f6 --- /dev/null +++ b/tools/nvim/lua/plugins/mod/which-keys-nvim.lua @@ -0,0 +1,18 @@ +return { + "folke/which-key.nvim", + event = "VeryLazy", + opts = { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + }, + keys = { + { + "?", + function() + require("which-key").show({ global = false }) + end, + desc = "Buffer Local Keymaps (which-key)", + }, + }, +} diff --git a/tools/nvim/playground.txt b/tools/nvim/playground.txt new file mode 100644 index 0000000..c855ece --- /dev/null +++ b/tools/nvim/playground.txt @@ -0,0 +1,4 @@ +((( +This is a playground file. +{(1 + 2) * 3} +))) diff --git a/tools/vscode/vscode.vimrc b/tools/vscode/vscode.vimrc index f63ba45..ea2e0d2 100644 --- a/tools/vscode/vscode.vimrc +++ b/tools/vscode/vscode.vimrc @@ -17,6 +17,7 @@ noremap N 5j noremap E 5k " Similar position to i +" The `noremap` implements text-object-like behavior in VSCodeVim noremap l i noremap L I " ne[k]st @@ -29,9 +30,10 @@ noremap J E " Y to yank to end of line noremap Y y$ +noremap :nohlsearch + " 分词版本的w和b,支持中文,需要插件 " 为了保证递归解析,而不是打断,使用 `nmap` 而不是 `nnoremap` -" 由于 VSCode Vim 的限制,递归解析存在缺陷,目前这种情况,2w 符合预期,但 dw 不符合预期 " Comment if you don't use cjk or the plugin nmap w cjkWordHandler.cursorWordEndRight nmap b cjkWordHandler.cursorWordStartLeft @@ -92,7 +94,8 @@ noremap fC workbench.action.openFolderSettingsFile noremap fe workbench.view.explorer noremap fo openInExternalApp.open noremap fr workbench.action.showAllEditorsByMostRecentlyUsed -noremap fR git.rename " Rename file +" Can only rename tracked files +noremap fR git.rename " noremap fs workbench.action.search.toggleQueryDetails noremap ft workbench.action.terminal.toggleTerminal noremap fx workbench.view.extensions