mirror of
https://github.com/js0ny/dotfiles.git
synced 2025-12-21 08:43:00 +00:00
feat(nvim): Add some buffer-specific keymaps
This commit is contained in:
parent
0d6e24aa61
commit
6d9140dc52
2 changed files with 68 additions and 54 deletions
|
|
@ -1,55 +1,71 @@
|
||||||
local M = {}
|
local bufmap = {
|
||||||
|
markdown = {
|
||||||
--- buffer that doesn't act as an editor or common buffer.
|
{ mode = "x", keys = "i", cmd = 'c*<C-r>"*', opt = { desc = "Add italic to selected text" } },
|
||||||
--- Use `q` to close the buffer.
|
{ mode = "x", keys = "b", cmd = 'c**<C-r>"**', opt = { desc = "Add bold to selected text" } },
|
||||||
local tmp_buf = {
|
{ mode = "x", keys = "c", cmd = 'c`<CR><C-r>"<CR>`', opt = { desc = "Add code block to selected text" } },
|
||||||
"qf", -- quickfix
|
{ mode = "x", keys = "d", cmd = 'c~~<C-r>"~~', opt = { desc = "Add strikethrough to selected text" } },
|
||||||
"crunner", -- code runner
|
{ mode = "x", keys = "h", cmd = 'c==<C-r>"==', opt = { desc = "Add highlight to selected text" } },
|
||||||
|
},
|
||||||
|
tex = {
|
||||||
|
{ mode = "x", keys = "i", cmd = 'c\\textit{<C-r>"}', opt = { desc = "Add italic to selected text" } },
|
||||||
|
{ mode = "x", keys = "b", cmd = 'c\\textbf{<C-r>"}', opt = { desc = "Add bold to selected text" } },
|
||||||
|
{
|
||||||
|
mode = "x",
|
||||||
|
keys = "c",
|
||||||
|
cmd = 'c\\begin{verbatim}<CR><C-r>"<CR>\\end{verbatim}',
|
||||||
|
opt = { desc = "Add code block to selected text" },
|
||||||
|
},
|
||||||
|
{ mode = "x", keys = "d", cmd = 'c\\sout{<C-r>"}', opt = { desc = "Add strikethrough to selected text" } },
|
||||||
|
{ mode = "x", keys = "h", cmd = 'c\\hl{<C-r>"}', opt = { desc = "Add highlight to selected text" } },
|
||||||
|
{ mode = "n", keys = "<leader>cc", cmd = "<cmd>w<CR>", opt = { desc = "Save and compile tex file" } },
|
||||||
|
-- { mode = "i", keys = "<C-m><C-m>", cmd = "<cmd>w<CR>", opt = { desc = "Save and compile tex file" } },
|
||||||
|
},
|
||||||
|
org = {
|
||||||
|
{ mode = "x", keys = "i", cmd = 'c/<C-r>/"', opt = { desc = "Add italic to selected text" } },
|
||||||
|
{ mode = "x", keys = "b", cmd = 'c*<C-r>"*', opt = { desc = "Add bold to selected text" } },
|
||||||
|
-- {
|
||||||
|
-- mode = "x",
|
||||||
|
-- keys = "c",
|
||||||
|
-- cmd = 'c#+BEGIN_SRC<CR><C-r>"<CR>#+END_SRC',
|
||||||
|
-- opt = { desc = "Add code block to selected text" },
|
||||||
|
-- },
|
||||||
|
{ mode = "x", keys = "d", cmd = 'c+<C-r>"+', opt = { desc = "Add strikethrough to selected text" } },
|
||||||
|
{ mode = "x", keys = "h", cmd = 'c~<C-r>"~', opt = { desc = "Add highlight to selected text" } },
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
local term_buf = {
|
local function setup_buffer_maps(buffer_map)
|
||||||
"floaterm",
|
-- 遍历 buffer_map 中的每个文件类型
|
||||||
"term",
|
for ft, mappings in pairs(buffer_map) do
|
||||||
}
|
-- 1. 为现有缓冲区设置键位映射
|
||||||
|
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
|
||||||
local term_mode = {
|
if vim.api.nvim_buf_get_option(buf, "filetype") == ft then
|
||||||
"n",
|
for _, mapping in ipairs(mappings) do
|
||||||
"i",
|
-- 合并选项,添加 buffer 以确保映射是缓冲区局部的
|
||||||
"t",
|
if mapping.mode ~= "n" then
|
||||||
}
|
mapping.keys = "<C-m>" .. mapping.keys
|
||||||
|
end
|
||||||
local term_keymaps = {
|
local opts = vim.tbl_extend("force", mapping.opt, { buffer = buf })
|
||||||
{ mode = term_mode, keys = "<C-q>", cmd = ":FloatermToggle", desc = "Exit terminal mode" },
|
vim.keymap.set(mapping.mode, mapping.keys, mapping.cmd, opts)
|
||||||
}
|
end
|
||||||
|
|
||||||
M.tmp_buf_keymaps = {
|
|
||||||
{ mode = "n", keys = "q", cmd = "<Cmd>q<CR>", 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)
|
|
||||||
end
|
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 = "<C-m>" .. mapping.keys
|
||||||
|
end
|
||||||
|
vim.keymap.set(mapping.mode, mapping.keys, mapping.cmd, opts)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
setup_buffer_maps(bufmap)
|
||||||
|
|
|
||||||
|
|
@ -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"))
|
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`
|
-- Tables cannot be merged since `mode` are set in some keymaps of `keymaps_basic`
|
||||||
local keymaps_basic = require("keymaps.basic")
|
local keymaps_basic = require("keymaps.basic")
|
||||||
local keymaps_buffer = require("keymaps.buffer")
|
|
||||||
local keymaps_modifier = require("keymaps.modifier")
|
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_general)
|
||||||
utils.set_keymaps(keymaps_basic)
|
utils.set_keymaps(keymaps_basic)
|
||||||
utils.set_keymaps(keymaps_nvim_tree_general)
|
utils.set_keymaps(keymaps_nvim_tree_general)
|
||||||
utils.set_keymaps(keymaps_buffer)
|
|
||||||
utils.set_keymaps(keymaps_modifier)
|
utils.set_keymaps(keymaps_modifier)
|
||||||
|
|
||||||
M.nvim_tree_keymaps = require("keymaps.nvim-tree").plugin
|
M.nvim_tree_keymaps = require("keymaps.nvim-tree").plugin
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue