Extract git/pick from pack.lua into standalone modules and remove moonfly theme
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7f754cd8ba
commit
e0441656b4
111
lua/git.lua
Normal file
111
lua/git.lua
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
local function get_cursor_hunk()
|
||||||
|
local buf = vim.api.nvim_get_current_buf()
|
||||||
|
local data = require("mini.diff").get_buf_data(buf)
|
||||||
|
if not data or not data.hunks or #data.hunks == 0 then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
local cursor_line = vim.api.nvim_win_get_cursor(0)[1]
|
||||||
|
for _, h in ipairs(data.hunks) do
|
||||||
|
local start_line = math.max(h.buf_start, 1)
|
||||||
|
local end_line = h.buf_start + h.buf_count - 1
|
||||||
|
if h.buf_count == 0 then
|
||||||
|
end_line = start_line
|
||||||
|
end
|
||||||
|
if cursor_line >= start_line and cursor_line <= end_line then
|
||||||
|
return h, data.ref_text
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local function preview_hunk()
|
||||||
|
local hunk, ref_text = get_cursor_hunk()
|
||||||
|
if not hunk then
|
||||||
|
vim.notify("Cursor not on a hunk", vim.log.levels.WARN)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local lines = {}
|
||||||
|
table.insert(lines, "Hunk type: " .. hunk.type)
|
||||||
|
table.insert(lines, string.format("Buffer lines: %d-%d", hunk.buf_start, hunk.buf_start + hunk.buf_count - 1))
|
||||||
|
table.insert(lines, string.format("Reference lines: %d-%d", hunk.ref_start, hunk.ref_start + hunk.ref_count - 1))
|
||||||
|
table.insert(lines, "---")
|
||||||
|
local buf = vim.api.nvim_get_current_buf()
|
||||||
|
local ref_lines = vim.split(ref_text or "", "\n")
|
||||||
|
if hunk.type == "delete" then
|
||||||
|
table.insert(lines, "Deleted lines (from reference):")
|
||||||
|
for i = hunk.ref_start, hunk.ref_start + hunk.ref_count - 1 do
|
||||||
|
table.insert(lines, "- " .. (ref_lines[i] or ""))
|
||||||
|
end
|
||||||
|
elseif hunk.type == "add" then
|
||||||
|
table.insert(lines, "Added lines:")
|
||||||
|
for i = hunk.buf_start, hunk.buf_start + hunk.buf_count - 1 do
|
||||||
|
table.insert(lines, "+ " .. (vim.api.nvim_buf_get_lines(buf, i - 1, i, false)[1] or ""))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
table.insert(lines, "Before (reference):")
|
||||||
|
for i = hunk.ref_start, hunk.ref_start + hunk.ref_count - 1 do
|
||||||
|
table.insert(lines, "- " .. (ref_lines[i] or ""))
|
||||||
|
end
|
||||||
|
table.insert(lines, "After (buffer):")
|
||||||
|
for i = hunk.buf_start, hunk.buf_start + hunk.buf_count - 1 do
|
||||||
|
table.insert(lines, "+ " .. (vim.api.nvim_buf_get_lines(buf, i - 1, i, false)[1] or ""))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local width = math.min(80, vim.o.columns - 4)
|
||||||
|
local height = math.min(#lines + 2, vim.o.lines - 4)
|
||||||
|
local preview_buf = vim.api.nvim_create_buf(false, true)
|
||||||
|
vim.api.nvim_buf_set_lines(preview_buf, 0, -1, false, lines)
|
||||||
|
vim.api.nvim_set_option_value("modifiable", false, { buf = preview_buf })
|
||||||
|
vim.api.nvim_set_option_value("filetype", "diff", { buf = preview_buf })
|
||||||
|
local win = vim.api.nvim_open_win(preview_buf, true, {
|
||||||
|
relative = "editor",
|
||||||
|
row = math.floor((vim.o.lines - height) / 2),
|
||||||
|
col = math.floor((vim.o.columns - width) / 2),
|
||||||
|
width = width,
|
||||||
|
height = height,
|
||||||
|
style = "minimal",
|
||||||
|
border = "rounded",
|
||||||
|
title = " Hunk Preview ",
|
||||||
|
title_pos = "center",
|
||||||
|
})
|
||||||
|
vim.keymap.set("n", "q", function()
|
||||||
|
vim.api.nvim_win_close(win, true)
|
||||||
|
end, { buffer = preview_buf })
|
||||||
|
vim.keymap.set("n", "<Esc>", function()
|
||||||
|
vim.api.nvim_win_close(win, true)
|
||||||
|
end, { buffer = preview_buf })
|
||||||
|
end
|
||||||
|
|
||||||
|
local function blame_line()
|
||||||
|
local file = vim.api.nvim_buf_get_name(0)
|
||||||
|
if file == "" then
|
||||||
|
vim.notify("No file name", vim.log.levels.WARN)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local line = vim.api.nvim_win_get_cursor(0)[1]
|
||||||
|
local cmd = { "git", "blame", "-L", line .. "," .. line, "--porcelain", file }
|
||||||
|
local output = vim.fn.system(cmd)
|
||||||
|
if vim.v.shell_error ~= 0 then
|
||||||
|
vim.notify("git blame failed", vim.log.levels.ERROR)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local hash = output:match("^(%x+)%s") or "?"
|
||||||
|
local author = output:match("author ([^\n]+)") or "?"
|
||||||
|
local email = output:match("author%-mail ([^\n]+)") or "?"
|
||||||
|
local time = output:match("author%-time (%d+)")
|
||||||
|
local summary = output:match("summary ([^\n]+)") or "?"
|
||||||
|
local time_str = time and os.date("%Y-%m-%d %H:%M", tonumber(time)) or "?"
|
||||||
|
vim.notify(
|
||||||
|
string.format("%s | %s %s | %s\n%s", hash:sub(1, 8), author, email, time_str, summary),
|
||||||
|
vim.log.levels.INFO
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>ghp", preview_hunk, { desc = "Preview hunk" })
|
||||||
|
vim.keymap.set("n", "<leader>ghb", blame_line, { desc = "Blame line" })
|
||||||
|
vim.keymap.set("n", "<leader>gB", function()
|
||||||
|
vim.cmd("Git blame")
|
||||||
|
end, { desc = "Blame buffer" })
|
||||||
|
vim.keymap.set("n", "<leader>gD", function()
|
||||||
|
vim.cmd("Git log -p -- %")
|
||||||
|
end, { desc = "Git file history" })
|
||||||
31
lua/lsp.lua
31
lua/lsp.lua
@ -61,6 +61,21 @@ vim.lsp.config("lua_ls", {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Installed
|
||||||
|
-- ◍ biome
|
||||||
|
-- ◍ css-lsp
|
||||||
|
-- ◍ gofumpt
|
||||||
|
-- ◍ goimports
|
||||||
|
-- ◍ golangci-lint
|
||||||
|
-- ◍ gopls
|
||||||
|
-- ◍ html-lsp
|
||||||
|
-- ◍ kotlin-lsp
|
||||||
|
-- ◍ lua-language-server
|
||||||
|
-- ◍ prettier
|
||||||
|
-- ◍ rust-analyzer
|
||||||
|
-- ◍ stylua
|
||||||
|
-- ◍ svelte-language-server
|
||||||
|
-- ◍ vtsls
|
||||||
vim.lsp.enable({
|
vim.lsp.enable({
|
||||||
"html",
|
"html",
|
||||||
"cssls",
|
"cssls",
|
||||||
@ -75,14 +90,22 @@ vim.lsp.enable({
|
|||||||
})
|
})
|
||||||
|
|
||||||
-- LSP keymaps(用 function 包装延迟 vim.lsp/vim.diagnostic 模块加载)
|
-- LSP keymaps(用 function 包装延迟 vim.lsp/vim.diagnostic 模块加载)
|
||||||
vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, { desc = "Go to definition" })
|
vim.keymap.set("n", "gd", function()
|
||||||
vim.keymap.set("n", "gh", function() vim.lsp.buf.hover() end, { desc = "Hover" })
|
vim.lsp.buf.definition()
|
||||||
|
end, { desc = "Go to definition" })
|
||||||
|
vim.keymap.set("n", "gh", function()
|
||||||
|
vim.lsp.buf.hover()
|
||||||
|
end, { desc = "Hover" })
|
||||||
vim.keymap.set("n", "<leader>fm", function()
|
vim.keymap.set("n", "<leader>fm", function()
|
||||||
lazy.load("conform", setup_conform)
|
lazy.load("conform", setup_conform)
|
||||||
require("conform").format({ lsp_fallback = true })
|
require("conform").format({ lsp_fallback = true })
|
||||||
end, { desc = "Format buffer" })
|
end, { desc = "Format buffer" })
|
||||||
vim.keymap.set("n", "df", function() vim.diagnostic.open_float() end, { desc = "Show line diagnostics" })
|
vim.keymap.set("n", "df", function()
|
||||||
vim.keymap.set("n", "<leader>ca", function() vim.lsp.buf.code_action() end, { desc = "Code action" })
|
vim.diagnostic.open_float()
|
||||||
|
end, { desc = "Show line diagnostics" })
|
||||||
|
vim.keymap.set("n", "<leader>ca", function()
|
||||||
|
vim.lsp.buf.code_action()
|
||||||
|
end, { desc = "Code action" })
|
||||||
|
|
||||||
local diagnostic_goto = function(next, severity)
|
local diagnostic_goto = function(next, severity)
|
||||||
return function()
|
return function()
|
||||||
|
|||||||
1503
lua/moonfly/init.lua
1503
lua/moonfly/init.lua
File diff suppressed because it is too large
Load Diff
206
lua/pack.lua
206
lua/pack.lua
@ -1,4 +1,6 @@
|
|||||||
local lazy = require("lazy")
|
local lazy = require("lazy")
|
||||||
|
local pick = require("pick")
|
||||||
|
require("git")
|
||||||
|
|
||||||
vim.pack.add({
|
vim.pack.add({
|
||||||
"https://github.com/nvim-mini/mini.nvim",
|
"https://github.com/nvim-mini/mini.nvim",
|
||||||
@ -127,42 +129,33 @@ lazy.on_event("surround", "BufReadPost", "*", function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
-- mini.pick + mini.extra - 按键触发
|
-- mini.pick + mini.extra - 按键触发
|
||||||
local load_pick = function()
|
lazy.on_keys("pick", "<leader>ff", "n", pick.load_pick, function()
|
||||||
lazy.load("pick", function()
|
|
||||||
require("mini.pick").setup()
|
|
||||||
end)
|
|
||||||
lazy.load("extra", function()
|
|
||||||
require("mini.extra").setup()
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
lazy.on_keys("pick", "<leader>ff", "n", load_pick, function()
|
|
||||||
require("mini.pick").builtin.files()
|
require("mini.pick").builtin.files()
|
||||||
end, { desc = "Mini File Picker" })
|
end, { desc = "Mini File Picker" })
|
||||||
|
|
||||||
lazy.on_keys("pick", "<leader>fw", "n", load_pick, function()
|
lazy.on_keys("pick", "<leader>fw", "n", pick.load_pick, function()
|
||||||
require("mini.pick").builtin.grep_live()
|
require("mini.pick").builtin.grep_live()
|
||||||
end, { desc = "Live grep in project" })
|
end, { desc = "Live grep in project" })
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>ds", function() vim.diagnostic.setloclist() end, { desc = "LSP diagnostic loclist" })
|
vim.keymap.set("n", "<leader>ds", function() vim.diagnostic.setloclist() end, { desc = "LSP diagnostic loclist" })
|
||||||
|
|
||||||
lazy.on_keys("pick", "<leader>sk", "n", load_pick, function()
|
lazy.on_keys("pick", "<leader>sk", "n", pick.load_pick, function()
|
||||||
require("mini.extra").pickers.keymaps()
|
require("mini.extra").pickers.keymaps()
|
||||||
end, { desc = "Search keymaps" })
|
end, { desc = "Search keymaps" })
|
||||||
|
|
||||||
lazy.on_keys("pick", "<leader>fa", "n", load_pick, function()
|
lazy.on_keys("pick", "<leader>fa", "n", pick.load_pick, function()
|
||||||
require("mini.pick").builtin.cli({ command = { "rg", "--files", "--hidden", "--no-ignore", "--color=never" } })
|
require("mini.pick").builtin.cli({ command = { "rg", "--files", "--hidden", "--no-ignore", "--color=never" } })
|
||||||
end, { desc = "Find all files (including hidden/ignored)" })
|
end, { desc = "Find all files (including hidden/ignored)" })
|
||||||
|
|
||||||
lazy.on_keys("pick", "<leader>fh", "n", load_pick, function()
|
lazy.on_keys("pick", "<leader>fh", "n", pick.load_pick, function()
|
||||||
require("mini.pick").builtin.help()
|
require("mini.pick").builtin.help()
|
||||||
end, { desc = "Search help tags" })
|
end, { desc = "Search help tags" })
|
||||||
|
|
||||||
lazy.on_keys("pick", "<leader>fo", "n", load_pick, function()
|
lazy.on_keys("pick", "<leader>fo", "n", pick.load_pick, function()
|
||||||
require("mini.extra").pickers.oldfiles()
|
require("mini.extra").pickers.oldfiles()
|
||||||
end, { desc = "Search oldfiles" })
|
end, { desc = "Search oldfiles" })
|
||||||
|
|
||||||
lazy.on_keys("pick", "<leader>fz", "n", load_pick, function()
|
lazy.on_keys("pick", "<leader>fz", "n", pick.load_pick, function()
|
||||||
require("mini.extra").pickers.buf_lines({ scope = "current" })
|
require("mini.extra").pickers.buf_lines({ scope = "current" })
|
||||||
end, { desc = "Search in current buffer" })
|
end, { desc = "Search in current buffer" })
|
||||||
|
|
||||||
@ -201,120 +194,6 @@ lazy.on_event("diff", "BufReadPost", "*", function()
|
|||||||
})
|
})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- mini.diff extra: preview hunk, blame line, select hunk textobject
|
|
||||||
local function get_cursor_hunk()
|
|
||||||
local buf = vim.api.nvim_get_current_buf()
|
|
||||||
local data = require("mini.diff").get_buf_data(buf)
|
|
||||||
if not data or not data.hunks or #data.hunks == 0 then
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
local cursor_line = vim.api.nvim_win_get_cursor(0)[1]
|
|
||||||
for _, h in ipairs(data.hunks) do
|
|
||||||
local start_line = math.max(h.buf_start, 1)
|
|
||||||
local end_line = h.buf_start + h.buf_count - 1
|
|
||||||
if h.buf_count == 0 then
|
|
||||||
end_line = start_line
|
|
||||||
end
|
|
||||||
if cursor_line >= start_line and cursor_line <= end_line then
|
|
||||||
return h, data.ref_text
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
local function preview_hunk()
|
|
||||||
local hunk, ref_text = get_cursor_hunk()
|
|
||||||
if not hunk then
|
|
||||||
vim.notify("Cursor not on a hunk", vim.log.levels.WARN)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local lines = {}
|
|
||||||
table.insert(lines, "Hunk type: " .. hunk.type)
|
|
||||||
table.insert(lines, string.format("Buffer lines: %d-%d", hunk.buf_start, hunk.buf_start + hunk.buf_count - 1))
|
|
||||||
table.insert(lines, string.format("Reference lines: %d-%d", hunk.ref_start, hunk.ref_start + hunk.ref_count - 1))
|
|
||||||
table.insert(lines, "---")
|
|
||||||
local buf = vim.api.nvim_get_current_buf()
|
|
||||||
local ref_lines = vim.split(ref_text or "", "\n")
|
|
||||||
if hunk.type == "delete" then
|
|
||||||
table.insert(lines, "Deleted lines (from reference):")
|
|
||||||
for i = hunk.ref_start, hunk.ref_start + hunk.ref_count - 1 do
|
|
||||||
table.insert(lines, "- " .. (ref_lines[i] or ""))
|
|
||||||
end
|
|
||||||
elseif hunk.type == "add" then
|
|
||||||
table.insert(lines, "Added lines:")
|
|
||||||
for i = hunk.buf_start, hunk.buf_start + hunk.buf_count - 1 do
|
|
||||||
table.insert(lines, "+ " .. (vim.api.nvim_buf_get_lines(buf, i - 1, i, false)[1] or ""))
|
|
||||||
end
|
|
||||||
else
|
|
||||||
table.insert(lines, "Before (reference):")
|
|
||||||
for i = hunk.ref_start, hunk.ref_start + hunk.ref_count - 1 do
|
|
||||||
table.insert(lines, "- " .. (ref_lines[i] or ""))
|
|
||||||
end
|
|
||||||
table.insert(lines, "After (buffer):")
|
|
||||||
for i = hunk.buf_start, hunk.buf_start + hunk.buf_count - 1 do
|
|
||||||
table.insert(lines, "+ " .. (vim.api.nvim_buf_get_lines(buf, i - 1, i, false)[1] or ""))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
local width = math.min(80, vim.o.columns - 4)
|
|
||||||
local height = math.min(#lines + 2, vim.o.lines - 4)
|
|
||||||
local preview_buf = vim.api.nvim_create_buf(false, true)
|
|
||||||
vim.api.nvim_buf_set_lines(preview_buf, 0, -1, false, lines)
|
|
||||||
vim.api.nvim_set_option_value("modifiable", false, { buf = preview_buf })
|
|
||||||
vim.api.nvim_set_option_value("filetype", "diff", { buf = preview_buf })
|
|
||||||
local win = vim.api.nvim_open_win(preview_buf, true, {
|
|
||||||
relative = "editor",
|
|
||||||
row = math.floor((vim.o.lines - height) / 2),
|
|
||||||
col = math.floor((vim.o.columns - width) / 2),
|
|
||||||
width = width,
|
|
||||||
height = height,
|
|
||||||
style = "minimal",
|
|
||||||
border = "rounded",
|
|
||||||
title = " Hunk Preview ",
|
|
||||||
title_pos = "center",
|
|
||||||
})
|
|
||||||
vim.keymap.set("n", "q", function()
|
|
||||||
vim.api.nvim_win_close(win, true)
|
|
||||||
end, { buffer = preview_buf })
|
|
||||||
vim.keymap.set("n", "<Esc>", function()
|
|
||||||
vim.api.nvim_win_close(win, true)
|
|
||||||
end, { buffer = preview_buf })
|
|
||||||
end
|
|
||||||
|
|
||||||
local function blame_line()
|
|
||||||
local file = vim.api.nvim_buf_get_name(0)
|
|
||||||
if file == "" then
|
|
||||||
vim.notify("No file name", vim.log.levels.WARN)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local line = vim.api.nvim_win_get_cursor(0)[1]
|
|
||||||
local cmd = { "git", "blame", "-L", line .. "," .. line, "--porcelain", file }
|
|
||||||
local output = vim.fn.system(cmd)
|
|
||||||
if vim.v.shell_error ~= 0 then
|
|
||||||
vim.notify("git blame failed", vim.log.levels.ERROR)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local hash = output:match("^(%x+)%s") or "?"
|
|
||||||
local author = output:match("author ([^\n]+)") or "?"
|
|
||||||
local email = output:match("author%-mail ([^\n]+)") or "?"
|
|
||||||
local time = output:match("author%-time (%d+)")
|
|
||||||
local summary = output:match("summary ([^\n]+)") or "?"
|
|
||||||
local time_str = time and os.date("%Y-%m-%d %H:%M", tonumber(time)) or "?"
|
|
||||||
vim.notify(
|
|
||||||
string.format("%s | %s %s | %s\n%s", hash:sub(1, 8), author, email, time_str, summary),
|
|
||||||
vim.log.levels.INFO
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>ghp", preview_hunk, { desc = "Preview hunk" })
|
|
||||||
vim.keymap.set("n", "<leader>ghb", blame_line, { desc = "Blame line" })
|
|
||||||
vim.keymap.set("n", "<leader>gB", function()
|
|
||||||
vim.cmd("Git blame")
|
|
||||||
end, { desc = "Blame buffer" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>gD", function()
|
|
||||||
vim.cmd("Git log -p -- %")
|
|
||||||
end, { desc = "Git file history" })
|
|
||||||
|
|
||||||
-- vim-fugitive - 按键触发
|
-- vim-fugitive - 按键触发
|
||||||
local function load_fugitive()
|
local function load_fugitive()
|
||||||
vim.cmd.packadd("vim-fugitive")
|
vim.cmd.packadd("vim-fugitive")
|
||||||
@ -327,70 +206,3 @@ end, { desc = "Fugitive Full Page New Tab" })
|
|||||||
lazy.on_keys("fugitive", "<leader>gd", "n", load_fugitive, function()
|
lazy.on_keys("fugitive", "<leader>gd", "n", load_fugitive, function()
|
||||||
vim.cmd("Gvdiffsplit")
|
vim.cmd("Gvdiffsplit")
|
||||||
end, { desc = "Git diff split" })
|
end, { desc = "Git diff split" })
|
||||||
|
|
||||||
-- mini.pick buffer picker (telescope buffers equivalent)
|
|
||||||
lazy.on_keys("pick", "<leader><leader>", "n", load_pick, function()
|
|
||||||
local MiniPick = require("mini.pick")
|
|
||||||
|
|
||||||
local delete_buf = function()
|
|
||||||
local matches = MiniPick.get_picker_matches()
|
|
||||||
local item = matches and matches.current
|
|
||||||
if not item or not item.bufnr then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local bufnr = item.bufnr
|
|
||||||
|
|
||||||
pcall(vim.api.nvim_buf_delete, bufnr, { force = true })
|
|
||||||
|
|
||||||
if MiniPick.is_picker_active() then
|
|
||||||
local items = vim.tbl_filter(function(i)
|
|
||||||
return i.bufnr and vim.api.nvim_buf_is_valid(i.bufnr)
|
|
||||||
end, MiniPick.get_picker_items() or {})
|
|
||||||
MiniPick.set_picker_items(items)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local bufs = vim.tbl_filter(function(b)
|
|
||||||
return vim.bo[b.bufnr].buftype == "" and b.listed == 1
|
|
||||||
end, vim.fn.getbufinfo())
|
|
||||||
table.sort(bufs, function(a, b)
|
|
||||||
return a.lastused > b.lastused
|
|
||||||
end)
|
|
||||||
|
|
||||||
local items = {}
|
|
||||||
for _, info in ipairs(bufs) do
|
|
||||||
local name = info.name ~= "" and vim.fn.fnamemodify(info.name, ":.") or "[No Name]"
|
|
||||||
table.insert(items, {
|
|
||||||
text = name,
|
|
||||||
bufnr = info.bufnr,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
MiniPick.start({
|
|
||||||
source = {
|
|
||||||
name = "Buffers",
|
|
||||||
items = items,
|
|
||||||
show = function(buf_id, items_arr, query)
|
|
||||||
MiniPick.default_show(buf_id, items_arr, query, { show_icons = true })
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
mappings = {
|
|
||||||
delete_buffer = { char = "<C-d>", func = delete_buf },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end, { desc = "Buffers" })
|
|
||||||
|
|
||||||
-- mini.pick filetype picker
|
|
||||||
lazy.on_keys("pick", "<leader>ft", "n", load_pick, function()
|
|
||||||
local MiniPick = require("mini.pick")
|
|
||||||
local filetypes = vim.fn.getcompletion("", "filetype")
|
|
||||||
MiniPick.start({
|
|
||||||
source = {
|
|
||||||
name = "Filetypes",
|
|
||||||
items = filetypes,
|
|
||||||
choose = function(item)
|
|
||||||
vim.bo.filetype = item
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end, { desc = "Change filetype" })
|
|
||||||
|
|||||||
83
lua/pick.lua
Normal file
83
lua/pick.lua
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
local lazy = require("lazy")
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
M.load_pick = function()
|
||||||
|
lazy.load("pick", function()
|
||||||
|
require("mini.pick").setup()
|
||||||
|
end)
|
||||||
|
lazy.load("extra", function()
|
||||||
|
require("mini.extra").setup()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Buffer picker (<leader><leader>) — supports <C-d> to delete buffer
|
||||||
|
vim.keymap.set("n", "<leader><leader>", function()
|
||||||
|
M.load_pick()
|
||||||
|
local MiniPick = require("mini.pick")
|
||||||
|
|
||||||
|
local delete_buf = function()
|
||||||
|
local matches = MiniPick.get_picker_matches()
|
||||||
|
local item = matches and matches.current
|
||||||
|
if not item or not item.bufnr then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local bufnr = item.bufnr
|
||||||
|
|
||||||
|
pcall(vim.api.nvim_buf_delete, bufnr, { force = true })
|
||||||
|
|
||||||
|
if MiniPick.is_picker_active() then
|
||||||
|
local items = vim.tbl_filter(function(i)
|
||||||
|
return i.bufnr and vim.api.nvim_buf_is_valid(i.bufnr)
|
||||||
|
end, MiniPick.get_picker_items() or {})
|
||||||
|
MiniPick.set_picker_items(items)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local bufs = vim.tbl_filter(function(b)
|
||||||
|
return vim.bo[b.bufnr].buftype == "" and b.listed == 1
|
||||||
|
end, vim.fn.getbufinfo())
|
||||||
|
table.sort(bufs, function(a, b)
|
||||||
|
return a.lastused > b.lastused
|
||||||
|
end)
|
||||||
|
|
||||||
|
local items = {}
|
||||||
|
for _, info in ipairs(bufs) do
|
||||||
|
local name = info.name ~= "" and vim.fn.fnamemodify(info.name, ":.") or "[No Name]"
|
||||||
|
table.insert(items, {
|
||||||
|
text = name,
|
||||||
|
bufnr = info.bufnr,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
MiniPick.start({
|
||||||
|
source = {
|
||||||
|
name = "Buffers",
|
||||||
|
items = items,
|
||||||
|
show = function(buf_id, items_arr, query)
|
||||||
|
MiniPick.default_show(buf_id, items_arr, query, { show_icons = true })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
mappings = {
|
||||||
|
delete_buffer = { char = "<C-d>", func = delete_buf },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end, { desc = "Buffers" })
|
||||||
|
|
||||||
|
-- Filetype picker (<leader>ft)
|
||||||
|
vim.keymap.set("n", "<leader>ft", function()
|
||||||
|
M.load_pick()
|
||||||
|
local MiniPick = require("mini.pick")
|
||||||
|
local filetypes = vim.fn.getcompletion("", "filetype")
|
||||||
|
MiniPick.start({
|
||||||
|
source = {
|
||||||
|
name = "Filetypes",
|
||||||
|
items = filetypes,
|
||||||
|
choose = function(item)
|
||||||
|
vim.bo.filetype = item
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end, { desc = "Change filetype" })
|
||||||
|
|
||||||
|
return M
|
||||||
Loading…
x
Reference in New Issue
Block a user