diff --git a/tools/nvim/lua/keymaps/buffer.lua b/tools/nvim/lua/keymaps/buffer.lua index 709e3f8..227ef00 100644 --- a/tools/nvim/lua/keymaps/buffer.lua +++ b/tools/nvim/lua/keymaps/buffer.lua @@ -1,55 +1,71 @@ -local M = {} - ---- 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 +local bufmap = { + markdown = { + { mode = "x", keys = "i", cmd = 'c*"*', opt = { desc = "Add italic to selected text" } }, + { mode = "x", keys = "b", cmd = 'c**"**', opt = { desc = "Add bold to selected text" } }, + { mode = "x", keys = "c", cmd = 'c`"`', opt = { desc = "Add code block to selected text" } }, + { mode = "x", keys = "d", cmd = 'c~~"~~', opt = { desc = "Add strikethrough to selected text" } }, + { mode = "x", keys = "h", cmd = 'c=="==', opt = { desc = "Add highlight to selected text" } }, + }, + tex = { + { mode = "x", keys = "i", cmd = 'c\\textit{"}', opt = { desc = "Add italic to selected text" } }, + { mode = "x", keys = "b", cmd = 'c\\textbf{"}', opt = { desc = "Add bold to selected text" } }, + { + mode = "x", + keys = "c", + cmd = 'c\\begin{verbatim}"\\end{verbatim}', + opt = { desc = "Add code block to selected text" }, + }, + { mode = "x", keys = "d", cmd = 'c\\sout{"}', opt = { desc = "Add strikethrough to selected text" } }, + { mode = "x", keys = "h", cmd = 'c\\hl{"}', opt = { desc = "Add highlight to selected text" } }, + { mode = "n", keys = "cc", cmd = "w", opt = { desc = "Save and compile tex file" } }, + -- { mode = "i", keys = "", cmd = "w", opt = { desc = "Save and compile tex file" } }, + }, + org = { + { mode = "x", keys = "i", cmd = 'c//"', opt = { desc = "Add italic to selected text" } }, + { mode = "x", keys = "b", cmd = 'c*"*', opt = { desc = "Add bold to selected text" } }, + -- { + -- mode = "x", + -- keys = "c", + -- cmd = 'c#+BEGIN_SRC"#+END_SRC', + -- opt = { desc = "Add code block to selected text" }, + -- }, + { mode = "x", keys = "d", cmd = 'c+"+', opt = { desc = "Add strikethrough to selected text" } }, + { mode = "x", keys = "h", cmd = 'c~"~', opt = { desc = "Add highlight to selected text" } }, + }, } -local term_buf = { - "floaterm", - "term", -} - -local term_mode = { - "n", - "i", - "t", -} - -local term_keymaps = { - { mode = term_mode, keys = "", cmd = ":FloatermToggle", desc = "Exit terminal mode" }, -} - -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 - -vim.api.nvim_create_autocmd("BufEnter", { - pattern = "*", - callback = function() - -- 检查当前 buffer 的 buftype - local buftype = vim.bo.buftype - if buftype == "terminal" then - for _, map in ipairs(term_keymaps) do - local opts = vim.tbl_extend("force", { buffer = 0 }, map.opts or {}) - vim.keymap.set(map.mode, map.keys, map.cmd, opts) +local function setup_buffer_maps(buffer_map) + -- 遍历 buffer_map 中的每个文件类型 + for ft, mappings in pairs(buffer_map) do + -- 1. 为现有缓冲区设置键位映射 + for _, buf in ipairs(vim.api.nvim_list_bufs()) do + if vim.api.nvim_buf_get_option(buf, "filetype") == ft then + for _, mapping in ipairs(mappings) do + -- 合并选项,添加 buffer 以确保映射是缓冲区局部的 + if mapping.mode ~= "n" then + mapping.keys = "" .. mapping.keys + end + local opts = vim.tbl_extend("force", mapping.opt, { buffer = buf }) + vim.keymap.set(mapping.mode, mapping.keys, mapping.cmd, opts) + end end end - end, -}) -return M + -- 2. 为未来缓冲区设置自动命令 + vim.api.nvim_create_autocmd("FileType", { + pattern = ft, -- 匹配文件类型,例如 "markdown" + callback = function(args) + local buf = args.buf -- 获取触发事件的缓冲区号 + for _, mapping in ipairs(mappings) do + local opts = vim.tbl_extend("force", mapping.opt, { buffer = buf }) + if mapping.mode ~= "n" then + mapping.keys = "" .. mapping.keys + end + vim.keymap.set(mapping.mode, mapping.keys, mapping.cmd, opts) + end + end, + }) + end +end + +setup_buffer_maps(bufmap) diff --git a/tools/nvim/lua/keymaps/init.lua b/tools/nvim/lua/keymaps/init.lua index e33d7d8..80d57f3 100644 --- a/tools/nvim/lua/keymaps/init.lua +++ b/tools/nvim/lua/keymaps/init.lua @@ -8,15 +8,13 @@ local keymaps_nvim_tree_general = require("keymaps.nvim-tree").global local keymaps_general = vim.tbl_extend("force", {}, require("keymaps.leaders"), require("keymaps.lspkeys")) -- Tables cannot be merged since `mode` are set in some keymaps of `keymaps_basic` local keymaps_basic = require("keymaps.basic") -local keymaps_buffer = require("keymaps.buffer") local keymaps_modifier = require("keymaps.modifier") --- local keymaps_leader = require("keymaps.leaders") --- local keymaps_lsp = require("keymaps.lspkeys") + +require("keymaps.buffer") utils.set_keymaps(keymaps_general) utils.set_keymaps(keymaps_basic) utils.set_keymaps(keymaps_nvim_tree_general) -utils.set_keymaps(keymaps_buffer) utils.set_keymaps(keymaps_modifier) M.nvim_tree_keymaps = require("keymaps.nvim-tree").plugin