From 09f4fd8ff53742e7275f428495b940610d648b01 Mon Sep 17 00:00:00 2001 From: captain Date: Fri, 27 Feb 2026 19:12:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E9=94=AEdiff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/core/keymap.lua | 63 ++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/lua/core/keymap.lua b/lua/core/keymap.lua index f5e83bc..a3c1a4b 100644 --- a/lua/core/keymap.lua +++ b/lua/core/keymap.lua @@ -3,11 +3,11 @@ -- === local function mapkey(mode, lhs, rhs) - vim.api.nvim_set_keymap(mode, lhs, rhs, { noremap = true }) + vim.keymap.set(mode, lhs, rhs, { silent = true }) end local function mapcmd(key, cmd) - vim.api.nvim_set_keymap("n", key, ":" .. cmd .. "", { noremap = true }) + vim.keymap.set("n", key, ":" .. cmd .. "", { noremap = true }) end local function maplua(key, txt) @@ -39,12 +39,7 @@ mapkey("", "L", "") mapkey("", "k", "i") mapkey("", "K", "I") --- 以下两个映射默认了 --- make Y to copy till the end of the line --- mapkey('','Y','y$') - --- make D to delete till the end of the line --- mapkey('','D','d$') +mapkey('n', '', '') -- 折叠 mapkey("", "o", "za") @@ -52,6 +47,14 @@ mapkey("x", "o", "zf") -- 读取保存的折叠 -- mapkey("", "a", ":loadview") + +-- 以下两个映射默认了 +-- make Y to copy till the end of the line +-- mapkey('','Y','y$') + +-- make D to delete till the end of the line +-- mapkey('','D','d$') + -- 打开lazygit,已用fm-nvim插件 -- mapcmd('',':tabe:-tabmove:term lazygit') @@ -77,7 +80,7 @@ mapkey("", "E", "5j") mapkey("", "N", "0") mapkey("", "I", "$") -- 向下滚动半页,默认向上滚动半页 -mapkey("n","","") +mapkey("", "", "") -- 更快的行导航 mapkey("", "W", "5W") @@ -121,9 +124,9 @@ mapkey("", "q", "j:q") -- === Tab management -- === --- tu创建新标签 -mapcmd("tu", "tabe") --- 在标签之间移动,已用bufferline.nvim替代 +-- tu创建新标签,已用bufferline.nvim替代 +-- mapcmd("tu", "tabe") +-- 在标签之间移动 -- mapcmd('tn','-tabnext') -- mapcmd('ti','+tabnext') @@ -166,12 +169,12 @@ function search_and_replace() -- 执行替换命令 if search_text ~= "" and replace_text ~= "" then local cmd = 'execute "!grep -rl \\"' - .. search_text - .. '\\" ./ | xargs sed -i \\"s/' - .. search_text - .. "/" - .. replace_text - .. '/g\\""' + .. search_text + .. '\\" ./ | xargs sed -i \\"s/' + .. search_text + .. "/" + .. replace_text + .. '/g\\""' vim.cmd(cmd) print("Replaced all occurrences of '" .. search_text .. "' with '" .. replace_text .. "'") else @@ -198,6 +201,28 @@ function search_and_replace_current_file() end end +-- === +-- === 临时“存档”文件当前的版本,并与后续的修改进行 diff 对比 +-- === + +-- 创建 :DiffOrig 自定义命令,这个命令会打开一个垂直分屏,加载当前文件存盘时的版本,并启动 diff 模式 +vim.api.nvim_create_user_command( + 'DiffOrig', + function() + -- 在创建新窗口前,先保存当前文件的 filetype + local original_filetype = vim.bo.filetype + -- 打开一个垂直分屏,并准备好临时缓冲区 + vim.cmd('vert new | set buftype=nofile') + -- 在新的临时缓冲区里,设置我们刚才保存的 filetype,这是确保语法高亮的关键! + vim.bo.filetype = original_filetype + -- 读取原始文件的磁盘内容,并启动 diff + vim.cmd('read ++edit # | 0d_ | diffthis | wincmd p | diffthis') + end, + { force = true } +) +-- dd 将会执行 :DiffOrig 命令 +mapcmd('dd', 'DiffOrig') + -- === -- === Other useful stuff -- === @@ -236,9 +261,11 @@ local map = {} function map:key(mode, lhs, rhs) vim.api.nvim_set_keymap(mode, lhs, rhs, { noremap = true }) end + function map:cmd(key, cmd) vim.api.nvim_set_keymap("n", key, ":" .. cmd .. "", { noremap = true }) end + function map:lua(key, txt) vim.api.nvim_set_keymap("n", key, ":lua " .. txt .. "", { noremap = true }) end