update whichkey config

This commit is contained in:
Hirad 2024-11-29 09:52:40 +03:30
parent 339a3f0747
commit c0f208e325

View file

@ -1,47 +1,20 @@
---@class wk.Opts local status_ok, which_key = pcall(require, "which-key")
local defaults = { if not status_ok then
---@type false | "classic" | "modern" | "helix" return
preset = "classic", end
-- Delay before showing the popup. Can be a number or a function that returns a number.
---@type number | fun(ctx: { keys: string, mode: string, plugin?: string }):number local setup = {
delay = function(ctx)
return ctx.plugin and 0 or 200
end,
---@param mapping wk.Mapping
filter = function(mapping)
-- example to exclude mappings without a description
-- return mapping.desc and mapping.desc ~= ""
return true
end,
--- You can add any mappings here, or use `require('which-key').add()` later
---@type wk.Spec
spec = {},
-- show a warning when issues were detected with your mappings
notify = true,
-- Which-key automatically sets up triggers for your mappings.
-- But you can disable this and setup the triggers manually.
-- Check the docs for more info.
---@type wk.Spec
triggers = {
{ "<auto>", mode = "nxsot" },
},
-- Start hidden and wait for a key to be pressed before showing the popup
-- Only used by enabled xo mapping modes.
---@param ctx { mode: string, operator: string }
defer = function(ctx)
return ctx.mode == "V" or ctx.mode == "<C-V>"
end,
plugins = { plugins = {
marks = true, -- shows a list of your marks on ' and ` marks = true, -- shows a list of your marks on ' and `
registers = true, -- shows your registers on " in NORMAL or <C-r> in INSERT mode registers = true, -- shows your registers on " in NORMAL or <C-r> in INSERT mode
-- the presets plugin, adds help for a bunch of default keybindings in Neovim
-- No actual key bindings are created
spelling = { spelling = {
enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions
suggestions = 20, -- how many suggestions should be shown in the list? suggestions = 20, -- how many suggestions should be shown in the list?
}, },
-- the presets plugin, adds help for a bunch of default keybindings in Neovim
-- No actual key bindings are created
presets = { presets = {
operators = true, -- adds help for operators like d, y, ... operators = false, -- adds help for operators like d, y, ... and registers them for motion / text object completion
motions = true, -- adds help for motions motions = true, -- adds help for motions
text_objects = true, -- help for text objects triggered after entering an operator text_objects = true, -- help for text objects triggered after entering an operator
windows = true, -- default bindings on <c-w> windows = true, -- default bindings on <c-w>
@ -50,123 +23,165 @@ local defaults = {
g = true, -- bindings for prefixed with g g = true, -- bindings for prefixed with g
}, },
}, },
---@type wk.Win.opts -- add operators that will trigger motion and text object completion
win = { -- to enable all native operators, set the preset / operators plugin above
-- don't allow the popup to overlap with the cursor -- operators = { gc = "Comments" },
no_overlap = true, key_labels = {
-- width = 1, -- override the label used to display some keys. It doesn't effect WK in any other way.
-- height = { min = 4, max = 25 }, -- For example:
-- col = 0, -- ["<space>"] = "SPC",
-- row = math.huge, -- ["<cr>"] = "RET",
-- border = "none", -- ["<tab>"] = "TAB",
padding = { 1, 2 }, -- extra window padding [top/bottom, right/left]
title = true,
title_pos = "center",
zindex = 1000,
-- Additional vim.wo and vim.bo options
bo = {},
wo = {
-- winblend = 10, -- value between 0-100 0 for fully opaque and 100 for fully transparent
},
},
layout = {
width = { min = 20 }, -- min and max width of the columns
spacing = 3, -- spacing between columns
},
keys = {
scroll_down = "<c-d>", -- binding to scroll down inside the popup
scroll_up = "<c-u>", -- binding to scroll up inside the popup
},
---@type (string|wk.Sorter)[]
--- Mappings are sorted using configured sorters and natural sort of the keys
--- Available sorters:
--- * local: buffer-local mappings first
--- * order: order of the items (Used by plugins like marks / registers)
--- * group: groups last
--- * alphanum: alpha-numerical first
--- * mod: special modifier keys last
--- * manual: the order the mappings were added
--- * case: lower-case first
sort = { "local", "order", "group", "alphanum", "mod" },
---@type number|fun(node: wk.Node):boolean?
expand = 0, -- expand groups when <= n mappings
-- expand = function(node)
-- return not node.desc -- expand all nodes without a description
-- end,
-- Functions/Lua Patterns for formatting the labels
---@type table<string, ({[1]:string, [2]:string}|fun(str:string):string)[]>
replace = {
key = {
function(key)
return require("which-key.view").format(key)
end,
-- { "<Space>", "SPC" },
},
desc = {
{ "<Plug>%(?(.*)%)?", "%1" },
{ "^%+", "" },
{ "<[cC]md>", "" },
{ "<[cC][rR]>", "" },
{ "<[sS]ilent>", "" },
{ "^lua%s+", "" },
{ "^call%s+", "" },
{ "^:%s*", "" },
},
}, },
icons = { icons = {
breadcrumb = "»", -- symbol used in the command line area that shows your active key combo breadcrumb = "»", -- symbol used in the command line area that shows your active key combo
separator = "", -- symbol used between a key and it's label separator = "", -- symbol used between a key and it's label
group = "+", -- symbol prepended to a group group = "+", -- symbol prepended to a group
ellipsis = "", },
-- set to false to disable all mapping icons, popup_mappings = {
-- both those explicitely added in a mapping scroll_down = "<c-d>", -- binding to scroll down inside the popup
-- and those from rules scroll_up = "<c-u>", -- binding to scroll up inside the popup
mappings = true, },
--- See `lua/which-key/icons.lua` for more details window = {
--- Set to `false` to disable keymap icons from rules border = "rounded", -- none, single, double, shadow
---@type wk.IconRule[]|false position = "bottom", -- bottom, top
rules = {}, margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left]
-- use the highlights from mini.icons padding = { 2, 2, 2, 2 }, -- extra window padding [top, right, bottom, left]
-- When `false`, it will use `WhichKeyIcon` instead winblend = 0,
colors = true, },
-- used by key format layout = {
keys = { height = { min = 4, max = 25 }, -- min and max height of the columns
Up = "", width = { min = 20, max = 50 }, -- min and max width of the columns
Down = "", spacing = 3, -- spacing between columns
Left = "", align = "left", -- align columns left, center or right
Right = "", },
C = "󰘴 ", ignore_missing = true, -- enable this to hide mappings for which you didn't specify a label
M = "󰘵 ", hidden = { "<silent>", "<cmd>", "<Cmd>", "<CR>", "call", "lua", "^:", "^ " }, -- hide mapping boilerplate
D = "󰘳 ", show_help = true, -- show help message on the command line when the popup is visible
S = "󰘶 ", triggers = "auto", -- automatically setup triggers
CR = "󰌑 ", -- triggers = {"<leader>"} -- or specify a list manually
Esc = "󱊷 ", triggers_blacklist = {
ScrollWheelDown = "󱕐 ", -- list of mode / prefixes that should never be hooked by WhichKey
ScrollWheelUp = "󱕑 ", -- this is mostly relevant for key maps that start with a native binding
NL = "󰌑 ", -- most people should not need to change this
BS = "󰁮", i = { "j", "k" },
Space = "󱁐 ", v = { "j", "k" },
Tab = "󰌒 ", },
F1 = "󱊫", }
F2 = "󱊬",
F3 = "󱊭", local opts = {
F4 = "󱊮", mode = "n", -- NORMAL mode
F5 = "󱊯", prefix = "<leader>",
F6 = "󱊰", buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings
F7 = "󱊱", silent = true, -- use `silent` when creating keymaps
F8 = "󱊲", noremap = true, -- use `noremap` when creating keymaps
F9 = "󱊳", nowait = true, -- use `nowait` when creating keymaps
F10 = "󱊴", }
F11 = "󱊵",
F12 = "󱊶", local mappings = {
["a"] = { "<cmd>Alpha<cr>", "Alpha" },
["b"] = {
"<cmd>lua require('telescope.builtin').buffers(require('telescope.themes').get_dropdown{previewer = false})<cr>",
"Buffers",
},
["e"] = { "<cmd>NvimTreeToggle<cr>", "Explorer" },
["w"] = { "<cmd>w!<CR>", "Save" },
["q"] = { "<cmd>q!<CR>", "Quit" },
["c"] = { "<cmd>Bdelete!<CR>", "Close Buffer" },
["h"] = { "<cmd>nohlsearch<CR>", "No Highlight" },
["f"] = {
"<cmd>lua require('telescope.builtin').find_files(require('telescope.themes').get_dropdown{previewer = false})<cr>",
"Find files",
},
["F"] = { "<cmd>Telescope live_grep theme=ivy<cr>", "Find Text" },
["P"] = { "<cmd>lua require('telescope').extensions.projects.projects()<cr>", "Projects" },
p = {
name = "Packer",
c = { "<cmd>PackerCompile<cr>", "Compile" },
i = { "<cmd>PackerInstall<cr>", "Install" },
s = { "<cmd>PackerSync<cr>", "Sync" },
S = { "<cmd>PackerStatus<cr>", "Status" },
u = { "<cmd>PackerUpdate<cr>", "Update" },
},
g = {
name = "Git",
g = { "<cmd>lua _LAZYGIT_TOGGLE()<CR>", "Lazygit" },
j = { "<cmd>lua require 'gitsigns'.next_hunk()<cr>", "Next Hunk" },
k = { "<cmd>lua require 'gitsigns'.prev_hunk()<cr>", "Prev Hunk" },
l = { "<cmd>lua require 'gitsigns'.blame_line()<cr>", "Blame" },
p = { "<cmd>lua require 'gitsigns'.preview_hunk()<cr>", "Preview Hunk" },
r = { "<cmd>lua require 'gitsigns'.reset_hunk()<cr>", "Reset Hunk" },
R = { "<cmd>lua require 'gitsigns'.reset_buffer()<cr>", "Reset Buffer" },
s = { "<cmd>lua require 'gitsigns'.stage_hunk()<cr>", "Stage Hunk" },
u = {
"<cmd>lua require 'gitsigns'.undo_stage_hunk()<cr>",
"Undo Stage Hunk",
},
o = { "<cmd>Telescope git_status<cr>", "Open changed file" },
b = { "<cmd>Telescope git_branches<cr>", "Checkout branch" },
c = { "<cmd>Telescope git_commits<cr>", "Checkout commit" },
d = {
"<cmd>Gitsigns diffthis HEAD<cr>",
"Diff",
}, },
}, },
show_help = true, -- show a help message in the command line for using WhichKey
show_keys = true, -- show the currently pressed key and its label as a message in the command line l = {
-- disable WhichKey for certain buf types and file types. name = "LSP",
disable = { a = { "<cmd>lua vim.lsp.buf.code_action()<cr>", "Code Action" },
ft = {}, d = {
bt = {}, "<cmd>Telescope diagnostics bufnr=0<cr>",
"Document Diagnostics",
},
w = {
"<cmd>Telescope diagnostics<cr>",
"Workspace Diagnostics",
},
f = { "<cmd>lua vim.lsp.buf.format{async=true}<cr>", "Format" },
i = { "<cmd>LspInfo<cr>", "Info" },
I = { "<cmd>LspInstallInfo<cr>", "Installer Info" },
j = {
"<cmd>lua vim.lsp.diagnostic.goto_next()<CR>",
"Next Diagnostic",
},
k = {
"<cmd>lua vim.lsp.diagnostic.goto_prev()<cr>",
"Prev Diagnostic",
},
l = { "<cmd>lua vim.lsp.codelens.run()<cr>", "CodeLens Action" },
q = { "<cmd>lua vim.diagnostic.setloclist()<cr>", "Quickfix" },
r = { "<cmd>lua vim.lsp.buf.rename()<cr>", "Rename" },
s = { "<cmd>Telescope lsp_document_symbols<cr>", "Document Symbols" },
S = {
"<cmd>Telescope lsp_dynamic_workspace_symbols<cr>",
"Workspace Symbols",
},
},
s = {
name = "Search",
b = { "<cmd>Telescope git_branches<cr>", "Checkout branch" },
c = { "<cmd>Telescope colorscheme<cr>", "Colorscheme" },
h = { "<cmd>Telescope help_tags<cr>", "Find Help" },
M = { "<cmd>Telescope man_pages<cr>", "Man Pages" },
r = { "<cmd>Telescope oldfiles<cr>", "Open Recent File" },
R = { "<cmd>Telescope registers<cr>", "Registers" },
k = { "<cmd>Telescope keymaps<cr>", "Keymaps" },
C = { "<cmd>Telescope commands<cr>", "Commands" },
},
t = {
name = "Terminal",
n = { "<cmd>lua _NODE_TOGGLE()<cr>", "Node" },
u = { "<cmd>lua _NCDU_TOGGLE()<cr>", "NCDU" },
t = { "<cmd>lua _HTOP_TOGGLE()<cr>", "Htop" },
p = { "<cmd>lua _PYTHON_TOGGLE()<cr>", "Python" },
f = { "<cmd>ToggleTerm direction=float<cr>", "Float" },
h = { "<cmd>ToggleTerm size=10 direction=horizontal<cr>", "Horizontal" },
v = { "<cmd>ToggleTerm size=80 direction=vertical<cr>", "Vertical" },
}, },
debug = false, -- enable wk.log in the current directory
} }
which_key.setup(setup)
which_key.register(mappings, opts)