update
This commit is contained in:
35 files changed
+1155
-1236
No files matched your search
@@ -1,27 +0,0 @@
|
||||
local dressing = require('dressing')
|
||||
|
||||
dressing.setup({
|
||||
win_options = {
|
||||
winblend = 10,
|
||||
winhighlight = 'Normal:DressingInputNormalFloat,NormalFloat:DressingInputNormalFloat,FloatBorder:DressingInputFloatBorder',
|
||||
},
|
||||
input = {
|
||||
enabled = true,
|
||||
default_prompt = 'Input:',
|
||||
prompt_align = 'left',
|
||||
insert_only = true,
|
||||
start_in_insert = true,
|
||||
border = 'rounded',
|
||||
relative = 'cursor',
|
||||
prefer_width = 40,
|
||||
width = nil,
|
||||
max_width = { 140, 0.9 },
|
||||
min_width = { 20, 0.2 },
|
||||
get_config = nil,
|
||||
},
|
||||
select = {
|
||||
enabled = true,
|
||||
backend = { 'telescope', 'fzf_lua', 'fzf', 'nui', 'builtin' },
|
||||
trim_prompt = true,
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,63 @@
|
||||
local gitsigns = require('gitsigns')
|
||||
local icons = require('lib.icons')
|
||||
|
||||
gitsigns.setup({
|
||||
signs = {
|
||||
add = { text = icons.ui.SeparatorLight },
|
||||
change = { text = icons.ui.SeparatorLight },
|
||||
delete = { text = icons.ui.SeparatorLight },
|
||||
topdelete = { text = icons.ui.Topline },
|
||||
changedelete = { text = icons.ui.SeparatorLight },
|
||||
untracked = { text = icons.ui.SeparatorDashed },
|
||||
},
|
||||
signcolumn = true,
|
||||
numhl = false,
|
||||
linehl = false,
|
||||
word_diff = false,
|
||||
watch_gitdir = { interval = 1000, follow_files = true },
|
||||
attach_to_untracked = true,
|
||||
current_line_blame = false,
|
||||
current_line_blame_opts = {
|
||||
virt_text = true,
|
||||
virt_text_pos = 'eol',
|
||||
delay = 0,
|
||||
ignore_whitespace = false,
|
||||
},
|
||||
current_line_blame_formatter = '<author>, <author_time:%Y-%m-%d> - <summary>',
|
||||
sign_priority = 6,
|
||||
update_debounce = 100,
|
||||
status_formatter = nil,
|
||||
max_file_length = 40000,
|
||||
preview_config = { border = 'rounded', style = 'minimal', relative = 'cursor', row = 0, col = 1 },
|
||||
on_attach = function(bufnr)
|
||||
local gs = package.loaded.gitsigns
|
||||
|
||||
local function map(mode, l, r, opts)
|
||||
opts = opts or {}
|
||||
opts.buffer = bufnr
|
||||
vim.keymap.set(mode, l, r, opts)
|
||||
end
|
||||
|
||||
map('n', ']e', function()
|
||||
if vim.wo.diff then
|
||||
return ']e'
|
||||
end
|
||||
vim.schedule(function()
|
||||
gs.next_hunk()
|
||||
end)
|
||||
return '<Ignore>'
|
||||
end, { expr = true, desc = 'Next Change' })
|
||||
|
||||
map('n', '[e', function()
|
||||
if vim.wo.diff then
|
||||
return '[e'
|
||||
end
|
||||
vim.schedule(function()
|
||||
gs.prev_hunk()
|
||||
end)
|
||||
return '<Ignore>'
|
||||
end, { expr = true, desc = 'Prev Change' })
|
||||
|
||||
map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<cr>')
|
||||
end,
|
||||
})
|
||||
+17
-18
@@ -2,7 +2,7 @@ local lualine = require('lualine')
|
||||
local icons = require('lib.icons')
|
||||
|
||||
local colors = {
|
||||
bg = '#202328',
|
||||
bg = '#000000',
|
||||
fg = '#bbc2cf',
|
||||
yellow = '#ECBE7B',
|
||||
cyan = '#008080',
|
||||
@@ -57,6 +57,7 @@ local conditions = {
|
||||
return gitdir and #gitdir > 0 and #gitdir < #filepath
|
||||
end,
|
||||
}
|
||||
|
||||
local searchcount = { 'searchcount', color = { fg = colors.fg, gui = 'bold' } }
|
||||
local selectioncount = { 'selectioncount', color = { fg = colors.fg, gui = 'bold' } }
|
||||
local progress = { 'progress', color = { fg = colors.fg, gui = 'bold' } }
|
||||
@@ -75,11 +76,16 @@ local buffers = {
|
||||
mode = 2,
|
||||
cond = conditions.buffer_not_scratch,
|
||||
filetype_names = {
|
||||
NvimTree = icons.documents.OpenFolder .. 'Files',
|
||||
TelescopePrompt = icons.ui.Telescope .. 'Telescope',
|
||||
Avante = icons.ui.Copilot .. 'Avante',
|
||||
AvanteInput = icons.ui.Pencil .. 'Avante',
|
||||
AvanteSelectedFiles = icons.documents.File .. 'Avante',
|
||||
dashboard = icons.ui.Dashboard .. 'Dashboard',
|
||||
lazy = icons.ui.Sleep .. 'Lazy',
|
||||
mason = icons.ui.Package .. 'Mason',
|
||||
NvimTree = icons.documents.OpenFolder .. 'Files',
|
||||
minifiles = icons.documents.OpenFolder .. 'Files',
|
||||
snacks_picker_input = icons.ui.Telescope .. 'Picker',
|
||||
spectre_panel = icons.ui.Search .. 'Spectre',
|
||||
},
|
||||
use_mode_colors = true,
|
||||
@@ -125,13 +131,13 @@ local diagnostics = {
|
||||
local lsp = {
|
||||
function()
|
||||
local msg = 'No LSP'
|
||||
local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype')
|
||||
local clients = vim.lsp.get_active_clients()
|
||||
local buf_ft = vim.api.nvim_get_option_value('filetype', { buf = 0 })
|
||||
local clients = vim.lsp.get_clients()
|
||||
if next(clients) == nil then
|
||||
return msg
|
||||
end
|
||||
for _, client in ipairs(clients) do
|
||||
local filetypes = client.config.filetypes
|
||||
local filetypes = client.config and client.config.filetypes or nil
|
||||
if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then
|
||||
return client.name
|
||||
end
|
||||
@@ -149,16 +155,6 @@ local encoding = {
|
||||
color = { fg = colors.green, gui = 'bold' },
|
||||
}
|
||||
|
||||
local separator = {
|
||||
function()
|
||||
return icons.ui.Separator
|
||||
end,
|
||||
color = function()
|
||||
return { fg = mode_color[vim.fn.mode()] }
|
||||
end,
|
||||
padding = { left = 0, right = 0 },
|
||||
}
|
||||
|
||||
local function mode(icon)
|
||||
icon = icon or icons.ui.Neovim
|
||||
return {
|
||||
@@ -172,11 +168,14 @@ local function mode(icon)
|
||||
}
|
||||
end
|
||||
|
||||
local custom_onedark = require('lualine.themes.onedark')
|
||||
custom_onedark.normal.c.bg = colors.bg
|
||||
|
||||
lualine.setup({
|
||||
options = {
|
||||
component_separators = '',
|
||||
-- section_separators = '',
|
||||
theme = 'onedark',
|
||||
theme = custom_onedark,
|
||||
disabled_filetypes = {
|
||||
'dashboard',
|
||||
},
|
||||
@@ -193,8 +192,8 @@ lualine.setup({
|
||||
sections = {
|
||||
lualine_a = {},
|
||||
lualine_b = {},
|
||||
lualine_c = { separator, mode(icons.ui.Heart), 'location', progress, filename },
|
||||
lualine_x = { diagnostics, lsp, filetype, filesize, fileformat, encoding, separator },
|
||||
lualine_c = { mode(icons.ui.Heart), 'location', progress, filename },
|
||||
lualine_x = { diagnostics, lsp, filetype, filesize, fileformat, encoding },
|
||||
lualine_y = {},
|
||||
lualine_z = {},
|
||||
},
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
local markit = require('markit')
|
||||
local icons = require('lib.icons')
|
||||
|
||||
markit.setup({
|
||||
default_mappings = true,
|
||||
builtin_marks = { '.', '<', '>', '^' },
|
||||
cyclic = true,
|
||||
force_write_shada = false,
|
||||
sign_priority = { lower = 10, upper = 15, builtin = 8, bookmark = 20 },
|
||||
excluded_filetypes = {},
|
||||
excluded_buftypes = { 'nofile' },
|
||||
-- supports up to 10 bookmark groups
|
||||
bookmark_1 = {
|
||||
sign = icons.ui.Flag,
|
||||
virt_text = 'flag',
|
||||
annotate = false,
|
||||
},
|
||||
bookmark_2 = {
|
||||
sign = icons.ui.Eye,
|
||||
virt_text = 'watch',
|
||||
annotate = false,
|
||||
},
|
||||
bookmark_3 = {
|
||||
sign = icons.ui.Star,
|
||||
virt_text = 'star',
|
||||
annotate = false,
|
||||
},
|
||||
bookmark_4 = {
|
||||
sign = icons.ui.Bug,
|
||||
virt_text = 'bug',
|
||||
annotate = false,
|
||||
},
|
||||
mappings = {
|
||||
set = 'M',
|
||||
toggle_mark = 'm',
|
||||
},
|
||||
})
|
||||
@@ -180,6 +180,7 @@ Snacks.setup({
|
||||
git_status = { layout = files_layout() },
|
||||
help = { layout = { preset = 'ivy_split' } },
|
||||
man = { layout = { preset = 'ivy_split' } },
|
||||
notifications = { layout = palette_layout() },
|
||||
projects = { layout = files_layout(0.8) },
|
||||
recent = { layout = files_layout() },
|
||||
search_history = { layout = palette_layout() },
|
||||
@@ -273,7 +274,7 @@ Snacks.setup({
|
||||
lua = {
|
||||
keys = {
|
||||
['source'] = {
|
||||
'<cr>',
|
||||
'<leader>cr',
|
||||
function(self)
|
||||
local name = 'scratch.' .. vim.fn.fnamemodify(vim.api.nvim_buf_get_name(self.buf), ':e')
|
||||
Snacks.debug.run({ buf = self.buf, name = name })
|
||||
@@ -281,14 +282,6 @@ Snacks.setup({
|
||||
desc = 'Source buffer',
|
||||
mode = { 'n', 'x' },
|
||||
},
|
||||
['execute'] = {
|
||||
'e',
|
||||
function(_)
|
||||
vim.cmd('%SnipRun')
|
||||
end,
|
||||
desc = 'Execute buffer',
|
||||
mode = { 'n', 'x' },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -0,0 +1,527 @@
|
||||
local which_key = require('which-key')
|
||||
local icons = require('lib.icons')
|
||||
local util = require('lib.util')
|
||||
local prompts = require('lib.prompts')
|
||||
|
||||
local setup = {
|
||||
preset = 'modern',
|
||||
plugins = {
|
||||
marks = true,
|
||||
registers = true,
|
||||
spelling = {
|
||||
enabled = true,
|
||||
suggestions = 30,
|
||||
},
|
||||
presets = {
|
||||
operators = true,
|
||||
motions = true,
|
||||
text_objects = true,
|
||||
windows = true,
|
||||
nav = true,
|
||||
z = true,
|
||||
g = true,
|
||||
},
|
||||
},
|
||||
icons = {
|
||||
breadcrumb = icons.ui.ArrowOpen,
|
||||
separator = icons.ui.Arrow,
|
||||
group = '',
|
||||
keys = {
|
||||
Space = icons.ui.Rocket,
|
||||
},
|
||||
rules = false, -- enable auto icon rules
|
||||
},
|
||||
win = {
|
||||
no_overlap = true,
|
||||
border = 'rounded',
|
||||
width = 0.8,
|
||||
height = { min = 5, max = 25 },
|
||||
padding = { 1, 2 },
|
||||
title = true,
|
||||
title_pos = 'center',
|
||||
zindex = 1000,
|
||||
wo = {
|
||||
winblend = 10,
|
||||
},
|
||||
},
|
||||
layout = {
|
||||
width = { min = 20 },
|
||||
spacing = 6,
|
||||
align = 'center',
|
||||
},
|
||||
show_help = false,
|
||||
show_keys = true,
|
||||
triggers = {
|
||||
{ '<auto>', mode = 'nvisoct' },
|
||||
{ '<leader>', mode = { 'n', 'v' } },
|
||||
},
|
||||
}
|
||||
|
||||
local normal_mappings = {
|
||||
mode = 'n',
|
||||
{ '<leader>x', ':x<cr>', desc = ' Save and Quit' },
|
||||
|
||||
{ '<leader>a', group = ' AI' },
|
||||
{ '<leader>aC', ':AvanteClear<cr>', desc = 'avante: clear' },
|
||||
{ '<leader>am', ':MCPHub<cr>', desc = 'MCPHub' },
|
||||
{ '<leader>an', ':AvanteChatNew<cr>', desc = 'avante: new' },
|
||||
{ '<leader>ap', group = 'Insert Prompt' },
|
||||
{ '<leader>apd', prompts.add_prompt('docs'), desc = 'Docs' },
|
||||
{ '<leader>ape', prompts.add_prompt('explain'), desc = 'Explain' },
|
||||
{ '<leader>apf', prompts.add_prompt('fix'), desc = 'Fix' },
|
||||
{ '<leader>apg', prompts.add_prompt('commit'), desc = 'Commit' },
|
||||
{ '<leader>apo', prompts.add_prompt('optimize'), desc = 'Optimize' },
|
||||
{ '<leader>apr', prompts.add_prompt('review'), desc = 'Review' },
|
||||
{ '<leader>apt', prompts.add_prompt('tests'), desc = 'Tests' },
|
||||
|
||||
{ '<leader>c', group = ' Code' },
|
||||
{ '<leader>cF', ':retab<cr>', desc = 'Fix Tabs' },
|
||||
{ '<leader>cP', ':CccConvert<cr>', desc = 'Convert Color' },
|
||||
{ '<leader>cR', ':ReloadConfig<cr>', desc = 'Reload Configs' },
|
||||
{ '<leader>cc', ':CccHighlighterToggle<cr>', desc = 'Highlight Colors' },
|
||||
{ '<leader>cd', ':RootDir<cr>', desc = 'Root Directory' },
|
||||
{ '<leader>ce', ':%SnipRun<cr>', desc = 'Execute File' },
|
||||
{ '<leader>cf', ':lua vim.lsp.buf.format({async = true})<cr>', desc = 'Format File' },
|
||||
{ '<leader>cl', '::g/^\\s*$/d<cr>', desc = 'Clean Empty Lines' },
|
||||
{ '<leader>cm', ':MarkdownPreviewToggle<cr>', desc = 'Markdown Preview' },
|
||||
{ '<leader>co', ':Dashboard<cr>', desc = 'Dashboard' },
|
||||
{ '<leader>cp', ':CccPick<cr>', desc = 'Pick Color' },
|
||||
{ '<leader>cs', ':source %<cr>', desc = 'Source File' },
|
||||
|
||||
{ '<leader>C', group = ' Comment' },
|
||||
{ '<leader>Cb', '<cmd>CBccbox<CR>', desc = 'Comment Box' },
|
||||
{ '<leader>Ct', '<cmd>CBllline<CR>', desc = 'Tiled line' },
|
||||
{ '<leader>Cl', '<cmd>CBline<CR>', desc = 'Line' },
|
||||
{ '<leader>Cm', '<cmd>CBllbox14<CR>', desc = 'Marked' },
|
||||
{ '<leader>Cc', '<cmd>CBcatalog<CR>', desc = 'Catalog' },
|
||||
{ '<leader>Cd', '<cmd>CBd<CR>', desc = 'Delete Comment Style' },
|
||||
|
||||
{ '<leader>e', group = ' Edit' },
|
||||
{ '<leader>ea', ':b#<cr>', desc = 'Alternate File' },
|
||||
{ '<leader>ec', group = 'Edit Configs' },
|
||||
{ '<leader>ecg', ':e ~/.gitconfig<cr>', desc = 'Git Config' },
|
||||
{ '<leader>eck', ':e ~/.config/kitty/kitty.conf<cr>', desc = 'Kitty Config' },
|
||||
{ '<leader>ecn', ':e $MYVIMRC<cr>', desc = 'Neovim Init' },
|
||||
{ '<leader>ecp', ':e ~/.config/nvim/lua/plugins/list.lua<cr>', desc = 'Plugin List' },
|
||||
{ '<leader>ect', ':e ~/.config/tmux/tmux.conf<cr>', desc = 'Tmux Config' },
|
||||
{ '<leader>eE', ':lua Snacks.explorer()<cr>', desc = 'File Explorer' },
|
||||
{ '<leader>et', ':lua MiniFiles.open()<cr>', desc = 'Explore Tree' },
|
||||
{ '<leader>ef', 'gf', desc = 'File Under Cursor' },
|
||||
{ '<leader>em', ':e README.md<cr>', desc = 'Readme' },
|
||||
{ '<leader>en', ':enew<cr>', desc = 'New File' },
|
||||
|
||||
{ '<leader>f', group = ' Find' },
|
||||
{ '<leader>fx', ':%bd|e#|bd#<cr>', desc = 'Close except current' },
|
||||
|
||||
{ '<leader>g', group = ' Git' },
|
||||
{ '<leader>gA', ':Gitsigns stage_buffer<cr>', desc = 'Stage Buffer' },
|
||||
{ '<leader>gC', ':CoAuthor<cr>', desc = 'Co-Authors' },
|
||||
{ '<leader>gP', ':Git push<cr>', desc = 'Push' },
|
||||
{ '<leader>gR', ':Gitsigns reset_buffer<cr>', desc = 'Reset Buffer' },
|
||||
{ '<leader>ga', ':Gitsigns stage_hunk<cr>', desc = 'Stage Hunk' },
|
||||
{ '<leader>gb', ":lua require('gitsigns').blame_line({full = true})<cr>", desc = 'Blame' },
|
||||
{ '<leader>gc', ':Git commit<cr>', desc = 'Commit Staged' },
|
||||
{ '<leader>gB', ":lua require('snacks').git.blame_line()<cr>", desc = 'Detailed Blame' },
|
||||
{ '<leader>gd', ':Gitsigns diffthis HEAD<cr>', desc = 'Git Diff' },
|
||||
{ '<leader>gF', ':Git<cr>', desc = 'Fugitive Panel' },
|
||||
{ '<leader>gg', ':lua require("snacks").lazygit()<cr>', desc = 'Lazygit' },
|
||||
{ '<leader>gi', ':Gitsigns preview_hunk<cr>', desc = 'Hunk Info' },
|
||||
{ '<leader>gj', ':Gitsigns next_hunk<cr>', desc = 'Next Hunk' },
|
||||
{ '<leader>gk', ':Gitsigns prev_hunk<cr>', desc = 'Prev Hunk' },
|
||||
{ '<leader>go', group = 'Octohub' },
|
||||
{ '<leader>gp', ':Git pull<cr>', desc = 'Pull' },
|
||||
{ '<leader>gr', ':Gitsigns reset_hunk<cr>', desc = 'Reset Hunk' },
|
||||
{ '<leader>gt', group = 'Toggle' },
|
||||
{ '<leader>gtb', ':Gitsigns toggle_current_line_blame<cr>', desc = 'Blame' },
|
||||
{ '<leader>gtd', ':Gitsigns toggle_deleted<cr>', desc = 'Deleted' },
|
||||
{ '<leader>gtl', ':Gitsigns toggle_linehl<cr>', desc = 'Line HL' },
|
||||
{ '<leader>gtn', ':Gitsigns toggle_numhl<cr>', desc = 'Number HL' },
|
||||
{ '<leader>gts', ':Gitsigns toggle_signs<cr>', desc = 'Signs' },
|
||||
{ '<leader>gtw', ':Gitsigns toggle_word_diff<cr>', desc = 'Word Diff' },
|
||||
{ '<leader>gu', ':Gitsigns undo_stage_hunk<cr>', desc = 'Undo Stage Hunk' },
|
||||
{ '<leader>gv', ':Gitsigns select_hunk<cr>', desc = 'Select Hunk' },
|
||||
{ '<leader>gw', ':lua require("snacks").gitbrowse()<cr>', desc = 'Git Browse' },
|
||||
|
||||
{ '<leader>i', group = ' Insert' },
|
||||
{ '<leader>id', ":put =strftime('## %a, %d %b, %Y, %r')<cr>", desc = 'Date' },
|
||||
{ '<leader>if', ":put =expand('%:t')<cr>", desc = 'File Name' },
|
||||
{ '<leader>in', ':Nerdy<cr>', desc = 'Nerd Glyphs' },
|
||||
{ '<leader>ip', ':put %<cr>', desc = 'Relative Path' },
|
||||
{ '<leader>iP', ':put %:p<cr>', desc = 'Absolute Path' },
|
||||
{ '<leader>it', ":put =strftime('## %r')<cr>", desc = 'Time' },
|
||||
|
||||
{ '<leader>j', group = ' Jump' },
|
||||
{ '<leader>jc', '*', desc = 'Word' },
|
||||
{ '<leader>jd', ':FlashDiagnostics<cr>', desc = 'Diagnostics' },
|
||||
{ '<leader>jh', '<C-o>', desc = 'Backward' },
|
||||
{ '<leader>jj', ":lua require('flash').remote()<cr>", desc = 'Remote' },
|
||||
{ '<leader>jk', ":lua require('flash').treesitter()<cr>", desc = 'Treesitter' },
|
||||
{ '<leader>jl', '<C-i>', desc = 'Forward' },
|
||||
{ '<leader>jp', ":lua require('flash').jump({continue = true})<cr>", desc = 'Previous Jump' },
|
||||
{ '<leader>js', ":lua require('flash').jump()<cr>", desc = 'Search' },
|
||||
{ '<leader>jt', ":lua require('flash').treesitter_search()<cr>", desc = 'Remote Treesitter' },
|
||||
{
|
||||
'<leader>jn',
|
||||
":lua require('flash').jump({search = { forward = true, wrap = false, multi_window = false },})<cr>",
|
||||
desc = 'Search Forward',
|
||||
},
|
||||
{
|
||||
'<leader>jN',
|
||||
":lua require('flash').jump({search = { forward = false, wrap = false, multi_window = false },})<cr>",
|
||||
desc = 'Search Backward',
|
||||
},
|
||||
{
|
||||
'<leader>jw',
|
||||
':lua require("flash").jump({ pattern = vim.fn.expand("<cword>")})<cr>',
|
||||
desc = 'Current Word',
|
||||
},
|
||||
|
||||
{ '<leader>l', group = ' LSP' },
|
||||
{ '<leader>la', ':Lspsaga code_action<cr>', desc = 'Code Action' },
|
||||
{ '<leader>ld', ':Lspsaga goto_definition<cr>', desc = 'Goto Definition' },
|
||||
{ '<leader>lf', ':Lspsaga finder<cr>', desc = 'Finder' },
|
||||
{ '<leader>lh', ':Lspsaga hover_doc<cr>', desc = 'Hover' },
|
||||
{ '<leader>lI', ':LspInfo<cr>', desc = 'LSP Info' },
|
||||
{ '<leader>lj', ':Lspsaga diagnostic_jump_next<cr>', desc = 'Next Diagnostic' },
|
||||
{ '<leader>lk', ':Lspsaga diagnostic_jump_prev<cr>', desc = 'Prev Diagnostic' },
|
||||
{ '<leader>lo', ':Lspsaga outline<cr>', desc = 'Outline' },
|
||||
{ '<leader>lp', ':Lspsaga peek_definition<cr>', desc = 'Peek Definition' },
|
||||
{ '<leader>lq', ':LspStop<cr>', desc = 'Stop LSP' },
|
||||
{ '<leader>lQ', ':LspRestart<cr>', desc = 'Restart LSP' },
|
||||
{ '<leader>lr', ':Lspsaga rename<cr>', desc = 'Rename' },
|
||||
{ '<leader>lR', ':Lspsaga project_replace<cr>', desc = 'Replace' },
|
||||
{ '<leader>lt', ':Lspsaga goto_type_definition<cr>', desc = 'Goto Type Definition' },
|
||||
{ '<leader>lT', ':Lspsaga peek_type_definition<cr>', desc = 'Peek Type Definition' },
|
||||
|
||||
{ '<leader>m', group = ' Marks' },
|
||||
{
|
||||
'<leader>mb',
|
||||
":lua require('telescope').extensions.markit.bookmarks_list_all()<cr>",
|
||||
desc = 'Bookmarks',
|
||||
},
|
||||
{
|
||||
'<leader>mB',
|
||||
":lua require('telescope').extensions.markit.bookmarks_list_all({project_only = true})<cr>",
|
||||
desc = 'Bookmarks In Project',
|
||||
},
|
||||
{ '<leader>md', ":lua require('markit').delete_line()<cr>", desc = 'Delete Marks In Line' },
|
||||
{ '<leader>mD', ":lua require('markit').delete_buf()<cr>", desc = 'Delete Marks In Buffer' },
|
||||
{ '<leader>mg', group = 'Group Bookmarks' },
|
||||
{ '<leader>mG', group = 'Group Bookmarks In Project' },
|
||||
{ '<leader>mh', ":lua require('markit').prev_bookmark()<cr>", desc = 'Previous Bookmark' },
|
||||
{ '<leader>mj', ":lua require('markit').next()<cr>", desc = 'Next' },
|
||||
{ '<leader>mk', ":lua require('markit').prev()<cr>", desc = 'Previous' },
|
||||
{ '<leader>ml', ":lua require('markit').next_bookmark()<cr>", desc = 'Next Bookmark' },
|
||||
{ '<leader>mn', group = 'Next Bookmark In Group' },
|
||||
{ '<leader>mp', group = 'Previous Bookmark In Group' },
|
||||
{ '<leader>mP', ":lua require('markit').preview()<cr>", desc = 'Preview' },
|
||||
{ '<leader>ms', ":lua require('markit').set_next()<cr>", desc = 'Set Next' },
|
||||
{ '<leader>mt', ":lua require('markit').toggle()<cr>", desc = 'Toggle' },
|
||||
{ '<leader>mx', ":lua require('markit').delete_bookmark()<cr>", desc = 'Delete Bookmark' },
|
||||
|
||||
|
||||
{ '<leader>o', group = ' Options' },
|
||||
{ '<leader>oi', 'vim.show_pos', desc = 'Inspect Position' },
|
||||
{ '<leader>oN', ':lua Snacks.notifier.show_history()<cr>', desc = 'Notification History' },
|
||||
{ '<leader>or', ':set relativenumber!<cr>', desc = 'Relative Numbers' },
|
||||
|
||||
{ '<leader>p', group = ' Packages' },
|
||||
{ '<leader>pc', ':Lazy check<cr>', desc = 'Check' },
|
||||
{ '<leader>pd', ':Lazy debug<cr>', desc = 'Debug' },
|
||||
{ '<leader>pe', ':lua require("snacks").profiler.scratch()<cr>', desc = 'Profiler Scratch' },
|
||||
{ '<leader>pf', ':lua require("snacks").profiler.pick()<cr>', desc = 'Profiler Pick' },
|
||||
{ '<leader>pi', ':Lazy install<cr>', desc = 'Install' },
|
||||
{ '<leader>pl', ':Lazy log<cr>', desc = 'Log' },
|
||||
{ '<leader>pm', ':Mason<cr>', desc = 'Mason' },
|
||||
{ '<leader>pp', ':Lazy<cr>', desc = 'Plugins' },
|
||||
{ '<leader>pP', ':Lazy profile<cr>', desc = 'Profile' },
|
||||
{ '<leader>pr', ':Lazy restore<cr>', desc = 'Restore' },
|
||||
{ '<leader>ps', ':Lazy sync<cr>', desc = 'Sync' },
|
||||
{ '<leader>pt', ':lua require("snacks").profiler.toggle()<cr>', desc = 'Profiler Toggle' },
|
||||
{ '<leader>pu', ':Lazy update<cr>', desc = 'Update' },
|
||||
{ '<leader>px', ':Lazy clean<cr>', desc = 'Clean' },
|
||||
|
||||
{ '<leader>q', group = ' Quit' },
|
||||
{ '<leader>qa', ':qall<cr>', desc = 'Quit All' },
|
||||
{ '<leader>qb', ':bw<cr>', desc = 'Close Buffer' },
|
||||
{ '<leader>qd', ':lua require("snacks").bufdelete()<cr>', desc = 'Delete Buffer' },
|
||||
{ '<leader>qf', ':qall!<cr>', desc = 'Force Quit' },
|
||||
{ '<leader>qo', ':%bdelete|b#|bdelete#<cr>', desc = 'Close Others' },
|
||||
{ '<leader>qq', ':q<cr>', desc = 'Quit' },
|
||||
{ '<leader>qs', '<C-w>c', desc = 'Close Split' },
|
||||
{ '<leader>qw', ':wq<cr>', desc = 'Write and Quit' },
|
||||
|
||||
{ '<leader>r', group = ' Refactor' },
|
||||
{ '<leader>ra', ":lua require('spectre').open()<cr>", desc = 'Replace All' },
|
||||
{ '<leader>rb', ":lua require('spectre').open_file_search()<cr>", desc = 'Replace Buffer' },
|
||||
{ '<leader>rd', '', desc = 'Go To Definition' }, -- treesitter navigation
|
||||
{ '<leader>rh', '', desc = 'List Definition Head' },
|
||||
{ '<leader>rj', '', desc = 'Next Usage' },
|
||||
{ '<leader>rk', '', desc = 'Previous Usage' },
|
||||
{ '<leader>rl', '', desc = 'List Definition' },
|
||||
{ '<leader>rn', '', desc = 'Swap Next' },
|
||||
{ '<leader>rp', '', desc = 'Swap Previous' },
|
||||
{ '<leader>rr', '', desc = 'Smart Rename' },
|
||||
{ '<leader>rs', ':%s/\\<<C-r><C-w>\\>/<C-r><C-w>/gI<Left><Left><Left>', desc = 'Replace Word Buffer' },
|
||||
{ '<leader>rw', ":lua require('spectre').open_visual({select_word=true})<cr>", desc = 'Replace Word Everywhere' },
|
||||
|
||||
{ '<leader>s', group = ' Split' },
|
||||
{ '<leader>s+', ':resize +10<cr>', desc = 'Increase window height' },
|
||||
{ '<leader>s-', ':vertical resize -20<cr>', desc = 'Decrease window width' },
|
||||
{ '<leader>s/', '<C-w>s', desc = 'Split Below' },
|
||||
{ '<leader>s=', ':vertical resize +20<cr>', desc = 'Increase window width' },
|
||||
{ '<leader>sH', ':vertical resize -10<cr>', desc = 'Decrease window width' },
|
||||
{ '<leader>sJ', ':resize -5<cr>', desc = 'Decrease window height' },
|
||||
{ '<leader>sK', ':resize +5<cr>', desc = 'Increase window height' },
|
||||
{ '<leader>sL', ':vertical resize +10<cr>', desc = 'Increase window width' },
|
||||
{ '<leader>s\\', '<C-w>v', desc = 'Split Right' },
|
||||
{ '<leader>s_', ':resize -10<cr>', desc = 'Decrease window height' },
|
||||
{ '<leader>s`', '<C-w>p', desc = 'Previous Window' },
|
||||
{ '<leader>sa', ':split<cr>', desc = 'Horizontal Split' },
|
||||
{ '<leader>sc', ':tabclose<cr>', desc = 'Close Tab' },
|
||||
{ '<leader>sf', ':tabfirst<cr>', desc = 'First Tab' },
|
||||
{ '<leader>sh', '<C-w>h', desc = 'Move Left' },
|
||||
{ '<leader>sj', '<C-w>j', desc = 'Move Down' },
|
||||
{ '<leader>sk', '<C-w>k', desc = 'Move Up' },
|
||||
{ '<leader>sl', '<C-w>l', desc = 'Move Right' },
|
||||
{ '<leader>sp', ':NavigatorPrevious<cr>', desc = 'Previous Pane' },
|
||||
{ '<leader>sq', '<C-w>c', desc = 'Close Split' },
|
||||
{ '<leader>ss', ':vsplit<cr>', desc = 'Vertical Split' },
|
||||
|
||||
{ '<leader>t', group = ' Terminal' },
|
||||
{ '<leader>t1', '<cmd>1ToggleTerm<cr>', desc = 'Toggle Terminal' },
|
||||
{ '<leader>t2', '<cmd>2ToggleTerm<cr>', desc = 'Toggle Terminal' },
|
||||
{ '<leader>th', '<cmd>Sterm<cr>', desc = 'Horizontal Terminal' },
|
||||
{ '<leader>tv', '<cmd>Vterm<cr>', desc = 'Vertical Terminal' },
|
||||
{ '<leader>tc', '<Cmd>close<CR>', desc = 'Hide Terminal' },
|
||||
|
||||
{ '<leader>w', group = ' Writing' },
|
||||
{ '<leader>wc', ':set spell!<cr>', desc = 'Spellcheck' },
|
||||
{ '<leader>wd', ':lua require("snacks").dim.enable()<cr>', desc = 'Dim On' },
|
||||
{ '<leader>wD', ':lua require("snacks").dim.disable()<cr>', desc = 'Dim Off' },
|
||||
{ '<leader>wf', ":lua require'utils'.sudo_write()<cr>", desc = 'Force Write' },
|
||||
{ '<leader>wj', ']s', desc = 'Next Misspell' },
|
||||
{ '<leader>wk', '[s', desc = 'Prev Misspell' },
|
||||
{ '<leader>wn', ':WriteNoFormat<cr>', desc = 'Write Without Formatting' },
|
||||
{ '<leader>wq', ':wq<cr>', desc = 'Write and Quit' },
|
||||
{ '<leader>ww', ':w<cr>', desc = 'Write' },
|
||||
{ '<leader>wz', ':lua require("snacks").zen.zen()<cr>', desc = 'Zen' },
|
||||
{ '<leader>wZ', ':lua require("snacks").zen.zoom()<cr>', desc = 'Zoom' },
|
||||
|
||||
{ '<leader>y', group = ' Yank' },
|
||||
{ '<leader>yL', ':CopyAbsolutePathWithLine<cr>', desc = 'Absolute Path with Line' },
|
||||
{ '<leader>yP', ':CopyAbsolutePath<cr>', desc = 'Absolute Path' },
|
||||
{ '<leader>ya', ':%y+<cr>', desc = 'Copy Whole File' },
|
||||
{ '<leader>yf', ':CopyFileName<cr>', desc = 'File Name' },
|
||||
{ '<leader>yg', ':lua require"gitlinker".get_buf_range_url()<cr>', desc = 'Copy Git URL' },
|
||||
{ '<leader>yl', ':CopyRelativePathWithLine<cr>', desc = 'Relative Path with Line' },
|
||||
{ '<leader>yp', ':CopyRelativePath<cr>', desc = 'Relative Path' },
|
||||
}
|
||||
|
||||
-- Numerical mappings
|
||||
for i = 1, 9 do
|
||||
table.insert(normal_mappings, {
|
||||
string.format('<leader>n%d', i),
|
||||
string.format(':Tdo %d<cr>', i),
|
||||
desc = string.format('Todo %d Days In Future', i),
|
||||
})
|
||||
|
||||
table.insert(normal_mappings, {
|
||||
string.format('<leader>np%d', i),
|
||||
string.format(':Tdo -%d<cr>', i),
|
||||
desc = string.format('Todo %d Days From Past', i),
|
||||
})
|
||||
|
||||
table.insert(normal_mappings, {
|
||||
string.format('<leader>f%d', i),
|
||||
string.format(':LualineBuffersJump%d<cr>', i),
|
||||
desc = string.format('File %d', i),
|
||||
})
|
||||
|
||||
table.insert(normal_mappings, {
|
||||
string.format('<leader>m%d', i),
|
||||
string.format(':lua require("markit").toggle_bookmark%d()<cr>', i),
|
||||
desc = string.format('Toggle Group %d Bookmark', i),
|
||||
})
|
||||
|
||||
table.insert(normal_mappings, {
|
||||
string.format('<leader>mp%d', i),
|
||||
string.format(':lua require("markit").prev_bookmark%d()<cr>', i),
|
||||
desc = string.format('Previous Group %d Bookmarks', i),
|
||||
})
|
||||
|
||||
table.insert(normal_mappings, {
|
||||
string.format('<leader>mn%d', i),
|
||||
string.format(':lua require("markit").next_bookmark%d()<cr>', i),
|
||||
desc = string.format('Next Group %d Bookmarks', i),
|
||||
})
|
||||
|
||||
table.insert(normal_mappings, {
|
||||
string.format('<leader>mg%d', i),
|
||||
string.format(':lua require("telescope").extensions.markit.bookmarks_list_all({group = %d})<cr>', i),
|
||||
desc = string.format('Group %d Bookmarks', i),
|
||||
})
|
||||
|
||||
table.insert(normal_mappings, {
|
||||
string.format('<leader>mG%d', i),
|
||||
string.format(
|
||||
':lua require("telescope").extensions.markit.bookmarks_list_all({group = %d, project_only = true})<cr>',
|
||||
i
|
||||
),
|
||||
desc = string.format('Group %d Bookmarks In Project', i),
|
||||
})
|
||||
end
|
||||
|
||||
local visual_mappings = {
|
||||
mode = 'v',
|
||||
{ '<leader>a', group = ' AI' },
|
||||
|
||||
{ '<leader>c', group = ' Code' },
|
||||
{ '<leader>ce', "<esc>:'<,'>SnipRun<cr>", desc = 'Execute Selection' },
|
||||
{ '<leader>cS', ':sort!<cr>', desc = 'Sort Desc' },
|
||||
{ '<leader>ci', ':sort i<cr>', desc = 'Sort Case Insensitive' },
|
||||
{ '<leader>cs', ':sort<cr>', desc = 'Sort Asc' },
|
||||
{ '<leader>cu', ':!uniq<cr>', desc = 'Unique' },
|
||||
{ '<leader>cx', ':lua<cr>', desc = 'Execute Lua' },
|
||||
|
||||
{ '<leader>C', group = ' Comment' },
|
||||
{ '<leader>Cb', '<cmd>CBccbox<CR>', desc = 'Comment Box' },
|
||||
{ '<leader>Ct', '<cmd>CBllline<CR>', desc = 'Tiled line' },
|
||||
{ '<leader>Cl', '<cmd>CBline<CR>', desc = 'Line' },
|
||||
{ '<leader>Cm', '<cmd>CBllbox14<CR>', desc = 'Marked' },
|
||||
{ '<leader>Cc', '<cmd>CBcatalog<CR>', desc = 'Catalog' },
|
||||
{ '<leader>Cd', '<cmd>CBd<CR>', desc = 'Delete Comment Style' },
|
||||
|
||||
{ '<leader>g', group = ' Git' },
|
||||
{ '<leader>ga', ":'<,'>Gitsigns stage_hunk<cr>", desc = 'Stage Hunk' },
|
||||
{ '<leader>gr', ":'<,'>Gitsigns reset_hunk<cr>", desc = 'Reset Hunk' },
|
||||
{ '<leader>gu', ":'<,'>Gitsigns undo_stage_hunk<cr>", desc = 'Undo Stage Hunk' },
|
||||
|
||||
{ '<leader>j', group = ' Jump' },
|
||||
{
|
||||
'<leader>jN',
|
||||
":lua require('flash').jump({search = { forward = false, wrap = false, multi_window = false },})<cr>",
|
||||
desc = 'Search Backward',
|
||||
},
|
||||
{ '<leader>jd', ':FlashDiagnostics<cr>', desc = 'Diagnostics' },
|
||||
{ '<leader>jj', ":lua require('flash').remote()<cr>", desc = 'Remote' },
|
||||
{ '<leader>jk', ":lua require('flash').treesitter()<cr>", desc = 'Treesitter' },
|
||||
{
|
||||
'<leader>jn',
|
||||
":lua require('flash').jump({search = { forward = true, wrap = false, multi_window = false },})<cr>",
|
||||
desc = 'Search Forward',
|
||||
},
|
||||
{ '<leader>jp', ":lua require('flash').jump({continue = true})<cr>", desc = 'Previous Jump' },
|
||||
{ '<leader>js', ":lua require('flash').jump()<cr>", desc = 'Search' },
|
||||
{ '<leader>jt', ":lua require('flash').treesitter_search()<cr>", desc = 'Remote Treesitter' },
|
||||
{
|
||||
'<leader>jw',
|
||||
':lua require("flash").jump({ pattern = vim.fn.expand("<cword>")})<cr>',
|
||||
desc = 'Current Word',
|
||||
},
|
||||
|
||||
{ '<leader>l', group = ' LSP' },
|
||||
{ '<leader>la', ':<C-U>Lspsaga range_code_action<cr>', desc = 'Code Action' },
|
||||
|
||||
{ '<leader>p', group = ' ScreenShot' },
|
||||
{ '<leader>py', '<cmd>CodeSnap<cr>', mode = 'x', desc = 'Save selected code snapshot into clipboard' },
|
||||
{ '<leader>ps', '<cmd>CodeSnapSave<cr>', mode = 'x', desc = 'Save selected code snapshot in ~/Pictures' },
|
||||
{
|
||||
'<leader>ph',
|
||||
'<cmd>CodeSnapHighlight<cr>',
|
||||
mode = 'x',
|
||||
desc = 'Highlight and snapshot selected code into clipboard',
|
||||
},
|
||||
{ '<leader>pi', '<cmd>CodeSnapASCII<cr>', mode = 'x', desc = 'Save ASCII code snapshot into clipboard' },
|
||||
|
||||
|
||||
|
||||
{ '<leader>y', group = ' Yank' },
|
||||
{ '<leader>yg', ':lua require"gitlinker".get_buf_range_url("v")<cr>', desc = 'Copy Git URL' },
|
||||
}
|
||||
|
||||
local no_leader_mappings = {
|
||||
mode = 'n',
|
||||
{ '<C-Down>', ':resize -10<cr>', desc = 'Decrease window height' },
|
||||
{ '<C-Left>', ':vertical resize -10<cr>', desc = 'Decrease window width' },
|
||||
{ '<C-Right>', ':vertical resize +10<cr>', desc = 'Increase window width' },
|
||||
{ '<C-Up>', ':resize +10<cr>', desc = 'Increase window height' },
|
||||
{ '<C-g>', ':Fterm lazygit<cr>', desc = 'Lazygit' },
|
||||
|
||||
{ '<C-h>', ':NavigatorLeft<cr>', desc = 'Move Left' },
|
||||
{ '<C-j>', ':NavigatorDown<cr>', desc = 'Move Down' },
|
||||
{ '<C-k>', ':NavigatorUp<cr>', desc = 'Move Up' },
|
||||
{ '<C-l>', ':NavigatorRight<cr>', desc = 'Move Right' },
|
||||
{ '<C-\\>', ':NavigatorPrevious<cr>', desc = 'Previous Pane' },
|
||||
|
||||
{ '<S-h>', ':bprevious<cr>', desc = 'Previous Buffer' },
|
||||
{ '<S-l>', ':bnext<cr>', desc = 'Next Buffer' },
|
||||
{ '<Tab>', ':bprevious<cr>', desc = 'Previous Buffer' },
|
||||
{ '<S-Tab>', ':bnext<cr>', desc = 'Next Buffer' },
|
||||
|
||||
{ 'K', ':Lspsaga hover_doc<cr>', desc = 'LSP Hover' },
|
||||
{ 'Q', ':qall!<cr>', desc = 'Force Quit!' },
|
||||
{ 'U', ':redo<cr>', desc = 'Redo' },
|
||||
|
||||
{ '[', group = ' Previous' },
|
||||
{ '[g', ':Gitsigns prev_hunk<cr>', desc = 'Git Hunk' },
|
||||
{ '[o', group = 'Textobjects' },
|
||||
|
||||
{ ']', group = ' Next' },
|
||||
{ ']g', ':Gitsigns next_hunk<cr>', desc = 'Git Hunk' },
|
||||
{ ']o', group = 'Textobjects' },
|
||||
|
||||
{ 'gd', ':Lspsaga goto_definition<cr>', desc = 'Goto Definition' },
|
||||
}
|
||||
|
||||
which_key.setup(setup)
|
||||
which_key.add(normal_mappings)
|
||||
which_key.add(visual_mappings)
|
||||
which_key.add(no_leader_mappings)
|
||||
|
||||
if util.get_user_config('enable_test_runner', false) then
|
||||
local test_runner_bindings = {
|
||||
mode = 'n',
|
||||
{ '<leader>u', group = ' Test' },
|
||||
{ '<leader>uc', ':lua require("neotest").run.run()<cr>', desc = 'Run Current Test' },
|
||||
{ '<leader>uf', ':lua require("neotest").run.run(vim.fn.expand("%"))<cr>', desc = 'Run Test File' },
|
||||
{ '<leader>uo', ':Neotest output-panel<cr>', desc = 'Test Output' },
|
||||
{ '<leader>us', ':Neotest summary<cr>', desc = 'Test Summary' },
|
||||
}
|
||||
which_key.add(test_runner_bindings)
|
||||
end
|
||||
|
||||
if util.get_user_config('enable_db_explorer', false) then
|
||||
local db_explorer_bindings = {
|
||||
mode = 'n',
|
||||
{ '<leader>d', group = ' Database' },
|
||||
{ '<leader>dS', ':lua require("dbee").store("json", "buffer", { extra_arg = 0 })<cr>', desc = 'To JSON' },
|
||||
{ '<leader>db', ':DBToggle<cr>', desc = 'DB Explorer' },
|
||||
{ '<leader>dj', ':lua require("dbee").next()<cr>', desc = 'DB Next' },
|
||||
{ '<leader>dk', ':lua require("dbee").prev()<cr>', desc = 'DB Prev' },
|
||||
{ '<leader>ds', ':lua require("dbee").store("csv", "buffer", { extra_arg = 0 })<cr>', desc = 'To CSV' },
|
||||
{ '<leader>dt', ':lua require("dbee").store("table", "buffer", { extra_arg = 0 })<cr>', desc = 'To Table' },
|
||||
}
|
||||
which_key.add(db_explorer_bindings)
|
||||
end
|
||||
|
||||
if util.get_user_config('enable_debugger', false) then
|
||||
local debugger_bindings = {
|
||||
mode = 'n',
|
||||
{ '<leader>b', group = ' Debug' },
|
||||
{ '<leader>bO', ':DapStepOut<cr>', desc = 'Out' },
|
||||
{ '<leader>bR', ':DapRestartFrame<cr>', desc = 'Restart Frame' },
|
||||
{ '<leader>bb', ':DapToggleBreakpoint<cr>', desc = 'Breakpoint' },
|
||||
{ '<leader>bc', ':DapContinue<cr>', desc = 'Continue' },
|
||||
{ '<leader>bi', ':DapStepInto<cr>', desc = 'Into' },
|
||||
{ '<leader>bl', ":lua require'dap'.run_last()<cr>", desc = 'Last' },
|
||||
{ '<leader>bo', ':DapStepOver<cr>', desc = 'Over' },
|
||||
{ '<leader>br', ':DapToggleRepl<cr>', desc = 'Repl' },
|
||||
{ '<leader>bt', ':DapUIToggle<cr>', desc = 'Debugger' },
|
||||
{ '<leader>bx', ':DapTerminate<cr>', desc = 'Exit' },
|
||||
}
|
||||
which_key.add(debugger_bindings)
|
||||
end
|
||||
|
||||
local user_keybindings = require('lib.util').get_user_config('user_keybindings', {})
|
||||
which_key.add(user_keybindings)
|
||||
Reference in new issue
Block a user