mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-26 11:14:08 +00:00
feat(nvim): cleanup, fixes and helpers
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
column_width = 120
|
||||
column_width = 80
|
||||
line_endings = "Unix"
|
||||
indent_type = "Spaces"
|
||||
indent_width = 2
|
||||
|
||||
@@ -7,7 +7,14 @@
|
||||
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
|
||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||
local lazyrepo = 'https://github.com/folke/lazy.nvim.git'
|
||||
local out = vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath }
|
||||
local out = vim.fn.system {
|
||||
'git',
|
||||
'clone',
|
||||
'--filter=blob:none',
|
||||
'--branch=stable',
|
||||
lazyrepo,
|
||||
lazypath,
|
||||
}
|
||||
if vim.v.shell_error ~= 0 then
|
||||
vim.api.nvim_echo({
|
||||
{ 'Failed to clone lazy.nvim:\n', 'ErrorMsg' },
|
||||
@@ -21,7 +28,10 @@ end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
-- ── Add ~/.local/bin to the PATH ────────────────────────────────────
|
||||
vim.fn.setenv('PATH', vim.fn.expand '$HOME/.local/bin' .. ':' .. vim.fn.expand '$PATH')
|
||||
vim.fn.setenv(
|
||||
'PATH',
|
||||
vim.fn.expand '$HOME/.local/bin' .. ':' .. vim.fn.expand '$PATH'
|
||||
)
|
||||
|
||||
require 'options'
|
||||
require 'autogroups'
|
||||
|
||||
@@ -7,24 +7,48 @@ local autocmd = vim.api.nvim_create_autocmd -- Create autocommand
|
||||
|
||||
-- ── Highlight on yank ───────────────────────────────────────────────
|
||||
-- See `:help vim.highlight.on_yank()`
|
||||
local highlight_group = augroup('YankHighlight', { clear = true })
|
||||
autocmd('TextYankPost', {
|
||||
callback = function() vim.highlight.on_yank() end,
|
||||
group = highlight_group,
|
||||
group = augroup('YankHighlight', { clear = true }),
|
||||
pattern = '*',
|
||||
})
|
||||
|
||||
-- ── Windows to close with "q" ───────────────────────────────────────
|
||||
autocmd('FileType', {
|
||||
callback = function() vim.keymap.set('n', '<esc>', ':bd<CR>', { buffer = true, silent = true }) end,
|
||||
group = augroup('close_with_q', { clear = true }),
|
||||
pattern = {
|
||||
'PlenaryTestPopup',
|
||||
'checkhealth',
|
||||
'dbout',
|
||||
'gitsigns.blame',
|
||||
'grug-far',
|
||||
'help',
|
||||
'startuptime',
|
||||
'qf',
|
||||
'lspinfo',
|
||||
'man',
|
||||
'checkhealth',
|
||||
'neotest-output',
|
||||
'neotest-output-panel',
|
||||
'neotest-summary',
|
||||
'notify',
|
||||
'qf',
|
||||
'spectre_panel',
|
||||
'startuptime',
|
||||
'tsplayground',
|
||||
},
|
||||
callback = function(event)
|
||||
vim.bo[event.buf].buflisted = false
|
||||
vim.keymap.set('n', 'q', '<cmd>close<cr>', {
|
||||
buffer = event.buf,
|
||||
silent = true,
|
||||
desc = 'Quit buffer',
|
||||
})
|
||||
end,
|
||||
})
|
||||
|
||||
-- ── make it easier to close man-files when opened inline ────────────
|
||||
autocmd('FileType', {
|
||||
group = augroup('man_unlisted', { clear = true }),
|
||||
pattern = { 'man' },
|
||||
callback = function(event) vim.bo[event.buf].buflisted = false end,
|
||||
})
|
||||
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
|
||||
@@ -32,7 +32,10 @@ vim.opt.showmode = false
|
||||
-- Sync clipboard between OS and Neovim.
|
||||
-- Schedule the setting after `UiEnter` because it can increase startup-time.
|
||||
-- See `:help 'clipboard'`
|
||||
vim.schedule(function() vim.opt.clipboard = 'unnamedplus' end)
|
||||
vim.schedule(function()
|
||||
local c = vim.env.SSH_TTY and '' or 'unnamedplus'
|
||||
vim.opt.clipboard = c
|
||||
end)
|
||||
|
||||
vim.opt.breakindent = true -- Enable break indent
|
||||
vim.opt.smartindent = true -- Insert indents automatically
|
||||
@@ -92,7 +95,8 @@ vim.g.loaded_ruby_provider = 0
|
||||
-- kevinhwang91/nvim-ufo settings
|
||||
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
|
||||
vim.o.foldcolumn = '1' -- '0' is not bad
|
||||
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
|
||||
-- Using ufo provider need a large value, feel free to decrease the value
|
||||
vim.o.foldlevel = 99
|
||||
vim.o.foldlevelstart = 99
|
||||
vim.o.foldenable = true
|
||||
|
||||
@@ -111,7 +115,17 @@ vim.g.noice_ignored_filetypes = {
|
||||
|
||||
-- ── Deal with word wrap ───────────────────────────────────────────────────────
|
||||
local m = vim.api.nvim_set_keymap
|
||||
m('n', 'k', "v:count == 0 ? 'gk' : 'k'", { desc = 'Move up', noremap = true, expr = true })
|
||||
m('n', 'j', "v:count == 0 ? 'gj' : 'j'", { desc = 'Move down', noremap = true, expr = true })
|
||||
m(
|
||||
'n',
|
||||
'k',
|
||||
"v:count == 0 ? 'gk' : 'k'",
|
||||
{ desc = 'Move up', noremap = true, expr = true }
|
||||
)
|
||||
m(
|
||||
'n',
|
||||
'j',
|
||||
"v:count == 0 ? 'gj' : 'j'",
|
||||
{ desc = 'Move down', noremap = true, expr = true }
|
||||
)
|
||||
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
|
||||
@@ -4,9 +4,11 @@ return {
|
||||
{
|
||||
'hrsh7th/nvim-cmp',
|
||||
lazy = false,
|
||||
version = false, -- Use the latest version of the plugin
|
||||
event = 'InsertEnter',
|
||||
dependencies = {
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
|
||||
-- ── LuaSnip Dependencies ────────────────────────────────────────────
|
||||
-- Snippet Engine for Neovim written in Lua.
|
||||
-- https://github.com/L3MON4D3/LuaSnip
|
||||
@@ -14,6 +16,7 @@ return {
|
||||
-- luasnip completion source for nvim-cmp
|
||||
-- https://github.com/saadparwaiz1/cmp_luasnip
|
||||
{ 'saadparwaiz1/cmp_luasnip' },
|
||||
|
||||
-- ── Adds other completion capabilities. ─────────────────────────────
|
||||
-- ── nvim-cmp does not ship with all sources by default.
|
||||
-- ── They are split into multiple repos for maintenance purposes.
|
||||
@@ -23,6 +26,7 @@ return {
|
||||
-- cmp import and use all environment variables from .env.* and system
|
||||
-- https://github.com/SergioRibera/cmp-dotenv
|
||||
{ 'SergioRibera/cmp-dotenv' },
|
||||
|
||||
-- ── Other deps ──────────────────────────────────────────────────────
|
||||
-- vscode-like pictograms for neovim lsp completion items
|
||||
-- https://github.com/onsails/lspkind.nvim
|
||||
@@ -62,9 +66,15 @@ return {
|
||||
require('copilot_cmp').setup()
|
||||
|
||||
local has_words_before = function()
|
||||
if vim.api.nvim_get_option_value('buftype', {}) == 'prompt' then return false end
|
||||
if vim.api.nvim_get_option_value('buftype', {}) == 'prompt' then
|
||||
return false
|
||||
end
|
||||
local line, col = table.unpack(vim.api.nvim_win_get_cursor(0))
|
||||
return col ~= 0 and vim.api.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]:match '^%s*$' == nil
|
||||
return col ~= 0
|
||||
and vim.api
|
||||
.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]
|
||||
:match '^%s*$'
|
||||
== nil
|
||||
end
|
||||
|
||||
cmp.setup {
|
||||
@@ -75,6 +85,8 @@ return {
|
||||
show_labelDetails = true,
|
||||
symbol_map = {
|
||||
Copilot = '',
|
||||
Text = '',
|
||||
Constructor = '',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -19,9 +19,6 @@ return {
|
||||
-- Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim.
|
||||
-- https://github.com/williamboman/mason-lspconfig.nvim
|
||||
{ 'williamboman/mason-lspconfig.nvim' },
|
||||
-- Install and upgrade third party tools automatically
|
||||
-- https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim
|
||||
{ 'WhoIsSethDaniel/mason-tool-installer.nvim' },
|
||||
|
||||
-- ── Formatting ──────────────────────────────────────────────────────
|
||||
-- Lightweight yet powerful formatter plugin for Neovim
|
||||
@@ -30,33 +27,81 @@ return {
|
||||
'stevearc/conform.nvim',
|
||||
event = { 'BufWritePre' },
|
||||
cmd = { 'ConformInfo' },
|
||||
opts = {
|
||||
formatters_by_ft = {
|
||||
lua = { 'stylua' },
|
||||
-- Conform will run multiple formatters sequentially
|
||||
-- python = { 'isort', 'black', lsp_format = 'fallback' },
|
||||
-- You can customize some of the format options for the filetype (:help conform.format)
|
||||
-- rust = { 'rustfmt', lsp_format = 'fallback' },
|
||||
-- Conform will run the first available formatter
|
||||
javascript = { 'prettier', 'eslint', stop_after_first = true },
|
||||
},
|
||||
notify_on_error = true,
|
||||
format_on_save = function(bufnr)
|
||||
-- Disable "format_on_save lsp_fallback" for languages that don't
|
||||
-- have a well standardized coding style. You can add additional
|
||||
-- languages here or re-enable it for the disabled ones.
|
||||
local disable_filetypes = { c = true, cpp = true }
|
||||
return {
|
||||
-- formatters = { 'injected' },
|
||||
lsp_fallback = not disable_filetypes[vim.bo[bufnr].filetype],
|
||||
timeout_ms = 500,
|
||||
}
|
||||
end,
|
||||
},
|
||||
config = function()
|
||||
-- Select first conform formatter that is available
|
||||
---@param bufnr integer
|
||||
---@param ... string
|
||||
---@return string
|
||||
local function first(bufnr, ...)
|
||||
local conform = require 'conform'
|
||||
for i = 1, select('#', ...) do
|
||||
local formatter = select(i, ...)
|
||||
if conform.get_formatter_info(formatter, bufnr).available then
|
||||
return formatter
|
||||
end
|
||||
end
|
||||
return select(1, ...)
|
||||
end
|
||||
|
||||
require('conform').setup {
|
||||
-- Enable or disable logging
|
||||
notify_on_error = true,
|
||||
-- Set the default formatter for all filetypes
|
||||
default_formatter = 'injected',
|
||||
-- Set the default formatter for all filetypes
|
||||
default_formatter_opts = {
|
||||
lsp_format = 'fallback',
|
||||
-- Set the default formatter for all filetypes
|
||||
-- formatter = 'injected',
|
||||
-- Set the default formatter for all filetypes
|
||||
-- formatter_opts = {},
|
||||
},
|
||||
formatters_by_ft = {
|
||||
markdown = function(bufnr)
|
||||
return { first(bufnr, 'prettierd', 'prettier'), 'injected' }
|
||||
end,
|
||||
javascript = function(bufnr)
|
||||
return { first(bufnr, 'prettier', 'eslint'), 'injected' }
|
||||
end,
|
||||
lua = { 'stylua' },
|
||||
-- Conform will run multiple formatters sequentially
|
||||
-- python = { 'isort', 'black', lsp_format = 'fallback' },
|
||||
-- You can customize some of the format options for the filetype (:help conform.format)
|
||||
-- rust = { 'rustfmt', lsp_format = 'fallback' },
|
||||
},
|
||||
format_on_save = function(bufnr)
|
||||
-- Disable autoformat on certain filetypes
|
||||
local ignore_filetypes = {
|
||||
'c',
|
||||
'cpp',
|
||||
'sql',
|
||||
'java',
|
||||
}
|
||||
if vim.tbl_contains(ignore_filetypes, vim.bo[bufnr].filetype) then
|
||||
return
|
||||
end
|
||||
-- Disable with a global or buffer-local variable
|
||||
if
|
||||
vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat
|
||||
then
|
||||
return
|
||||
end
|
||||
-- Disable autoformat for files in a certain path
|
||||
local bufname = vim.api.nvim_buf_get_name(bufnr)
|
||||
if bufname:match '/node_modules/' then return end
|
||||
if bufname:match '/vendor/' then return end
|
||||
if bufname:match '/dist/' then return end
|
||||
if bufname:match '/build/' then return end
|
||||
|
||||
return { timeout_ms = 500, lsp_format = 'fallback' }
|
||||
end,
|
||||
}
|
||||
end,
|
||||
init = function()
|
||||
-- If you want the formatexpr, here is the place to set it
|
||||
vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"
|
||||
end,
|
||||
},
|
||||
-- Automatically install formatters registered with conform.nvim via mason.nvim
|
||||
-- https://github.com/zapling/mason-conform.nvim
|
||||
{ 'zapling/mason-conform.nvim' },
|
||||
|
||||
-- ── Misc ────────────────────────────────────────────────────────────
|
||||
-- vscode-like pictograms for neovim lsp completion items
|
||||
@@ -82,20 +127,28 @@ return {
|
||||
---@output nil
|
||||
local on_attach = function(_, bufnr)
|
||||
-- Create a command `:Format` local to the LSP buffer
|
||||
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
|
||||
require('conform').format { formatters = { 'injected' }, async = true, lsp_fallback = true }
|
||||
|
||||
-- if vim.lsp.buf.format then
|
||||
-- vim.lsp.buf.format()
|
||||
-- elseif vim.lsp.buf.formatting then
|
||||
-- vim.lsp.buf.formatting()
|
||||
-- end
|
||||
end, { desc = 'Format current buffer with LSP' })
|
||||
vim.api.nvim_create_user_command('Format', function(args)
|
||||
local range = nil
|
||||
if args.count ~= -1 then
|
||||
local end_line = vim.api.nvim_buf_get_lines(
|
||||
bufnr,
|
||||
args.line2 - 1,
|
||||
args.line2,
|
||||
true
|
||||
)[1]
|
||||
range = {
|
||||
start = { args.line1, 0 },
|
||||
['end'] = { args.line2, end_line:len() },
|
||||
}
|
||||
end
|
||||
require('conform').format {
|
||||
async = true,
|
||||
lsp_format = 'fallback',
|
||||
range = range,
|
||||
}
|
||||
end, { range = true, desc = 'Format current buffer with LSP' })
|
||||
end
|
||||
|
||||
-- ── Setup mason so it can manage external tooling ───────────────────
|
||||
require('mason').setup()
|
||||
|
||||
-- ── Enable the following language servers ───────────────────────────
|
||||
-- :help lspconfig-all for all pre-configured LSPs
|
||||
local servers = {
|
||||
@@ -106,6 +159,7 @@ return {
|
||||
intelephense = {}, -- PHP
|
||||
tailwindcss = {}, -- Tailwind CSS
|
||||
ts_ls = {}, -- TypeScript
|
||||
volar = {}, -- Vue
|
||||
|
||||
lua_ls = {
|
||||
settings = {
|
||||
@@ -184,10 +238,10 @@ return {
|
||||
local ensure_installed = vim.tbl_keys(servers or {})
|
||||
vim.list_extend(ensure_installed, mason_servers)
|
||||
|
||||
-- ── Automagically install tools ─────────────────────────────────────
|
||||
require('mason-tool-installer').setup {
|
||||
-- ── Setup mason so it can manage external tooling ───────────────────
|
||||
require('mason').setup {
|
||||
ensure_installed = ensure_installed,
|
||||
auto_update = true,
|
||||
automatic_installation = true,
|
||||
}
|
||||
|
||||
-- nvim-cmp supports additional completion capabilities
|
||||
@@ -200,6 +254,15 @@ return {
|
||||
lineFoldingOnly = true,
|
||||
}
|
||||
|
||||
capabilities.textDocument.completion.completionItem.snippetSupport = true
|
||||
capabilities.textDocument.completion.completionItem.resolveSupport = {
|
||||
properties = {
|
||||
'documentation',
|
||||
'detail',
|
||||
'additionalTextEdits',
|
||||
},
|
||||
}
|
||||
|
||||
local lspconfig_handlers = {
|
||||
-- The first entry (without a key) will be the default handler
|
||||
-- and will be called for each installed server that doesn't have
|
||||
@@ -211,8 +274,12 @@ return {
|
||||
}
|
||||
end,
|
||||
-- Next, you can provide targeted overrides for specific servers.
|
||||
['lua_ls'] = function() require('lspconfig')['lua_ls'].setup { settings = servers.lua_ls } end,
|
||||
['jsonls'] = function() require('lspconfig')['jsonls'].setup { settings = servers.jsonls } end,
|
||||
['lua_ls'] = function()
|
||||
require('lspconfig')['lua_ls'].setup { settings = servers.lua_ls }
|
||||
end,
|
||||
['jsonls'] = function()
|
||||
require('lspconfig')['jsonls'].setup { settings = servers.jsonls }
|
||||
end,
|
||||
}
|
||||
|
||||
require('mason-lspconfig').setup {
|
||||
@@ -220,21 +287,6 @@ return {
|
||||
automatic_installation = true,
|
||||
handlers = lspconfig_handlers,
|
||||
}
|
||||
|
||||
vim.api.nvim_create_autocmd('FileType', {
|
||||
pattern = 'sh',
|
||||
callback = function()
|
||||
vim.lsp.start {
|
||||
name = 'bash-language-server',
|
||||
cmd = { 'bash-language-server', 'start' },
|
||||
}
|
||||
end,
|
||||
})
|
||||
|
||||
-- ── Setup formatting ────────────────────────────────────────────────
|
||||
require('mason-conform').setup {
|
||||
-- ignore_install = { 'prettier' }, -- List of formatters to ignore during install
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
@@ -309,80 +361,71 @@ return {
|
||||
end,
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
capabilities.textDocument.foldingRange = {
|
||||
dynamicRegistration = false,
|
||||
lineFoldingOnly = true,
|
||||
}
|
||||
local language_servers = require('lspconfig').util.available_servers() -- or list servers manually like {'gopls', 'clangd'}
|
||||
for _, ls in ipairs(language_servers) do
|
||||
require('lspconfig')[ls].setup {
|
||||
capabilities = capabilities,
|
||||
-- you can add other fields for setting up lsp server in this table
|
||||
}
|
||||
end
|
||||
|
||||
require('ufo').setup {
|
||||
open_fold_hl_timeout = 150,
|
||||
close_fold_kinds_for_ft = { 'imports', 'comment' },
|
||||
preview = {
|
||||
win_config = {
|
||||
border = { '', '─', '', '', '', '─', '', '' },
|
||||
winhighlight = 'Normal:Folded',
|
||||
winblend = 0,
|
||||
},
|
||||
mappings = {
|
||||
scrollU = '<C-u>',
|
||||
scrollD = '<C-d>',
|
||||
jumpTop = '[',
|
||||
jumpBot = ']',
|
||||
},
|
||||
opts = {
|
||||
open_fold_hl_timeout = 150,
|
||||
close_fold_kinds_for_ft = { 'imports', 'comment' },
|
||||
preview = {
|
||||
win_config = {
|
||||
border = { '', '─', '', '', '', '─', '', '' },
|
||||
winhighlight = 'Normal:Folded',
|
||||
winblend = 0,
|
||||
},
|
||||
mappings = {
|
||||
scrollU = '<C-u>',
|
||||
scrollD = '<C-d>',
|
||||
jumpTop = '[',
|
||||
jumpBot = ']',
|
||||
},
|
||||
},
|
||||
|
||||
provider_selector = function(_, _, _) -- bufnr, filetype, buftype
|
||||
return { 'treesitter', 'indent' }
|
||||
end,
|
||||
provider_selector = function(_, _, _) -- bufnr, filetype, buftype
|
||||
return { 'treesitter', 'indent' }
|
||||
end,
|
||||
|
||||
-- fold_virt_text_handler
|
||||
--
|
||||
-- This handler is called when the fold text is too long to fit in the window.
|
||||
-- It is expected to truncate the text and return a new list of virtual text.
|
||||
--
|
||||
---@param virtText table The current virtual text list.
|
||||
---@param lnum number The line number of the first line in the fold.
|
||||
---@param endLnum number The line number of the last line in the fold.
|
||||
---@param width number The width of the window.
|
||||
---@param truncate function Truncate function
|
||||
---@return table
|
||||
fold_virt_text_handler = function(virtText, lnum, endLnum, width, truncate)
|
||||
local newVirtText = {}
|
||||
local suffix = (' %d '):format(endLnum - lnum)
|
||||
local sufWidth = vim.fn.strdisplaywidth(suffix)
|
||||
local targetWidth = width - sufWidth
|
||||
local curWidth = 0
|
||||
for _, chunk in ipairs(virtText) do
|
||||
local chunkText = chunk[1]
|
||||
local chunkWidth = vim.fn.strdisplaywidth(chunkText)
|
||||
if targetWidth > curWidth + chunkWidth then
|
||||
table.insert(newVirtText, chunk)
|
||||
else
|
||||
chunkText = truncate(chunkText, targetWidth - curWidth)
|
||||
local hlGroup = chunk[2]
|
||||
table.insert(newVirtText, { chunkText, hlGroup })
|
||||
chunkWidth = vim.fn.strdisplaywidth(chunkText)
|
||||
-- str width returned from truncate() may less than 2nd argument, need padding
|
||||
if curWidth + chunkWidth < targetWidth then
|
||||
suffix = suffix .. (' '):rep(targetWidth - curWidth - chunkWidth)
|
||||
end
|
||||
break
|
||||
-- fold_virt_text_handler
|
||||
--
|
||||
-- This handler is called when the fold text is too long to fit in the window.
|
||||
-- It is expected to truncate the text and return a new list of virtual text.
|
||||
--
|
||||
---@param virtText table The current virtual text list.
|
||||
---@param lnum number The line number of the first line in the fold.
|
||||
---@param endLnum number The line number of the last line in the fold.
|
||||
---@param width number The width of the window.
|
||||
---@param truncate function Truncate function
|
||||
---@return table
|
||||
fold_virt_text_handler = function(
|
||||
virtText,
|
||||
lnum,
|
||||
endLnum,
|
||||
width,
|
||||
truncate
|
||||
)
|
||||
local newVirtText = {}
|
||||
local suffix = (' %d '):format(endLnum - lnum)
|
||||
local sufWidth = vim.fn.strdisplaywidth(suffix)
|
||||
local targetWidth = width - sufWidth
|
||||
local curWidth = 0
|
||||
for _, chunk in ipairs(virtText) do
|
||||
local chunkText = chunk[1]
|
||||
local chunkWidth = vim.fn.strdisplaywidth(chunkText)
|
||||
if targetWidth > curWidth + chunkWidth then
|
||||
table.insert(newVirtText, chunk)
|
||||
else
|
||||
chunkText = truncate(chunkText, targetWidth - curWidth)
|
||||
local hlGroup = chunk[2]
|
||||
table.insert(newVirtText, { chunkText, hlGroup })
|
||||
chunkWidth = vim.fn.strdisplaywidth(chunkText)
|
||||
-- str width returned from truncate() may less than 2nd argument, need padding
|
||||
if curWidth + chunkWidth < targetWidth then
|
||||
suffix = suffix .. (' '):rep(targetWidth - curWidth - chunkWidth)
|
||||
end
|
||||
curWidth = curWidth + chunkWidth
|
||||
break
|
||||
end
|
||||
table.insert(newVirtText, { suffix, 'MoreMsg' })
|
||||
return newVirtText
|
||||
end,
|
||||
}
|
||||
end,
|
||||
curWidth = curWidth + chunkWidth
|
||||
end
|
||||
table.insert(newVirtText, { suffix, 'MoreMsg' })
|
||||
return newVirtText
|
||||
end,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -2,7 +2,10 @@
|
||||
-- https://github.com/nvim-treesitter/nvim-treesitter
|
||||
return {
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
build = function() pcall(require('nvim-treesitter.install').update { with_sync = true }) end,
|
||||
version = false, -- last release is way too old and doesn't work on Windows
|
||||
build = function()
|
||||
pcall(require('nvim-treesitter.install').update { with_sync = true })
|
||||
end,
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter-textobjects',
|
||||
},
|
||||
|
||||
@@ -34,18 +34,14 @@ return {
|
||||
event = 'VimEnter',
|
||||
config = function()
|
||||
require('dashboard').setup {
|
||||
theme = 'doom',
|
||||
config = {
|
||||
disable_move = true,
|
||||
week_header = {
|
||||
enable = true,
|
||||
},
|
||||
shortcut = {
|
||||
{
|
||||
desc = ' Lazy Update',
|
||||
group = '@property',
|
||||
action = 'Lazy update',
|
||||
key = 'u',
|
||||
},
|
||||
shortcut = {},
|
||||
center = {
|
||||
{
|
||||
icon = ' ',
|
||||
icon_hl = '@variable',
|
||||
@@ -55,23 +51,33 @@ return {
|
||||
key = 'f',
|
||||
},
|
||||
{
|
||||
desc = ' Marks',
|
||||
icon = ' ',
|
||||
desc = 'Marks',
|
||||
group = 'DiagnosticHint',
|
||||
action = 'Telescope harpoon marks',
|
||||
key = 'a',
|
||||
},
|
||||
{
|
||||
desc = '⚑ TODO',
|
||||
icon = '⚑ ',
|
||||
desc = 'TODO',
|
||||
group = 'DiagnosticOptions',
|
||||
action = 'TodoTelescope',
|
||||
key = 't',
|
||||
},
|
||||
{
|
||||
desc = '🔍 Search',
|
||||
icon = ' ',
|
||||
desc = 'Search',
|
||||
group = 'Number',
|
||||
action = 'Telescope live_grep',
|
||||
key = 's',
|
||||
},
|
||||
{
|
||||
icon = ' ',
|
||||
desc = 'Lazy Update',
|
||||
group = '@property',
|
||||
action = 'Lazy update',
|
||||
key = 'u',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -110,6 +116,7 @@ return {
|
||||
-- https://github.com/lewis6991/gitsigns.nvim
|
||||
{
|
||||
'lewis6991/gitsigns.nvim',
|
||||
version = false,
|
||||
lazy = false,
|
||||
opts = {
|
||||
signs = {
|
||||
@@ -228,7 +235,10 @@ return {
|
||||
-- https://github.com/MeanderingProgrammer/render-markdown.nvim
|
||||
{
|
||||
'MeanderingProgrammer/render-markdown.nvim',
|
||||
dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' },
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
'nvim-tree/nvim-web-devicons',
|
||||
},
|
||||
ft = 'markdown',
|
||||
opts = {},
|
||||
},
|
||||
|
||||
@@ -27,31 +27,67 @@ return {
|
||||
return require('which-key.extras').expand.buf()
|
||||
end,
|
||||
},
|
||||
{ '<leader>bk', '<cmd>blast<cr>', desc = 'Buffer: Last' },
|
||||
{ '<leader>bj', '<cmd>bfirst<cr>', desc = 'Buffer: First' },
|
||||
{ '<leader>bh', '<cmd>bprev<cr>', desc = 'Buffer: Prev' },
|
||||
{ '<leader>bl', '<cmd>bnext<cr>', desc = 'Buffer: Next' },
|
||||
{ '<leader>bd', '<cmd>Bdelete<cr>', desc = 'Buffer: Delete' },
|
||||
{ '<leader>bw', '<cmd>Bwipeout<cr>', desc = 'Buffer: Wipeout' },
|
||||
{
|
||||
{ '<leader>bk', '<cmd>blast<cr>', desc = 'Buffer: Last' },
|
||||
{ '<leader>bj', '<cmd>bfirst<cr>', desc = 'Buffer: First' },
|
||||
{ '<leader>bh', '<cmd>bprev<cr>', desc = 'Buffer: Prev' },
|
||||
{ '<leader>bl', '<cmd>bnext<cr>', desc = 'Buffer: Next' },
|
||||
{ '<leader>bd', '<cmd>Bdelete<cr>', desc = 'Buffer: Delete' },
|
||||
{ '<leader>bw', '<cmd>Bwipeout<cr>', desc = 'Buffer: Wipeout' },
|
||||
},
|
||||
|
||||
-- ── Code ────────────────────────────────────────────────────────────
|
||||
{ '<leader>c', group = '[c] Code' },
|
||||
{ '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', desc = 'LSP: Code Action' },
|
||||
{ '<leader>cg', '<cmd>lua require("neogen").generate()<CR>', desc = 'Generate annotations' },
|
||||
{
|
||||
{
|
||||
'<leader>ca',
|
||||
'<cmd>lua vim.lsp.buf.code_action()<CR>',
|
||||
desc = 'LSP: Code Action',
|
||||
},
|
||||
{
|
||||
'<leader>cg',
|
||||
'<cmd>lua require("neogen").generate()<CR>',
|
||||
desc = 'Generate annotations',
|
||||
},
|
||||
},
|
||||
-- ── Code: CommentBox ────────────────────────────────────────────────
|
||||
{ '<leader>cb', group = 'CommentBox' },
|
||||
{ '<leader>cbb', '<Cmd>CBccbox<CR>', desc = 'CommentBox: Box Title' },
|
||||
{ '<leader>cbd', '<Cmd>CBd<CR>', desc = 'CommentBox: Remove a box' },
|
||||
{ '<leader>cbl', '<Cmd>CBline<CR>', desc = 'CommentBox: Simple Line' },
|
||||
{ '<leader>cbm', '<Cmd>CBllbox14<CR>', desc = 'CommentBox: Marked' },
|
||||
{ '<leader>cbt', '<Cmd>CBllline<CR>', desc = 'CommentBox: Titled Line' },
|
||||
{
|
||||
{ '<leader>cb', group = 'CommentBox' },
|
||||
{ '<leader>cbb', '<Cmd>CBccbox<CR>', desc = 'CommentBox: Box Title' },
|
||||
{ '<leader>cbd', '<Cmd>CBd<CR>', desc = 'CommentBox: Remove a box' },
|
||||
{ '<leader>cbl', '<Cmd>CBline<CR>', desc = 'CommentBox: Simple Line' },
|
||||
{ '<leader>cbm', '<Cmd>CBllbox14<CR>', desc = 'CommentBox: Marked' },
|
||||
{
|
||||
'<leader>cbt',
|
||||
'<Cmd>CBllline<CR>',
|
||||
desc = 'CommentBox: Titled Line',
|
||||
},
|
||||
},
|
||||
-- ── Code: package.json control ──────────────────────────────────────
|
||||
-- See: lua/plugins/lazy.lua
|
||||
{ '<leader>cn', group = 'package.json control' },
|
||||
{ '<leader>cnd', '<cmd>lua require("package-info").delete()<cr>', desc = 'Delete package' },
|
||||
{ '<leader>cni', '<cmd>lua require("package-info").install()<cr>', desc = 'Install package' },
|
||||
{ '<leader>cns', '<cmd>lua require("package-info").show({ force = true })<cr>', desc = 'Show package info' },
|
||||
{ '<leader>cnu', '<cmd>lua require("package-info").change_version()<cr>', desc = 'Change version' },
|
||||
{
|
||||
{
|
||||
'<leader>cnd',
|
||||
'<cmd>lua require("package-info").delete()<cr>',
|
||||
desc = 'Delete package',
|
||||
},
|
||||
{
|
||||
'<leader>cni',
|
||||
'<cmd>lua require("package-info").install()<cr>',
|
||||
desc = 'Install package',
|
||||
},
|
||||
{
|
||||
'<leader>cns',
|
||||
'<cmd>lua require("package-info").show({ force = true })<cr>',
|
||||
desc = 'Show package info',
|
||||
},
|
||||
{
|
||||
'<leader>cnu',
|
||||
'<cmd>lua require("package-info").change_version()<cr>',
|
||||
desc = 'Change version',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Code: Refactoring ───────────────────────────────────────────────
|
||||
{ '<leader>cx', group = '[x] Refactoring' },
|
||||
@@ -77,7 +113,7 @@ return {
|
||||
},
|
||||
-- Inline func supports only normal
|
||||
{
|
||||
'<leader>cxi',
|
||||
'<leader>cxif',
|
||||
"<cmd>lua require('refactoring').refactor('Inline Function')<cr>",
|
||||
desc = 'Inline Function',
|
||||
},
|
||||
@@ -96,7 +132,7 @@ return {
|
||||
mode = { 'n', 'x' },
|
||||
-- Inline var supports both normal and visual mode
|
||||
{
|
||||
'<leader>cxi',
|
||||
'<leader>cxiv',
|
||||
"<cmd>lua require('refactoring').refactor('Inline Variable')<cr>",
|
||||
desc = 'Inline Variable',
|
||||
},
|
||||
@@ -104,49 +140,141 @@ return {
|
||||
|
||||
-- ── Code: LSPSaga ───────────────────────────────────────────────────
|
||||
-- See: lua/plugins/lsp.lua
|
||||
{ '<C-a>', '<cmd>Lspsaga term_toggle<cr>', desc = 'LSPSaga: Open Floaterm' },
|
||||
{ '<leader>ca', '<cmd>Lspsaga code_action<cr>', desc = 'LSPSaga: Code Actions' },
|
||||
{ '<leader>cci', '<cmd>Lspsaga incoming_calls<cr>', desc = 'LSPSaga: Incoming Calls' },
|
||||
{ '<leader>cco', '<cmd>Lspsaga outgoing_calls<cr>', desc = 'LSPSaga: Outgoing Calls' },
|
||||
{ '<leader>cd', '<cmd>Lspsaga show_line_diagnostics<cr>', desc = 'LSPSaga: Show Line Diagnostics' },
|
||||
{
|
||||
'<C-a>',
|
||||
'<cmd>Lspsaga term_toggle<cr>',
|
||||
desc = 'LSPSaga: Open Floaterm',
|
||||
},
|
||||
{
|
||||
'<leader>ca',
|
||||
'<cmd>Lspsaga code_action<cr>',
|
||||
desc = 'LSPSaga: Code Actions',
|
||||
},
|
||||
{
|
||||
'<leader>cci',
|
||||
'<cmd>Lspsaga incoming_calls<cr>',
|
||||
desc = 'LSPSaga: Incoming Calls',
|
||||
},
|
||||
{
|
||||
'<leader>cco',
|
||||
'<cmd>Lspsaga outgoing_calls<cr>',
|
||||
desc = 'LSPSaga: Outgoing Calls',
|
||||
},
|
||||
{
|
||||
'<leader>cd',
|
||||
'<cmd>Lspsaga show_line_diagnostics<cr>',
|
||||
desc = 'LSPSaga: Show Line Diagnostics',
|
||||
},
|
||||
{
|
||||
'<leader>cf',
|
||||
'<cmd>lua require("conform").format({ async = true, lsp_fallback = true })<cr>',
|
||||
mode = { 'n', 'v' },
|
||||
desc = 'Format buffer',
|
||||
},
|
||||
{ '<leader>ci', '<cmd>Lspsaga implement<cr>', desc = 'LSPSaga: Implementations' },
|
||||
{ '<leader>cl', '<cmd>Lspsaga show_cursor_diagnostics<cr>', desc = 'LSPSaga: Show Cursor Diagnostics' },
|
||||
{ '<leader>cp', '<cmd>Lspsaga peek_definition<cr>', desc = 'LSPSaga: Peek Definition' },
|
||||
{
|
||||
'<leader>ci',
|
||||
'<cmd>Lspsaga implement<cr>',
|
||||
desc = 'LSPSaga: Implementations',
|
||||
},
|
||||
{
|
||||
'<leader>cl',
|
||||
'<cmd>Lspsaga show_cursor_diagnostics<cr>',
|
||||
desc = 'LSPSaga: Show Cursor Diagnostics',
|
||||
},
|
||||
{
|
||||
'<leader>cp',
|
||||
'<cmd>Lspsaga peek_definition<cr>',
|
||||
desc = 'LSPSaga: Peek Definition',
|
||||
},
|
||||
{ '<leader>cr', '<cmd>Lspsaga rename<cr>', desc = 'LSPSaga: Rename' },
|
||||
{ '<leader>cR', '<cmd>Lspsaga rename ++project<cr>', desc = 'LSPSaga: Rename Project wide' },
|
||||
{ '<leader>cs', '<cmd>Lspsaga signature_help<cr>', desc = 'LSPSaga: Signature Documentation' },
|
||||
{ '<leader>ct', '<cmd>Lspsaga peek_type_definition<cr>', desc = 'LSPSaga: Peek Type Definition' },
|
||||
{ '<leader>cu', '<cmd>Lspsaga preview_definition<cr>', desc = 'LSPSaga: Preview Definition' },
|
||||
{ '<leader>cv', '<cmd>Lspsaga diagnostic_jump_prev<cr>', desc = 'LSPSaga: Diagnostic Jump Prev' },
|
||||
{ '<leader>cw', '<cmd>Lspsaga diagnostic_jump_next<cr>', desc = 'LSPSaga: Diagnostic Jump Next' },
|
||||
{
|
||||
'<leader>cR',
|
||||
'<cmd>Lspsaga rename ++project<cr>',
|
||||
desc = 'LSPSaga: Rename Project wide',
|
||||
},
|
||||
{
|
||||
'<leader>cs',
|
||||
'<cmd>Lspsaga signature_help<cr>',
|
||||
desc = 'LSPSaga: Signature Documentation',
|
||||
},
|
||||
{
|
||||
'<leader>ct',
|
||||
'<cmd>Lspsaga peek_type_definition<cr>',
|
||||
desc = 'LSPSaga: Peek Type Definition',
|
||||
},
|
||||
{
|
||||
'<leader>cu',
|
||||
'<cmd>Lspsaga preview_definition<cr>',
|
||||
desc = 'LSPSaga: Preview Definition',
|
||||
},
|
||||
{
|
||||
'<leader>cv',
|
||||
'<cmd>Lspsaga diagnostic_jump_prev<cr>',
|
||||
desc = 'LSPSaga: Diagnostic Jump Prev',
|
||||
},
|
||||
{
|
||||
'<leader>cw',
|
||||
'<cmd>Lspsaga diagnostic_jump_next<cr>',
|
||||
desc = 'LSPSaga: Diagnostic Jump Next',
|
||||
},
|
||||
|
||||
-- ── DAP ─────────────────────────────────────────────────────────────
|
||||
{ '<leader>d', group = '[d] DAP' },
|
||||
{ '<leader>db', '<cmd>DapToggleBreakpoint', desc = 'DAP: Toggle Breakpoint' },
|
||||
{ '<leader>dc', '<cmd>DapContinue', desc = 'DAP: Continue' },
|
||||
{ '<leader>do', '<cmd>lua vim.diagnostic.open_float()<CR>', desc = 'Diagnostic: Open float' },
|
||||
{ '<leader>dq', '<cmd>lua vim.diagnostic.setloclist()<CR>', desc = 'Diagnostic: Set loc list' },
|
||||
{ '<leader>dr', "<cmd>lua require('dapui').open({reset = true})<CR>", desc = 'DAP: Reset' },
|
||||
{
|
||||
'<leader>ds',
|
||||
'<cmd>lua require("telescope.builtin").lsp_document_symbols()<CR>',
|
||||
desc = 'LSP: Document Symbols',
|
||||
{
|
||||
'<leader>db',
|
||||
'<cmd>DapToggleBreakpoint',
|
||||
desc = 'DAP: Toggle Breakpoint',
|
||||
},
|
||||
{ '<leader>dc', '<cmd>DapContinue', desc = 'DAP: Continue' },
|
||||
{
|
||||
'<leader>do',
|
||||
'<cmd>lua vim.diagnostic.open_float()<CR>',
|
||||
desc = 'Diagnostic: Open float',
|
||||
},
|
||||
{
|
||||
'<leader>dq',
|
||||
'<cmd>lua vim.diagnostic.setloclist()<CR>',
|
||||
desc = 'Diagnostic: Set loc list',
|
||||
},
|
||||
{
|
||||
'<leader>dr',
|
||||
"<cmd>lua require('dapui').open({reset = true})<CR>",
|
||||
desc = 'DAP: Reset',
|
||||
},
|
||||
{
|
||||
'<leader>ds',
|
||||
'<cmd>lua require("telescope.builtin").lsp_document_symbols()<CR>',
|
||||
desc = 'LSP: Document Symbols',
|
||||
},
|
||||
{ '<leader>dt', '<cmd>DapUiToggle', desc = 'DAP: Toggle UI' },
|
||||
},
|
||||
{ '<leader>dt', '<cmd>DapUiToggle', desc = 'DAP: Toggle UI' },
|
||||
|
||||
-- ── Harpoon ─────────────────────────────────────────────────────────
|
||||
-- See: lua/plugins/telescope.lua
|
||||
{ '<leader>h', group = '[h] Harpoon' },
|
||||
{ '<leader>ha', '<cmd>lua require("harpoon"):list():add()<cr>', desc = 'harpoon file' },
|
||||
{ '<leader>hn', '<cmd>lua require("harpoon"):list():next()<cr>', desc = 'harpoon to next file' },
|
||||
{ '<leader>hp', '<cmd>lua require("harpoon"):list():prev()<cr>', desc = 'harpoon to previous file' },
|
||||
{ '<leader>ht', "<cmd>lua require('harpoon.ui').toggle_quick_menu()<CR>", desc = 'DAP: Harpoon UI' },
|
||||
{
|
||||
{
|
||||
'<leader>ha',
|
||||
'<cmd>lua require("harpoon"):list():add()<cr>',
|
||||
desc = 'harpoon file',
|
||||
},
|
||||
{
|
||||
'<leader>hn',
|
||||
'<cmd>lua require("harpoon"):list():next()<cr>',
|
||||
desc = 'harpoon to next file',
|
||||
},
|
||||
{
|
||||
'<leader>hp',
|
||||
'<cmd>lua require("harpoon"):list():prev()<cr>',
|
||||
desc = 'harpoon to previous file',
|
||||
},
|
||||
{
|
||||
'<leader>ht',
|
||||
"<cmd>lua require('harpoon.ui').toggle_quick_menu()<CR>",
|
||||
desc = 'DAP: Harpoon UI',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── LSP ─────────────────────────────────────────────────────────────
|
||||
{ '<leader>l', group = '[l] LSP' },
|
||||
@@ -154,74 +282,164 @@ return {
|
||||
|
||||
-- ── Quit ────────────────────────────────────────────────────────────
|
||||
{ '<leader>q', group = '[q] Quit' },
|
||||
{ '<leader>qf', '<cmd>q<CR>', desc = 'Quicker close split' },
|
||||
{ '<leader>qq', '<cmd>wq!<CR>', desc = 'Quit with force saving' },
|
||||
{ '<leader>qw', '<cmd>wq<CR>', desc = 'Write and quit' },
|
||||
{
|
||||
{ '<leader>qf', '<cmd>q<CR>', desc = 'Quicker close split' },
|
||||
{ '<leader>qq', '<cmd>wq!<CR>', desc = 'Quit with force saving' },
|
||||
{ '<leader>qw', '<cmd>wq<CR>', desc = 'Write and quit' },
|
||||
},
|
||||
|
||||
-- ── Search ──────────────────────────────────────────────────────────
|
||||
{ '<leader>s', group = '[s] Search' },
|
||||
-- See: lua/plugins/telescope.lua
|
||||
{ '<leader><space>', "<cmd>lua require('telescope.builtin').buffers()<cr>", desc = 'Find existing buffers' },
|
||||
{ '<leader><tab>', "<cmd>lua require('telescope.builtin').commands()<CR>", desc = 'Telescope: Commands' },
|
||||
{ '<leader>sd', "<cmd>lua require('telescope.builtin').diagnostics()<cr>", desc = 'Search Diagnostics' },
|
||||
{ '<leader>sg', "<cmd>lua require('telescope.builtin').live_grep()<cr>", desc = 'Search by Grep' },
|
||||
{ '<leader>sm', '<cmd>Telescope harpoon marks<CR>', desc = 'Harpoon Marks' },
|
||||
{ '<leader>sn', "<cmd>lua require('telescope').extensions.notify.notify()<CR>", desc = 'Notify' },
|
||||
{ '<leader>so', "<cmd>lua require('telescope.builtin').oldfiles()<cr>", desc = 'Find recently Opened files' },
|
||||
{
|
||||
'<leader><space>',
|
||||
"<cmd>lua require('telescope.builtin').buffers()<cr>",
|
||||
desc = 'Find existing buffers',
|
||||
},
|
||||
{
|
||||
'<leader><tab>',
|
||||
"<cmd>lua require('telescope.builtin').commands()<CR>",
|
||||
desc = 'Telescope: Commands',
|
||||
},
|
||||
{
|
||||
'<leader>sd',
|
||||
"<cmd>lua require('telescope.builtin').diagnostics()<cr>",
|
||||
desc = 'Search Diagnostics',
|
||||
},
|
||||
{
|
||||
'<leader>sg',
|
||||
"<cmd>lua require('telescope.builtin').live_grep()<cr>",
|
||||
desc = 'Search by Grep',
|
||||
},
|
||||
{
|
||||
'<leader>sm',
|
||||
'<cmd>Telescope harpoon marks<CR>',
|
||||
desc = 'Harpoon Marks',
|
||||
},
|
||||
{
|
||||
'<leader>sn',
|
||||
"<cmd>lua require('telescope').extensions.notify.notify()<CR>",
|
||||
desc = 'Show Notifications',
|
||||
},
|
||||
{
|
||||
'<leader>so',
|
||||
"<cmd>lua require('telescope.builtin').oldfiles()<cr>",
|
||||
desc = 'Find recently Opened files',
|
||||
},
|
||||
{
|
||||
'<leader>sp',
|
||||
"<cmd>lua require('telescope').extensions.lazy_plugins.lazy_plugins()<cr>",
|
||||
desc = 'Find neovim/lazy configs',
|
||||
},
|
||||
{ '<leader>st', '<cmd>TodoTelescope<CR>', desc = 'Telescope: Todo' },
|
||||
{ '<leader>sw', "<cmd>lua require('telescope.builtin').grep_string()<cr>", desc = 'Search current Word' },
|
||||
{ '<leader>st', '<cmd>TodoTelescope<CR>', desc = 'Telescope: Show Todo' },
|
||||
{
|
||||
'<leader>sw',
|
||||
"<cmd>lua require('telescope.builtin').grep_string()<cr>",
|
||||
desc = 'Search current Word',
|
||||
},
|
||||
|
||||
-- ── Toggle ──────────────────────────────────────────────────────────
|
||||
{ '<leader>t', group = '[t] Toggle' },
|
||||
{ '<leader>tc', '<cmd>CloakToggle<cr>', desc = 'Toggle Cloak' },
|
||||
{ '<leader>tn', '<cmd>Noice dismiss<CR>', desc = 'Noice dismiss' },
|
||||
{ '<leader>ts', '<cmd>noh<CR>', desc = 'Toggle Search Highlighting' },
|
||||
{ '<leader>tt', '<cmd>TransparentToggle<CR>', desc = 'Toggle Transparency' },
|
||||
{ '<leader>tw', '<cmd>Twilight<cr>', desc = 'Toggle Twilight' },
|
||||
{
|
||||
{ '<leader>tc', '<cmd>CloakToggle<cr>', desc = 'Toggle Cloak' },
|
||||
{ '<leader>tn', '<cmd>Noice dismiss<CR>', desc = 'Noice dismiss' },
|
||||
{ '<leader>ts', '<cmd>noh<CR>', desc = 'Toggle Search Highlighting' },
|
||||
{
|
||||
'<leader>tt',
|
||||
'<cmd>TransparentToggle<CR>',
|
||||
desc = 'Toggle Transparency',
|
||||
},
|
||||
{ '<leader>tw', '<cmd>Twilight<cr>', desc = 'Toggle Twilight' },
|
||||
},
|
||||
|
||||
-- ── Workspace ───────────────────────────────────────────────────────
|
||||
{ '<leader>w', group = '[w] Workspace' },
|
||||
{ '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', desc = 'LSP: Workspace Add Folder' },
|
||||
{
|
||||
'<leader>wl',
|
||||
'<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>',
|
||||
desc = 'LSP: Workspace List Folders',
|
||||
},
|
||||
{ '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', desc = 'LSP: Workspace Remove Folder' },
|
||||
{
|
||||
'<leader>ws',
|
||||
'<cmd>lua require("telescope.builtin").lsp_dynamic_workspace_symbols()<CR>',
|
||||
desc = 'LSP: Workspace Symbols',
|
||||
{
|
||||
'<leader>wa',
|
||||
'<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>',
|
||||
desc = 'LSP: Workspace Add Folder',
|
||||
},
|
||||
{
|
||||
'<leader>wl',
|
||||
'<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>',
|
||||
desc = 'LSP: Workspace List Folders',
|
||||
},
|
||||
{
|
||||
'<leader>wr',
|
||||
'<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>',
|
||||
desc = 'LSP: Workspace Remove Folder',
|
||||
},
|
||||
{
|
||||
'<leader>ws',
|
||||
'<cmd>lua require("telescope.builtin").lsp_dynamic_workspace_symbols()<CR>',
|
||||
desc = 'LSP: Workspace Symbols',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Trouble ─────────────────────────────────────────────────────────
|
||||
{ '<leader>x', group = '[x] Trouble' },
|
||||
{ '<leader>xx', '<cmd>Trouble<cr>', desc = 'Toggle Trouble' },
|
||||
{ '<leader>xw', '<cmd>Trouble workspace_diagnostics<cr>', desc = 'Toggle Workspace Diagnostics' },
|
||||
{ '<leader>xd', '<cmd>Trouble document_diagnostics<cr>', desc = 'Toggle Document Diagnostics' },
|
||||
{ '<leader>xl', '<cmd>Trouble loclist<cr>', desc = 'Toggle Loclist' },
|
||||
{ '<leader>xq', '<cmd>Trouble quickfix<cr>', desc = 'Toggle Quickfix' },
|
||||
{
|
||||
{
|
||||
'<leader>xx',
|
||||
'<cmd>Trouble diagnostics<cr>',
|
||||
desc = 'Toggle Trouble Diagnostics',
|
||||
},
|
||||
{
|
||||
'<leader>xw',
|
||||
'<cmd>Trouble workspace_diagnostics<cr>',
|
||||
desc = 'Toggle Workspace Diagnostics',
|
||||
},
|
||||
{
|
||||
'<leader>xd',
|
||||
'<cmd>Trouble document_diagnostics<cr>',
|
||||
desc = 'Toggle Document Diagnostics',
|
||||
},
|
||||
{ '<leader>xl', '<cmd>Trouble loclist<cr>', desc = 'Toggle Loclist' },
|
||||
{ '<leader>xq', '<cmd>Trouble quickfix<cr>', desc = 'Toggle Quickfix' },
|
||||
},
|
||||
|
||||
-- ── Help ────────────────────────────────────────────────────────────
|
||||
{ '<leader>?', group = '[?] Help & Cheat sheets' },
|
||||
{
|
||||
'<leader>?w',
|
||||
'<cmd>lua require("which-key").show({global = false})<cr>',
|
||||
desc = 'Buffer Local Keymaps (which-key)',
|
||||
{
|
||||
'<leader>?w',
|
||||
'<cmd>lua require("which-key").show({global = false})<cr>',
|
||||
desc = 'Buffer Local Keymaps (which-key)',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Misc ────────────────────────────────────────────────────────────
|
||||
{ '<leader>1', '<cmd>lua require("harpoon"):list():select(1)<cr>', desc = 'harpoon to file 1' },
|
||||
{ '<leader>2', '<cmd>lua require("harpoon"):list():select(2)<cr>', desc = 'harpoon to file 2' },
|
||||
{ '<leader>3', '<cmd>lua require("harpoon"):list():select(3)<cr>', desc = 'harpoon to file 3' },
|
||||
{ '<leader>4', '<cmd>lua require("harpoon"):list():select(4)<cr>', desc = 'harpoon to file 4' },
|
||||
{ '<leader>5', '<cmd>lua require("harpoon"):list():select(5)<cr>', desc = 'harpoon to file 5' },
|
||||
{ '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', desc = 'LSP: Type Definition' },
|
||||
{
|
||||
'<leader>1',
|
||||
'<cmd>lua require("harpoon"):list():select(1)<cr>',
|
||||
desc = 'harpoon to file 1',
|
||||
},
|
||||
{
|
||||
'<leader>2',
|
||||
'<cmd>lua require("harpoon"):list():select(2)<cr>',
|
||||
desc = 'harpoon to file 2',
|
||||
},
|
||||
{
|
||||
'<leader>3',
|
||||
'<cmd>lua require("harpoon"):list():select(3)<cr>',
|
||||
desc = 'harpoon to file 3',
|
||||
},
|
||||
{
|
||||
'<leader>4',
|
||||
'<cmd>lua require("harpoon"):list():select(4)<cr>',
|
||||
desc = 'harpoon to file 4',
|
||||
},
|
||||
{
|
||||
'<leader>5',
|
||||
'<cmd>lua require("harpoon"):list():select(5)<cr>',
|
||||
desc = 'harpoon to file 5',
|
||||
},
|
||||
{
|
||||
'<leader>D',
|
||||
'<cmd>lua vim.lsp.buf.type_definition()<CR>',
|
||||
desc = 'LSP: Type Definition',
|
||||
},
|
||||
{ '<leader>e', '<cmd>Neotree reveal<CR>', desc = 'NeoTree reveal' },
|
||||
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
@@ -230,16 +448,48 @@ return {
|
||||
{ 'y', group = 'Yank & Surround' },
|
||||
|
||||
{ 'gp', group = 'Goto Preview' },
|
||||
{ 'gpd', '<cmd>lua require("goto-preview").goto_preview_definition()<CR>' },
|
||||
{ 'gpi', '<cmd>lua require("goto-preview").goto_preview_implementation()<CR>' },
|
||||
{ 'gpP', '<cmd>lua require("goto-preview").close_all_windows()<CR>' },
|
||||
{
|
||||
{
|
||||
'gpd',
|
||||
'<cmd>lua require("goto-preview").goto_preview_definition()<CR>',
|
||||
desc = 'Goto: Preview Definition',
|
||||
},
|
||||
{
|
||||
'gpi',
|
||||
'<cmd>lua require("goto-preview").goto_preview_implementation()<CR>',
|
||||
desc = 'Goto: Preview Implementation',
|
||||
},
|
||||
{
|
||||
'gpP',
|
||||
'<cmd>lua require("goto-preview").close_all_windows()<CR>',
|
||||
desc = 'Goto: Close All Preview Windows',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── tmux navigation ─────────────────────────────────────────────────
|
||||
{ '<c-h>', '<cmd><C-U>TmuxNavigateLeft<cr>', desc = 'tmux: Navigate Left' },
|
||||
{ '<c-j>', '<cmd><C-U>TmuxNavigateDown<cr>', desc = 'tmux: Navigate Down' },
|
||||
{ '<c-k>', '<cmd><C-U>TmuxNavigateUp<cr>', desc = 'tmux: Navigate Up' },
|
||||
{ '<c-l>', '<cmd><C-U>TmuxNavigateRight<cr>', desc = 'tmux: Navigate Right' },
|
||||
{ '<c-\\>', '<cmd><C-U>TmuxNavigatePrevious<cr>', desc = 'tmux: Navigate Previous' },
|
||||
{
|
||||
{
|
||||
'<c-h>',
|
||||
'<cmd><C-U>TmuxNavigateLeft<cr>',
|
||||
desc = 'tmux: Navigate Left',
|
||||
},
|
||||
{
|
||||
'<c-j>',
|
||||
'<cmd><C-U>TmuxNavigateDown<cr>',
|
||||
desc = 'tmux: Navigate Down',
|
||||
},
|
||||
{ '<c-k>', '<cmd><C-U>TmuxNavigateUp<cr>', desc = 'tmux: Navigate Up' },
|
||||
{
|
||||
'<c-l>',
|
||||
'<cmd><C-U>TmuxNavigateRight<cr>',
|
||||
desc = 'tmux: Navigate Right',
|
||||
},
|
||||
{
|
||||
'<c-\\>',
|
||||
'<cmd><C-U>TmuxNavigatePrevious<cr>',
|
||||
desc = 'tmux: Navigate Previous',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Old habits ──────────────────────────────────────────────────────
|
||||
{ '<C-s>', '<cmd>w<CR>', desc = 'Save file' },
|
||||
@@ -254,23 +504,75 @@ return {
|
||||
},
|
||||
|
||||
-- ── LSP ─────────────────────────────────────────────────────────────
|
||||
{ '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', desc = 'LSP: Signature Documentation' },
|
||||
{ 'K', '<cmd>Lspsaga hover_doc<cr>', desc = 'LSPSaga: Hover Documentation' },
|
||||
{ 'dn', '<cmd>lua vim.diagnostic.goto_next()<CR>', desc = 'Diagnostic: Goto Next' },
|
||||
{ 'dp', '<cmd>lua vim.diagnostic.goto_prev()<CR>', desc = 'Diagnostic: Goto Prev' },
|
||||
{ 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', desc = 'LSP: Goto Declaration' },
|
||||
{ 'gI', '<cmd>lua vim.lsp.buf.implementation()<CR>', desc = 'LSP: Goto Implementation' },
|
||||
{ 'gR', '<cmd>Trouble lsp_references<cr>', desc = 'Toggle LSP References' },
|
||||
{ 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', desc = 'LSP: Goto Definition' },
|
||||
{ 'gr', '<cmd>lua require("telescope.builtin").lsp_references()<CR>', desc = 'LSP: Goto References' },
|
||||
{
|
||||
'<C-k>',
|
||||
'<cmd>lua vim.lsp.buf.signature_help()<CR>',
|
||||
desc = 'LSP: Signature Documentation',
|
||||
},
|
||||
{
|
||||
'K',
|
||||
'<cmd>Lspsaga hover_doc<cr>',
|
||||
desc = 'LSPSaga: Hover Documentation',
|
||||
},
|
||||
|
||||
{ 'd', group = 'Diagnostics' },
|
||||
{
|
||||
{
|
||||
'dn',
|
||||
'<cmd>lua vim.diagnostic.goto_next()<CR>',
|
||||
desc = 'Diagnostic: Goto Next',
|
||||
},
|
||||
{
|
||||
'dp',
|
||||
'<cmd>lua vim.diagnostic.goto_prev()<CR>',
|
||||
desc = 'Diagnostic: Goto Prev',
|
||||
},
|
||||
},
|
||||
{
|
||||
{ 'g', group = 'Goto' },
|
||||
{
|
||||
'gD',
|
||||
'<cmd>lua vim.lsp.buf.declaration()<CR>',
|
||||
desc = 'LSP: Goto Declaration',
|
||||
},
|
||||
{
|
||||
'gI',
|
||||
'<cmd>lua vim.lsp.buf.implementation()<CR>',
|
||||
desc = 'LSP: Goto Implementation',
|
||||
},
|
||||
{
|
||||
'gR',
|
||||
'<cmd>Trouble lsp_references<cr>',
|
||||
desc = 'Toggle LSP References',
|
||||
},
|
||||
{
|
||||
'gd',
|
||||
'<cmd>lua vim.lsp.buf.definition()<CR>',
|
||||
desc = 'LSP: Goto Definition',
|
||||
},
|
||||
{
|
||||
'gr',
|
||||
'<cmd>lua require("telescope.builtin").lsp_references()<CR>',
|
||||
desc = 'LSP: Goto References',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Misc keybinds ───────────────────────────────────────────────────
|
||||
-- Sublime-like shortcut 'go to file' ctrl+p.
|
||||
{ '<C-p>', '<cmd>Telescope find_files<CR>', desc = 'Search for files starting at current directory.' },
|
||||
{
|
||||
'<C-p>',
|
||||
'<cmd>Telescope find_files<CR>',
|
||||
desc = 'Search for files starting at current directory.',
|
||||
},
|
||||
{ 'QQ', '<cmd>q!<CR>', desc = 'Quit without saving' },
|
||||
{ 'WW', '<cmd>w!<CR>', desc = 'Force write to file' },
|
||||
{ 'ss', '<cmd>noh<CR>', desc = 'Clear Search Highlighting' },
|
||||
{ 'jj', '<Esc>', desc = 'Esc without touching esc in insert mode', mode = 'i' },
|
||||
{
|
||||
'jj',
|
||||
'<Esc>',
|
||||
desc = 'Esc without touching esc in insert mode',
|
||||
mode = 'i',
|
||||
},
|
||||
|
||||
-- ── Splits ──────────────────────────────────────────────────────────
|
||||
-- Use CTRL+<hjkl> to switch between windows in normal mode
|
||||
@@ -290,12 +592,13 @@ return {
|
||||
{ '<down>', '<cmd>echo "Use j to move!!"<CR>' },
|
||||
|
||||
-- ── Terminal ────────────────────────────────────────────────────────
|
||||
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
|
||||
-- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which
|
||||
-- is not what someone will guess without a bit more experience.
|
||||
-- Exit terminal mode in the builtin terminal with a shortcut that is
|
||||
-- a bit easier for people to discover. Otherwise, you normally need
|
||||
-- to press <C-\><C-n>, which is not what someone will guess without
|
||||
-- a bit more experience.
|
||||
--
|
||||
-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
|
||||
-- or just use <C-\><C-n> to exit terminal mode.
|
||||
-- NOTE: This won't work in all terminal emulators/tmux/etc.
|
||||
-- Try your own mapping or just use <C-\><C-n> to exit terminal mode.
|
||||
{ '<Esc><Esc>', '<C-\\><C-n>', desc = 'Exit terminal mode', mode = 't' },
|
||||
|
||||
-- ── Search ──────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user