From 3c3079c9de777d51c5e9476afdf6e55699ad38b1 Mon Sep 17 00:00:00 2001 From: atdunbg Date: Fri, 19 Jun 2026 11:11:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20diffview,=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9telescope=20=E5=88=9D=E6=AC=A1=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E4=B8=8B=E8=BD=BD=E6=8F=92=E4=BB=B6=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nvim/lazy-lock.json | 1 + nvim/lua/plugins/diffview.lua | 35 ++++++++++++++++++++++++++++++++++ nvim/lua/plugins/telescope.lua | 19 ++++++++++++------ 3 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 nvim/lua/plugins/diffview.lua diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json index 8b99b84..a8b2f97 100644 --- a/nvim/lazy-lock.json +++ b/nvim/lazy-lock.json @@ -2,6 +2,7 @@ "blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" }, "cmake-tools.nvim": { "branch": "master", "commit": "98cdc162572a7b77733030425d8d045d68f2a1fd" }, "conform.nvim": { "branch": "master", "commit": "619363c30309d29ffa631e67c8183f2a72caa373" }, + "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, "gitsigns.nvim": { "branch": "main", "commit": "25050e4ed39e628282831d4cbecb1850454ce915" }, "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "0a695750d747db1e7e70bcf0267ef8951c95fc83" }, diff --git a/nvim/lua/plugins/diffview.lua b/nvim/lua/plugins/diffview.lua new file mode 100644 index 0000000..dadd636 --- /dev/null +++ b/nvim/lua/plugins/diffview.lua @@ -0,0 +1,35 @@ +-- ============================================================================ +-- Git diff 视图 (diffview) +-- 仓库级 diff 总览 + 提交历史对比,补充 gitsigns 的行内能力 +-- ============================================================================ + +return { + { + "sindrets/diffview.nvim", + cmd = "DiffviewOpen", + keys = { + -- 只保留 3 个核心键位:打开/关闭 diff 视图、查看历史 + { "go", "DiffviewOpen", desc = "查看改动" }, + { "gq", "DiffviewClose", desc = "关闭 diff" }, + { "gl", "DiffviewFileHistory %", desc = "文件历史" }, + }, + opts = { + file_panel = { + listing_style = "tree", + tree_options = { + flatten_dirs = true, + folder_statuses = "only_folded", + }, + }, + keymaps = { + view = { + -- 覆盖全局 q:在 diffview 里关闭整个 diffview,而非单个窗口 + { "n", "q", "DiffviewClose", { desc = "关闭 diffview" } }, + }, + file_panel = { + { "n", "q", "DiffviewClose", { desc = "关闭 diffview" } }, + }, + }, + }, + }, +} diff --git a/nvim/lua/plugins/telescope.lua b/nvim/lua/plugins/telescope.lua index 7f9ab12..23d0ff3 100644 --- a/nvim/lua/plugins/telescope.lua +++ b/nvim/lua/plugins/telescope.lua @@ -19,22 +19,29 @@ return { { "fk", "Telescope keymaps", desc = "查找键位" }, { "fr", "Telescope oldfiles", desc = "最近文件" }, }, + -- 启动即加载:ui-select 扩展需要全局接管 vim.ui.select, + -- 懒加载会导致未触发 :Telescope 时(如 rr)回退到原生 UI + lazy = false, opts = { defaults = { prompt_prefix = " > ", selection_caret = " > ", layout_strategy = "flex", }, - extensions = { - ["ui-select"] = { - require("telescope.themes").get_dropdown({}), - }, - }, }, config = function(_, opts) local telescope = require("telescope") + + -- extensions 需要 require telescope.themes,必须在 config 里构造 + opts.extensions = { + ["ui-select"] = { + require("telescope.themes").get_dropdown({}), + }, + } + telescope.setup(opts) - telescope.load_extension("ui-select") + -- 用 pcall 保护,避免 ui-select 扩展未安装时崩溃 + pcall(telescope.load_extension, "ui-select") end, }, }