diff --git a/config/nvim/init.lua b/config/nvim/init.lua index fa81d65..3dff0bf 100644 --- a/config/nvim/init.lua +++ b/config/nvim/init.lua @@ -5,7 +5,7 @@ -- ── Install lazylazy ──────────────────────────────────────────────── -- https://github.com/folke/lazy.nvim local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' -if not (vim.uv or vim.loop).fs_stat(lazypath) then +if not vim.loop.fs_stat(lazypath) then local lazyrepo = 'https://github.com/folke/lazy.nvim.git' local out = vim.fn.system { 'git', @@ -58,4 +58,6 @@ require('lazy').setup( } ) +require 'keymaps' + -- vim: ts=2 sts=2 sw=2 et diff --git a/config/nvim/lua/autogroups.lua b/config/nvim/lua/autogroups.lua index e2e74ef..3dbade9 100644 --- a/config/nvim/lua/autogroups.lua +++ b/config/nvim/lua/autogroups.lua @@ -5,7 +5,7 @@ local augroup = vim.api.nvim_create_augroup -- Create/get autocommand group local autocmd = vim.api.nvim_create_autocmd -- Create autocommand --- ── Highlight on yank ─────────────────────────────────────────────── +-- Highlight on yank -- See `:help vim.highlight.on_yank()` autocmd('TextYankPost', { callback = function() vim.highlight.on_yank() end, @@ -13,7 +13,18 @@ autocmd('TextYankPost', { pattern = '*', }) --- ── Windows to close with "q" ─────────────────────────────────────── +-- Set the numberwidth to the maximum line number. +-- +-- This fixes the issue where the line numbers jump +-- around when moving between lines relative line numbers enabled. +autocmd({ "BufEnter", "BufWinEnter", "TabEnter" }, { + callback = function() + local max_line_count = vim.fn.line("$") + vim.opt.numberwidth = #tostring(max_line_count) + 1 + end, +}) + +-- Windows to close with "q" autocmd('FileType', { group = augroup('close_with_q', { clear = true }), pattern = { @@ -44,15 +55,15 @@ autocmd('FileType', { end, }) --- ── make it easier to close man-files when opened inline ──────────── +-- 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, }) --- ── wrap and check for spell in text filetypes ────────────────────── -vim.api.nvim_create_autocmd('FileType', { +-- wrap and check for spell in text filetypes +autocmd('FileType', { group = augroup('wrap_spell', { clear = true }), pattern = { 'text', 'plaintex', 'typst', 'gitcommit', 'markdown' }, callback = function() @@ -61,17 +72,29 @@ vim.api.nvim_create_autocmd('FileType', { end, }) --- ── Fix conceallevel for json files ───────────────────────────────── -vim.api.nvim_create_autocmd({ 'FileType' }, { +-- Fix conceallevel for json files +autocmd({ 'FileType' }, { group = augroup('json_conceal', { clear = true }), pattern = { 'json', 'jsonc', 'json5' }, callback = function() vim.opt_local.conceallevel = 0 end, }) -vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, { +-- Set filetype for SSH config directory +autocmd({ 'BufRead', 'BufNewFile' }, { desc = 'Set filetype for SSH config directory', pattern = '*/?.ssh/{config|shared}.d/*', command = 'set filetype=sshconfig', }) +-- Format on save, unless disabled +autocmd('BufWritePre', { + group = augroup('Format', { clear = true }), + pattern = '*', -- All files + callback = function() + if not vim.g.disable_autoformat then + vim.lsp.buf.format({ async = false }) + end + end, +}) + -- vim: ts=2 sts=2 sw=2 et diff --git a/config/nvim/lua/keymaps.lua b/config/nvim/lua/keymaps.lua new file mode 100644 index 0000000..33e25f2 --- /dev/null +++ b/config/nvim/lua/keymaps.lua @@ -0,0 +1,206 @@ +-- ╭─────────────────────────────────────────────────────────╮ +-- │ Function shortcuts for keymap set │ +-- ╰─────────────────────────────────────────────────────────╯ +-- vim: set ft=lua ts=2 sw=2 tw=0 et cc=80 : + +-- Keymap set shortcut +--@type vim.keymap.set +local s = vim.keymap.set + +-- Handle description +---@param desc string|table? Optional description. Can be a string or a table. +---@return table -- The description as a table. +local function handleDesc(desc) + if type(desc) == "string" then + -- Convert string to table with `desc` as a key + -- If the string is empty, just return as an empty description + return { desc = desc } + elseif type(desc) == "table" then + -- If desc doesn't have 'desc' key, combine it with + -- others with empty description + if not desc.desc then + desc.desc = '' + return desc + end + -- Use the table as is + return desc + else + -- Default to an empty table if `desc` is nil or an unsupported type + return { desc = '' } + end +end + +-- Normal mode keymaps +---@param key string rhs, required +---@param cmd string|function lhs, required +---@param opts table? Options, optional +local n = function(key, cmd, opts) s('n', key, cmd, opts) end + +-- Leader keymap shortcut function +-- It prepends '' to the key +---@param key string rhs, required, but will be prepended with '' +---@param cmd string|function lhs, required +---@param opts table|string? Options (or just description), optional +local nl = function(key, cmd, opts) + opts = handleDesc(opts) + n('' .. key, cmd, opts) +end + +-- Local leader keymap shortcut function +-- It prepends '' to the key and uses desc from opts +---@param key string rhs, required, but will be prepended with '' +---@param cmd string|function lhs, required +---@param opts table|string description, required +local nld = function(key, cmd, opts) + opts = handleDesc(opts) + nl(key, cmd, opts) +end + +-- Keymap shortcut function with mode defined, good for sorting by rhs +---@param key string rhs, required +---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' } +---@param cmd string|function lhs, required +---@param opts string|table description, required +local d = function(key, mode, cmd, opts) + opts = handleDesc(opts) + s(mode, key, cmd, opts) +end + +-- Leader based keymap shortcut function with mode defined +---@param key string rhs, required, but will be prepended with '' +---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' } +---@param cmd string|function lhs, required +---@param opts string|table description (or opts), required +local ld = function(key, mode, cmd, opts) + opts = handleDesc(opts) + s(mode, '' .. key, cmd, opts) +end + +-- ╭─────────────────────────────────────────────────────────╮ +-- │ Keymaps │ +-- ╰─────────────────────────────────────────────────────────╯ + +-- Disable arrow keys in normal mode +n('', ':echo "Use h to move!!"') +n('', ':echo "Use l to move!!"') +n('', ':echo "Use k to move!!"') +n('', ':echo "Use j to move!!"') + +n('', ':w!', { desc = 'Save', noremap = true }) +n('', ':nohlsearch', { desc = 'Clear Search Highlighting' }) + +-- Buffer +nld('bd', ':lua MiniBufremove.delete()', 'Delete') +nld('bh', ':bprev', 'Prev') +nld('bj', ':bfirst', 'First') +nld('bk', ':blast', 'Last') +nld('bl', ':bnext', 'Next') +nld('bw', ':lua MiniBufremove.wipeout()', 'Wipeout') + +-- Code +nld('cg', ':lua require("neogen").generate()', 'Generate annotations') + +-- LSP +n('', ':lua vim.lsp.buf.signature_help()', { desc = 'Signature' }) +n('K', ':Lspsaga hover_doc', { desc = 'Hover Documentation' }) +ld('ca', 'n', ':Lspsaga code_action', 'Code Action') +ld('cci', 'n', ':Lspsaga incoming_calls', 'Incoming Calls') +ld('cco', 'n', ':Lspsaga outgoing_calls', 'Outgoing Calls') +ld('cd', 'n', ':Lspsaga show_line_diagnostics', 'Line Diagnostics') +ld('cf', { 'n', 'x' }, ':lua vim.lsp.buf.format()', 'Format') +ld('ci', 'n', ':Lspsaga implement', 'Implementations') +ld('cl', 'n', ':Lspsaga show_cursor_diagnostics', 'Cursor Diagnostics') +ld('cp', 'n', ':Lspsaga peek_definition', 'Peek Definition') +ld('cr', 'n', ':Lspsaga rename', 'Rename') +ld('cR', 'n', ':Lspsaga rename ++project', 'Rename Project wide') +ld('cs', 'n', ':Telescope lsp_document_symbols', 'LSP Document Symbols') +ld('ct', 'n', ':Lspsaga peek_type_definition', 'Peek Type Definition') +ld('cT', 'n', ':Telescope lsp_type_definitions', 'LSP Type Definitions') +ld('cu', 'n', ':Lspsaga preview_definition', 'Preview Definition') +ld('cv', 'n', ':Lspsaga diagnostic_jump_prev', 'Diagnostic Jump Prev') +ld('cw', 'n', ':Lspsaga diagnostic_jump_next', 'Diagnostic Jump Next') + +-- CommentBox keymaps +nld('cbb', 'CBccbox', 'CB: Box Title') +nld('cbd', 'CBd', 'CB: Remove a box') +nld('cbl', 'CBline', 'CB: Simple Line') +nld('cbm', 'CBllbox14', 'CB: Marked') +nld('cbt', 'CBllline', 'CB: Titled Line') + + +-- Telescope +nld('f', ':Telescope find_files', 'Find Files') +nld(',', ':Telescope buffers', 'Find existing buffers') +nld('/', function() + require('telescope.builtin').current_buffer_fuzzy_find( + require('telescope.themes').get_dropdown { + winblend = 20, + previewer = true, + } + ) +end, 'Fuzzily search in current buffer') + +nld('sc', ':Telescope commands', 'Commands') +nld('sd', ':Telescope diagnostics', 'Search Diagnostics') +nld('sg', ':Telescope live_grep', 'Search by Grep') +nld('sh', ':Telescope highlights', 'List Highlights') +nld('sk', ':Telescope keymaps', 'Search Keymaps') +nld('sl', ':Telescope luasnip', 'Search LuaSnip') +nld('so', ':Telescope oldfiles', 'Old Files') +nld('sp', + ':lua require("telescope").extensions.lazy_plugins.lazy_plugins()', + 'Lazy Plugins') +nld('sq', ':Telescope quickfix', 'Quickfix') +nld('ss', ':Telescope treesitter', 'Treesitter') +nld('st', ':TodoTelescope', 'Search Todos') +nld('sw', ':Telescope grep_string', 'Grep String') +nld('sx', ':Telescope import', 'Telescope: Import') + +-- Trouble +nld('xd', + ':Trouble document_diagnostics', 'Trouble: Document Diagnostics') +nld('xl', ':Trouble loclist', 'Trouble: Location List') +nld('xq', ':Trouble quickfix', 'Trouble: Quickfix') +nld('xw', + ':Trouble workspace_diagnostics', 'Trouble: Workspace Diagnostics') +nld('xx', ':Trouble diagnostics', 'Trouble: Diagnostic') + +-- Text manipulation +d('<', { 'n', 'v' }, '', { 'n', 'v' }, '>gv', 'Indent Right') +d('', { 'n', 'v' }, ":m '<-2gv=gv", 'Move Block Up') +d('', { 'n', 'v' }, ":m '>+1gv=gv", 'Move Block Down') + +-- Other functionality +nld('o', function() require('snacks').gitbrowse() end, 'Open repo in browser') + +-- Toggle settings +nld('tc', ':CloakToggle', 'Cloak: Toggle') +nld('te', ':Neotree toggle', 'Toggle Neotree') +nld( + 'tl', + ':lua vim.o.bg = vim.o.bg:get() == "light" and "dark" or "light"', + 'Toggle Light/Dark Mode' +) +nld('tn', ':Noice dismiss', 'Noice: Dismiss Notification') + +-- Splits +n(',', ':vertical resize -10', { desc = 'V Resize -' }) +n('.', ':vertical resize +10', { desc = 'V Resize +' }) +n('-', ':resize -5', { desc = 'H Resize -' }) +n('+', ':resize +5', { desc = 'H Resize +' }) +n('=', '=', { desc = 'Equal Size Splits' }) + +-- Deal with word wrap +n('k', + "v:count == 0 ? 'gk' : 'k'", + { desc = 'Move up', noremap = true, expr = true }) +n('j', + "v:count == 0 ? 'gj' : 'j'", + { desc = 'Move down', noremap = true, expr = true }) + +-- Quit +nld('qf', ':q', 'Quicker close split') +nld('qq', ':wq!', 'Quit with force saving') +nld('qw', ':wq', 'Write and quit') +nld('qQ', ':q!', 'Force quit without saving') diff --git a/config/nvim/lua/options.lua b/config/nvim/lua/options.lua index 6e62983..722a67c 100644 --- a/config/nvim/lua/options.lua +++ b/config/nvim/lua/options.lua @@ -2,36 +2,55 @@ -- │ neovim configuration options │ -- ╰─────────────────────────────────────────────────────────╯ -- See `:help vim.opt` +-- `:help vim.g` -- For more options, you can see `:help option-list` --- Enables the experimental nvim 0.5 features -vim.loader.enable() +local g = vim.g -- A table to store global variables +local o = vim.opt -- A table to store global options --- Map leader and local leader -vim.g.mapleader = ' ' -vim.g.maplocalleader = ' ' +vim.loader.enable() -- Enable the plugin loader --- Set the colorscheme and variants -vim.g.colors_theme = 'tokyonight' -vim.g.colors_variant_light = 'tokyonight-day' -vim.g.colors_variant_dark = 'tokyonight-storm' +-- vim.global +g.mapleader = ' ' -- Space as the leader key +g.maplocalleader = ' ' -- Space as the local leader key +g.colors_theme = 'tokyonight' -- Set the colorscheme +g.colors_variant_light = 'tokyonight-day' -- Set the light variant +g.colors_variant_dark = 'tokyonight-storm' -- Set the dark variant +g.editorconfig = true -- Make sure editorconfig support is enabled +g.loaded_perl_provider = 0 -- Disable perl provider +g.loaded_ruby_provider = 0 -- Disable ruby provider --- Make sure editorconfig support is enabled -vim.g.editorconfig = true +-- vim.options +o.breakindent = true -- Enable break indent +o.completeopt = 'menuone,noselect' -- Popup menu when typing +o.cursorline = true -- Show which line your cursor is on +o.inccommand = 'split' -- Preview substitutions live, as you type! +o.mouse = 'a' -- Enable mouse support +o.number = true -- Show line numbers +o.numberwidth = 3 -- Set the width of the number column +o.relativenumber = true -- Show relative line numbers +o.scrolloff = 15 -- Show context around cursor +o.showmode = false -- Don't show mode +o.signcolumn = 'yes:2' -- Keep signcolumn on by default +o.smartindent = true -- Insert indents automatically +o.spell = true -- Enable spell checking +o.spelllang = 'en_us' -- Set the spell checking language +o.splitbelow = true -- split to the bottom +o.splitright = true -- vsplit to the right +o.termguicolors = true -- Fixes Notify opacity issues +o.timeoutlen = 250 -- Decrease mapped sequence wait time +o.undofile = true -- Save undo history +o.updatetime = 250 -- 250 ms = 2,5 seconds +o.ignorecase = true -- Ignore case in search patterns +o.smartcase = true -- Override 'ignorecase' if pattern contains upper case chars + + +o.list = true -- Show some invisible characters +o.listchars = { tab = '» ', trail = '·', nbsp = '␣' } -- Which invisible chars to show -- Enable the colorcolumn vim.api.nvim_set_option_value('colorcolumn', '+1', { scope = 'global' }) --- Enable line numbers and relative line numbers -vim.opt.number = true -vim.opt.relativenumber = true - --- Enable mouse mode, can be useful for resizing splits for example! -vim.opt.mouse = 'a' - --- Don't show the mode, since it's already in the status line -vim.opt.showmode = false - -- Sync clipboard between OS and Neovim. -- Schedule the setting after `UiEnter` because it can increase startup-time. -- See `:help 'clipboard'` @@ -40,95 +59,4 @@ vim.schedule(function() vim.opt.clipboard = c end) -vim.opt.breakindent = true -- Enable break indent -vim.opt.smartindent = true -- Insert indents automatically - --- Save undo history -vim.opt.undofile = true - --- Case-insensitive searching UNLESS \C or one or --- more capital letters in the search term -vim.opt.ignorecase = true -vim.opt.smartcase = true - --- Keep signcolumn on by default -vim.opt.signcolumn = 'yes' - --- Decrease update time -vim.opt.updatetime = 250 -vim.wo.signcolumn = 'yes' - --- Decrease mapped sequence wait time --- Displays which-key popup sooner -vim.opt.timeoutlen = 250 - --- Configure how new splits should be opened -vim.opt.splitright = true -vim.opt.splitbelow = true - --- Sets how neovim will display certain whitespace characters in the editor. --- See `:help 'list'` --- and `:help 'listchars'` -vim.opt.list = true -vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' } - --- Preview substitutions live, as you type! -vim.opt.inccommand = 'split' - --- Show which line your cursor is on -vim.opt.cursorline = true - --- Minimal number of screen lines to keep above and below the cursor. -vim.opt.scrolloff = 15 - --- Set completeopt to have a better completion experience -vim.o.completeopt = 'menuone,noselect' - --- Fixes Notify opacity issues -vim.o.termguicolors = true - --- Set spell checking -vim.o.spell = true -vim.o.spelllang = 'en_us' - --- Tree-sitter settings -vim.g.loaded_perl_provider = 0 -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 --- 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 - --- anuvyklack/windows.nvim settings -vim.o.winwidth = 15 -vim.o.winminwidth = 10 -vim.o.equalalways = false - --- folke/noice.nvim settings -vim.g.noice_ignored_filetypes = { - 'fugitiveblame', - 'fugitive', - 'gitcommit', - 'noice', -} - --- ── 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 } -) - -- vim: ts=2 sts=2 sw=2 et diff --git a/config/nvim/lua/plugins/blink.lua b/config/nvim/lua/plugins/blink.lua new file mode 100644 index 0000000..d5296dd --- /dev/null +++ b/config/nvim/lua/plugins/blink.lua @@ -0,0 +1,117 @@ +return { + -- Performant, batteries-included completion plugin for Neovim + -- https:/github.com/saghen/blink.cmp + { + 'saghen/blink.cmp', + version = '*', + lazy = false, -- lazy loading handled internally + dependencies = { + -- Compatibility layer for using nvim-cmp sources on blink.cmp + -- https://github.com/Saghen/blink.compat + { + 'saghen/blink.compat', + version = '*', + -- lazy.nvim will automatically load the plugin when it's required by blink.cmp + lazy = true, + opts = { + -- make sure to set opts so that lazy.nvim calls blink.compat's setup + impersonate_nvim_cmp = true, + }, + }, + -- Set of preconfigured snippets for different languages. + -- https://github.com/rafamadriz/friendly-snippets + { 'rafamadriz/friendly-snippets' }, + -- Lua plugin to turn github copilot into a cmp source + -- https://github.com/giuxtaposition/blink-cmp-copilot + { + "giuxtaposition/blink-cmp-copilot", + dependencies = { + -- Fully featured & enhanced replacement for copilot.vim complete + -- with API for interacting with Github Copilot + -- https://github.com/zbirenbaum/copilot.lua + { + 'zbirenbaum/copilot.lua', + cmd = 'Copilot', + build = ':Copilot setup', + event = { 'InsertEnter', 'LspAttach' }, + opts = { + fix_pairs = true, + suggestion = { enabled = false }, + panel = { enabled = false }, + filetypes = { + markdown = true, + }, + }, + }, + }, + }, + }, + ---@module 'blink.cmp' + ---@type blink.cmp.Config + opts = { + -- 'default' for mappings similar to built-in completion + -- 'super-tab' for mappings similar to vscode (tab to accept, arrow keys to navigate) + -- 'enter' for mappings similar to 'super-tab' but with 'enter' to accept + -- see the "default configuration" section below for full documentation on how to define + -- your own keymap. + keymap = { + preset = 'super-tab', + -- Use Ctrl-x to trigger auto completion + [''] = { 'show', 'show_documentation', 'hide_documentation' }, + }, + + appearance = { + -- Sets the fallback highlight groups to nvim-cmp's highlight groups + -- Useful for when your theme doesn't support blink.cmp + -- will be removed in a future release + use_nvim_cmp_as_default = true, + -- Set to 'mono' for 'Nerd Font Mono' or 'normal' for 'Nerd Font' + -- Adjusts spacing to ensure icons are aligned + nerd_font_variant = vim.g.nerd_font_variant or 'mono', + }, + + completion = { + menu = { + draw = { + columns = { { "label", "label_description", gap = 1 }, { "kind_icon", "kind", gap = 1 } }, + }, + }, + documentation = { + auto_show = true + }, + ghost_text = { + enabled = false, + }, + }, + + -- default list of enabled providers defined so that you can extend it + -- elsewhere in your config, without redefining it, via `opts_extend` + sources = { + providers = { + copilot = { + name = 'copilot', + module = 'blink-cmp-copilot' + }, + }, + completion = { + enabled_providers = { + 'lsp', + 'copilot', + 'path', + 'snippets', + 'buffer', + }, + }, + }, + + -- experimental auto-brackets support + -- completion = { accept = { auto_brackets = { enabled = true } } } + + -- experimental signature help support + signature = { enabled = true } + }, + -- allows extending the enabled_providers array elsewhere in your config + -- without having to redefine it + opts_extend = { "sources.completion.enabled_providers" }, + }, +} diff --git a/config/nvim/lua/plugins/cmp.lua b/config/nvim/lua/plugins/cmp.lua deleted file mode 100644 index 0254a2b..0000000 --- a/config/nvim/lua/plugins/cmp.lua +++ /dev/null @@ -1,235 +0,0 @@ --- Auto completion --- https://github.com/hrsh7th/nvim-cmp -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 - { - 'L3MON4D3/LuaSnip', - version = '*', - event = 'BufReadPre', - build = 'make install_jsregexp', - dependencies = { - -- luasnip completion source for nvim-cmp - -- https://github.com/saadparwaiz1/cmp_luasnip - 'saadparwaiz1/cmp_luasnip', - 'rafamadriz/friendly-snippets', - 'molleweide/LuaSnip-snippets.nvim', - }, - }, - - -- ── Adds other completion capabilities. ───────────────────────────── - -- ── nvim-cmp does not ship with all sources by default. - -- ── They are split into multiple repos for maintenance purposes. - { 'hrsh7th/cmp-nvim-lsp' }, - { 'hrsh7th/cmp-buffer' }, - { 'hrsh7th/cmp-path' }, - { 'hrsh7th/cmp-nvim-lsp-signature-help' }, - { 'hrsh7th/cmp-emoji' }, - { 'hrsh7th/cmp-cmdline' }, - -- cmp import and use all environment variables from .env.* and system - -- https://github.com/SergioRibera/cmp-dotenv - { 'SergioRibera/cmp-dotenv' }, - -- A dictionary completion source for nvim-cmp - -- https://github.com/uga-rosa/cmp-dictionary - { 'uga-rosa/cmp-dictionary' }, - -- An additional source for nvim-cmp to autocomplete packages and its versions - -- https://github.com/David-Kunz/cmp-npm - { - 'David-Kunz/cmp-npm', - dependencies = { 'nvim-lua/plenary.nvim' }, - ft = 'json', - opts = {}, - }, - -- https://github.com/chrisgrieser/cmp-nerdfont - { 'chrisgrieser/cmp-nerdfont' }, - - -- ── Other deps ────────────────────────────────────────────────────── - -- vscode-like pictograms for neovim lsp completion items - -- https://github.com/onsails/lspkind.nvim - { 'onsails/lspkind.nvim' }, - -- Lua plugin to turn github copilot into a cmp source - -- https://github.com/zbirenbaum/copilot-cmp - { - 'zbirenbaum/copilot-cmp', - dependencies = { - -- Fully featured & enhanced replacement for copilot.vim complete - -- with API for interacting with Github Copilot - -- https://github.com/zbirenbaum/copilot.lua - { - 'zbirenbaum/copilot.lua', - cmd = 'Copilot', - build = ':Copilot setup', - event = { 'InsertEnter', 'LspAttach' }, - opts = { - fix_pairs = true, - suggestion = { enabled = false }, - panel = { enabled = false }, - filetypes = { - markdown = true, - help = true, - }, - }, - }, - }, - config = function() require('copilot_cmp').setup() end, - }, - }, - config = function() - local cmp = require 'cmp' - local luasnip = require 'luasnip' - local lspkind = require 'lspkind' - luasnip.config.setup {} - luasnip.snippets = require('luasnip_snippets').load_snippets() - require('luasnip.loaders.from_vscode').lazy_load() - - require('copilot_cmp').setup() - - require('cmp_dictionary').setup { - paths = { '/usr/share/dict/words' }, - exact_length = 2, - } - - local has_words_before = function() - 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 - end - - cmp.setup { - formatting = { - format = lspkind.cmp_format { - mode = 'symbol', - max_width = function() return math.floor(0.45 * vim.o.columns) end, - show_labelDetails = true, - symbol_map = { - Copilot = '', - Text = '', - Constructor = '', - }, - }, - }, - window = { - completion = cmp.config.window.bordered(), - documentation = cmp.config.window.bordered(), - }, - view = { - width = function(_, _) return math.min(80, vim.o.columns) end, - -- entries = { - -- name = 'custom', - -- selection_order = 'near_cursor', - -- }, - }, - snippet = { - expand = function(args) luasnip.lsp_expand(args.body) end, - }, - mapping = cmp.mapping.preset.insert { - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - -- Manually trigger a completion from nvim-cmp. - -- Generally you don't need this, because nvim-cmp will display - -- completions whenever it has completion options available. - [''] = cmp.mapping.complete(), - [''] = cmp.mapping.confirm { - behavior = cmp.ConfirmBehavior.Replace, - select = true, - }, - [''] = cmp.mapping(function(fallback) - if cmp.visible() and has_words_before() then - cmp.select_next_item { behavior = cmp.SelectBehavior.Select } - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - else - fallback() - end - end, { 'i', 's' }), - [''] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - elseif luasnip.jumpable(-1) then - luasnip.jump(-1) - else - fallback() - end - end, { 'i', 's' }), - }, - sources = { - -- function arg popups while typing - { name = 'nvim_lsp_signature_help', group_index = 2 }, - - -- Copilot Source - { name = 'copilot', group_index = 2 }, - -- Other Sources - { name = 'dictionary', keyword_length = 2, group_index = 2 }, - { name = 'npm', keyword_length = 4, group_index = 2 }, - { name = 'nvim_lsp', group_index = 2 }, - { name = 'luasnip', group_index = 2 }, - { name = 'dotenv', group_index = 2 }, - { name = 'path', group_index = 2 }, - { name = 'emoji', group_index = 2 }, - { name = 'nerdfont', group_index = 2 }, - }, - sorting = { - priority_weight = 2, - comparators = { - require('copilot_cmp.comparators').prioritize, - - -- Below is the default comparator list and order for nvim-cmp - cmp.config.compare.offset, - cmp.config.compare.scopes, --this is commented in nvim-cmp too - cmp.config.compare.exact, - cmp.config.compare.score, - cmp.config.compare.recently_used, - cmp.config.compare.locality, - cmp.config.compare.kind, - cmp.config.compare.sort_text, - cmp.config.compare.length, - cmp.config.compare.order, - }, - }, - } - - cmp.setup.cmdline({ '/', '?' }, { - mapping = cmp.mapping.preset.cmdline(), - sources = { - { name = 'buffer' }, - }, - }) - - -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). - cmp.setup.cmdline(':', { - mapping = cmp.mapping.preset.cmdline(), - sources = cmp.config.sources({ - { name = 'path' }, - }, { - { name = 'cmdline' }, - }), - matching = { disallow_symbol_nonprefix_matching = false }, - }) - end, - }, - -- Luasnip choice node completion source for nvim-cmp - -- https://github.com/doxnit/cmp-luasnip-choice - { - 'doxnit/cmp-luasnip-choice', - config = function() - require('cmp_luasnip_choice').setup { - auto_open = true, -- Automatically open nvim-cmp on choice node (default: true) - } - end, - }, -} diff --git a/config/nvim/lua/plugins/comment.lua b/config/nvim/lua/plugins/comment.lua deleted file mode 100644 index 5f37fd1..0000000 --- a/config/nvim/lua/plugins/comment.lua +++ /dev/null @@ -1,9 +0,0 @@ --- Commenting --- "gc" to comment visual regions/lines --- https://github.com/numToStr/Comment.nvim -return { - 'numToStr/Comment.nvim', - version = '*', - event = { 'BufRead', 'BufNewFile' }, - opts = {}, -} diff --git a/config/nvim/lua/plugins/conform.lua b/config/nvim/lua/plugins/conform.lua deleted file mode 100644 index 48cb9b9..0000000 --- a/config/nvim/lua/plugins/conform.lua +++ /dev/null @@ -1,86 +0,0 @@ --- ── Formatting ────────────────────────────────────────────────────── --- Lightweight yet powerful formatter plugin for Neovim --- https://github.com/stevearc/conform.nvim - -return { - { - 'stevearc/conform.nvim', - event = { 'BufWritePre' }, - cmd = { 'ConformInfo' }, - opts = { - -- Enable or disable logging - notify_on_error = false, - -- 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 = {}, - }, - -- The options you set here will be merged with the builtin formatters. - -- You can also define any custom formatters here. - formatters = { - injected = { options = { ignore_errors = true } }, - -- # Example of using dprint only when a dprint.json file is present - -- dprint = { - -- condition = function(ctx) - -- return vim.fs.find({ "dprint.json" }, { path = ctx.filename, upward = true })[1] - -- end, - -- }, - -- - -- # Example of using shfmt with extra args - -- shfmt = { - -- prepend_args = { "-i", "2", "-ci" }, - -- }, - }, - formatters_by_ft = { - lua = { 'stylua' }, - -- Conform will run multiple formatters sequentially - go = { 'goimports', 'gofmt' }, - -- 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, - }, - 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', - depends = { - 'stevearc/conform.nvim', - 'williamboman/mason.nvim', - }, - opts = {}, - }, -} diff --git a/config/nvim/lua/plugins/flash.lua b/config/nvim/lua/plugins/flash.lua deleted file mode 100644 index fc0e1b9..0000000 --- a/config/nvim/lua/plugins/flash.lua +++ /dev/null @@ -1,42 +0,0 @@ --- Navigate your code with search labels, enhanced --- character motions and Treesitter integration --- https://github.com/folke/flash.nvim -return { - 'folke/flash.nvim', - event = 'VeryLazy', - opts = {}, - keys = { - { - 'zk', - mode = { 'n', 'x', 'o' }, - function() require('flash').jump() end, - desc = 'Flash', - }, - { - 'Zk', - mode = { 'n', 'x', 'o' }, - function() require('flash').treesitter() end, - desc = 'Flash Treesitter', - }, - { - 'r', - mode = 'o', - function() require('flash').remote() end, - desc = 'Remote Flash', - }, - { - 'R', - mode = { 'o', 'x' }, - function() require('flash').treesitter_search() end, - desc = 'Treesitter Search', - }, - { - '', - mode = { 'c' }, - function() require('flash').toggle() end, - desc = 'Toggle Flash Search', - }, - }, -} - --- vim: ts=2 sts=2 sw=2 et diff --git a/config/nvim/lua/plugins/folke.lua b/config/nvim/lua/plugins/folke.lua new file mode 100644 index 0000000..c75ec82 --- /dev/null +++ b/config/nvim/lua/plugins/folke.lua @@ -0,0 +1,69 @@ +return { + -- A collection of small QoL plugins for Neovim + -- https://github.com/folke/snacks.nvim + { + "folke/snacks.nvim", + priority = 1000, + lazy = false, + ---@type snacks.Config + opts = { + bigfile = { enabled = true }, + gitbrowse = { enabled = true }, + notify = { enabled = true }, + notifier = { enabled = true }, + quickfile = { enabled = true }, + statuscolumn = { enabled = true }, + words = { enabled = true }, + styles = { + notification = { + wo = { wrap = true } -- Wrap notifications + } + } + }, + }, + -- A pretty diagnostics, references, telescope results, + -- quickfix and location list to help you solve all the + -- trouble your code is causing. + -- https://github.com/folke/trouble.nvim + { + 'folke/trouble.nvim', + lazy = false, + dependencies = { 'nvim-tree/nvim-web-devicons' }, + ---@type trouble.Config + opts = { + auto_preview = true, + auto_fold = true, + auto_close = true, + use_lsp_diagnostic_signs = true, + }, + }, + -- Navigate your code with search labels, enhanced + -- character motions and Treesitter integration + -- https://github.com/folke/flash.nvim + { + 'folke/flash.nvim', + event = 'VeryLazy', + ---@type Flash.Config + opts = {}, + keys = { + { + 'zk', + mode = { 'n', 'x', 'o' }, + function() require('flash').jump() end, + desc = 'Flash', + }, + { + 'Zk', + mode = { 'n', 'x', 'o' }, + function() require('flash').treesitter() end, + desc = 'Flash Treesitter', + }, + { + '', + mode = { 'c' }, + function() require('flash').toggle() end, + desc = 'Toggle Flash Search', + }, + }, + }, +} diff --git a/config/nvim/lua/plugins/goto-preview.lua b/config/nvim/lua/plugins/goto-preview.lua deleted file mode 100644 index 858301d..0000000 --- a/config/nvim/lua/plugins/goto-preview.lua +++ /dev/null @@ -1,31 +0,0 @@ --- A small Neovim plugin for previewing definitions using floating windows. --- https://github.com/rmagatti/goto-preview -return { - 'rmagatti/goto-preview', - dependencies = { - { 'nvim-telescope/telescope.nvim' }, - }, - opts = { - width = 120, -- Width of the floating window - height = 15, -- Height of the floating window - border = { '↖', '─', '┐', '│', '┘', '─', '└', '│' }, -- Border characters of the floating window - default_mappings = true, - debug = false, -- Print debug information - opacity = nil, -- 0-100 opacity level of the floating window where 100 is fully transparent. - resizing_mappings = false, -- Binds arrow keys to resizing the floating window. - post_open_hook = nil, -- A function taking two arguments, a buffer and a window to be ran as a hook. - references = { -- Configure the telescope UI for slowing the references cycling window. - telescope = require('telescope.themes').get_dropdown { - hide_preview = false, - }, - }, - -- These two configs can also be passed down to the goto-preview definition - -- and implementation calls for one off "peak" functionality. - focus_on_open = true, -- Focus the floating window when opening it. - dismiss_on_move = false, -- Dismiss the floating window when moving the cursor. - force_close = true, -- passed into vim.api.nvim_win_close's second argument. See :h nvim_win_close - bufhidden = 'wipe', -- the bufhidden option to set on the floating window. See :h bufhidden - stack_floating_preview_windows = true, -- Whether to nest floating windows - preview_window_title = { enable = true, position = 'left' }, - }, -} diff --git a/config/nvim/lua/plugins/harpoon.lua b/config/nvim/lua/plugins/harpoon.lua deleted file mode 100644 index 206cf6d..0000000 --- a/config/nvim/lua/plugins/harpoon.lua +++ /dev/null @@ -1,47 +0,0 @@ --- Getting you where you want with the fewest keystrokes. --- https://github.com/ThePrimeagen/harpoon -return { - 'ThePrimeagen/harpoon', - branch = 'harpoon2', - dependencies = { - 'nvim-lua/plenary.nvim', - 'nvim-telescope/telescope.nvim', - }, - config = function() - local harpoon = require 'harpoon' - harpoon:setup {} - - -- basic telescope configuration - local conf = require('telescope.config').values - local function toggle_telescope(harpoon_files) - local file_paths = {} - for _, item in ipairs(harpoon_files.items) do - table.insert(file_paths, item.value) - end - - require('telescope.pickers') - .new({}, { - prompt_title = 'Harpoon', - finder = require('telescope.finders').new_table { - results = file_paths, - }, - previewer = conf.file_previewer {}, - sorter = conf.generic_sorter {}, - }) - :find() - end - - vim.keymap.set( - 'n', - 'hw', - function() toggle_telescope(harpoon:list()) end, - { desc = 'Open harpoon window with telescope' } - ) - vim.keymap.set( - 'n', - 'ht', - function() harpoon.ui:toggle_quick_menu(harpoon:list()) end, - { desc = 'Open Harpoon Quick menu' } - ) - end, -} diff --git a/config/nvim/lua/plugins/lsp-saga.lua b/config/nvim/lua/plugins/lsp-saga.lua deleted file mode 100644 index aec604f..0000000 --- a/config/nvim/lua/plugins/lsp-saga.lua +++ /dev/null @@ -1,21 +0,0 @@ --- improve neovim lsp experience --- https://github.com/nvimdev/lspsaga.nvim --- https://nvimdev.github.io/lspsaga/ -return { - 'nvimdev/lspsaga.nvim', - event = 'LspAttach', - dependencies = { - 'nvim-treesitter/nvim-treesitter', -- optional - 'nvim-tree/nvim-web-devicons', -- optional - }, - opts = { - code_action = { - show_server_name = true, - }, - diagnostic = { - keys = { - quit = { 'q', '' }, - }, - }, - }, -} diff --git a/config/nvim/lua/plugins/lsp.lua b/config/nvim/lua/plugins/lsp.lua index dae4514..67ba541 100644 --- a/config/nvim/lua/plugins/lsp.lua +++ b/config/nvim/lua/plugins/lsp.lua @@ -1,239 +1,189 @@ --- ── Mason and LSPConfig integration ──────────────────────────────────── - --- ── LSP settings. ─────────────────────────────────────────────── --- This function gets run when an LSP connects to a particular buffer. - --- Make runtime files discoverable to the server -local runtime_path = vim.split(package.path, ';') -table.insert(runtime_path, 'lua/?.lua') -table.insert(runtime_path, 'lua/?/init.lua') - --- nvim-cmp supports additional completion capabilities -local capabilities = vim.lsp.protocol.make_client_capabilities() -capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) --- Tell the server the capability of foldingRange, --- Neovim hasn't added foldingRange to default capabilities, users must add it manually -capabilities.textDocument.foldingRange = { - dynamicRegistration = true, - lineFoldingOnly = true, -} - return { + -- improve neovim lsp experience + -- https://github.com/nvimdev/lspsaga.nvim + -- https://nvimdev.github.io/lspsaga/ { - 'folke/neoconf.nvim', - cmd = 'Neoconf', - opts = {}, - }, - -- Portable package manager for Neovim that runs everywhere Neovim runs. - -- Easily install and manage LSP servers, DAP servers, linters, and formatters. - -- https://github.com/williamboman/mason.nvim - { - 'williamboman/mason.nvim', - cmd = 'Mason', - run = ':MasonUpdate', + 'nvimdev/lspsaga.nvim', + event = 'LspAttach', + dependencies = { + 'nvim-treesitter/nvim-treesitter', + 'nvim-tree/nvim-web-devicons', + }, opts = { - PATH = 'prepend', - -- Mason servers to install - -- See: https://mason-registry.dev/registry/list - ensure_installed = { - 'clang-format', - 'codespell', - 'commitlint', - 'editorconfig-checker', - 'fixjson', - 'jsonlint', - 'luacheck', - 'phpcbf', - 'phpcs', - 'phpmd', - 'prettier', - 'shellcheck', - 'shfmt', - 'stylua', - 'yamllint', + code_action = { + show_server_name = true, + keys = { + quit = { 'q', '' }, + }, + }, + diagnostic = { + keys = { + quit = { 'q', '' }, + }, }, }, }, - -- Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim. - -- https://github.com/williamboman/mason-lspconfig.nvim + -- A simple wrapper for nvim-lspconfig and mason-lspconfig + -- to easily setup LSP servers. + -- https://github.com/junnplus/lsp-setup.nvim { - 'williamboman/mason-lspconfig.nvim', + 'junnplus/lsp-setup.nvim', + dependencies = { + 'neovim/nvim-lspconfig', + { 'williamboman/mason.nvim', cmd = 'Mason', run = ':MasonUpdate' }, + 'williamboman/mason-lspconfig.nvim', + 'folke/neodev.nvim', + 'b0o/schemastore.nvim', + 'saghen/blink.cmp', + }, opts = { - -- ── Enable the following language servers ─────────────────────────── - -- :help lspconfig-all for all pre-configured LSPs - ensure_installed = { - 'bashls', - -- 'csharp_ls', - 'diagnosticls', - 'gopls', - 'html', - 'intelephense', - 'jsonls', - 'lua_ls', - 'tailwindcss', - 'ts_ls', - 'vimls', - 'volar', + default_mappings = false, + mappings = { + gd = 'lua require"telescope.builtin".lsp_definitions()', + gi = 'lua require"telescope.builtin".lsp_implementations()', + gr = 'lua require"telescope.builtin".lsp_references()', }, - automatic_installation = true, - handlers = { - -- The first entry (without a key) will be the default handler - -- and will be called for each installed server that doesn't have - -- a dedicated handler. - function(server_name) -- default handler (optional) - require('lspconfig')[server_name].setup { - 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, - } - end, - { desc = 'Format current buffer with LSP' } - ) - end, - capabilities = capabilities, - } - end, - -- Next, you can provide targeted overrides for specific servers. - ['lua_ls'] = function() - require('lspconfig')['lua_ls'].setup { - 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, - } - end, - { desc = 'Format current buffer with LSP' } - ) - end, - capabilities = capabilities, - settings = { - Lua = { - runtime = { - -- Tell the language server which version of Lua you're - -- using (most likely LuaJIT) - version = 'LuaJIT', - -- Setup your lua path - path = runtime_path, + inlay_hints = { + enabled = true, + }, + servers = { + bashls = {}, + -- csharp_ls = {}, + diagnosticls = {}, + gopls = { + settings = { + gopls = { + hints = { + rangeVariableTypes = true, + parameterNames = true, + constantValues = true, + assignVariableTypes = true, + compositeLiteralFields = true, + compositeLiteralTypes = true, + functionTypeParameters = true, + }, + }, + }, + }, + html = {}, + intelephense = {}, + jsonls = {}, + lua_ls = { + settings = { + Lua = { + diagnostics = { + globals = { 'vim' }, + disable = { + -- Ignore lua_ls noisy `missing-fields` warnings + 'missing-fields', }, - diagnostics = { - globals = { 'vim' }, - disable = { - -- Ignore lua_ls noisy `missing-fields` warnings - 'missing-fields', - }, + }, + hint = { + enable = false, + arrayIndex = 'Auto', + await = true, + paramName = 'All', + paramType = true, + semicolon = 'SameLine', + setType = false, + }, + }, + }, + }, + tailwindcss = {}, + ts_ls = { + settings = { + typescript = { + inlayHints = { + includeInlayParameterNameHints = 'all', + includeInlayParameterNameHintsWhenArgumentMatchesName = false, + includeInlayFunctionParameterTypeHints = true, + includeInlayVariableTypeHints = true, + includeInlayVariableTypeHintsWhenTypeMatchesName = false, + includeInlayPropertyDeclarationTypeHints = true, + includeInlayFunctionLikeReturnTypeHints = true, + includeInlayEnumMemberValueHints = true, + }, + }, + }, + }, + vimls = {}, + volar = { + settings = { + typescript = { + inlayHints = { + enumMemberValues = { + enabled = true, }, - workspace = { - library = vim.api.nvim_get_runtime_file('', true), - checkThirdParty = false, + functionLikeReturnTypes = { + enabled = true, }, - -- Do not send telemetry data containing a randomized - -- but unique identifier - telemetry = { enable = false }, - - completion = { - callSnippet = 'Replace', + propertyDeclarationTypes = { + enabled = true, + }, + parameterTypes = { + enabled = true, + suppressWhenArgumentMatchesName = true, + }, + variableTypes = { + enabled = true, }, }, }, - } - end, - ['jsonls'] = function() - require('lspconfig')['jsonls'].setup { - 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, - } - end, - { desc = 'Format current buffer with LSP' } - ) - end, - capabilities = capabilities, - settings = { - json = { - schemas = require('schemastore').json.schemas(), - validate = { enable = true }, - }, - yaml = { - schemaStore = { - -- You must disable built-in SchemaStore support if you want to use - -- this plugin and its advanced options like `ignore`. - enable = false, - -- Avoid TypeError: Cannot read properties of undefined (reading 'length') - url = '', - }, - schemas = require('schemastore').yaml.schemas(), - validate = { enable = true }, - }, - }, - } - end, - ['ts_ls'] = function() - local mason_registry = require 'mason-registry' - local ts_plugin_location = mason_registry - .get_package('vue-language-server') - :get_install_path() .. '/node_modules/@vue/typescript-plugin' - require('lspconfig')['volar'].setup { - init_options = { - plugins = { - { - name = '@vue/typescript-plugin', - location = ts_plugin_location, - languages = { 'javascript', 'typescript', 'vue' }, - }, - }, - }, - filetypes = { - 'typescript', - 'javascript', - 'javascriptreact', - 'typescriptreact', - 'vue', - }, - } - end, + }, + }, }, }, - }, + config = function(_, opts) + require('neodev').setup() + require('lsp-setup').setup(opts) + local lspconfig = require('lspconfig') + for server, config in pairs(opts.servers) do + -- passing config.capabilities to blink.cmp merges with the capabilities in your + -- `opts[server].capabilities, if you've defined it + config.capabilities = require('blink.cmp').get_lsp_capabilities(config.capabilities) + lspconfig[server].setup(config) + end - -- ── Misc ─────────────────────────────────────────────────── - -- vscode-like pictograms for neovim lsp completion items - -- https://github.com/onsails/lspkind-nvim - { 'onsails/lspkind.nvim', opts = {} }, - -- JSON schemas for Neovim - -- https://github.com/b0o/SchemaStore.nvim - { 'b0o/schemastore.nvim' }, - - -- ── LSP ──────────────────────────────────────────────────── - -- Quick start configs for Nvim LSP - -- https://github.com/neovim/nvim-lspconfig - { 'neovim/nvim-lspconfig', dependencies = { 'folke/neoconf.nvim' } }, - - -- Garbage collector that stops inactive LSP clients to free RAM - -- https://github.com/Zeioth/garbage-day.nvim - { - 'zeioth/garbage-day.nvim', - dependencies = 'neovim/nvim-lspconfig', - event = 'VeryLazy', - opts = {}, + lspconfig.lua_ls.on_init = function(client) + if client.workspace_folders then + local path = client.workspace_folders[1].name + if vim.loop.fs_stat(path .. '/.luarc.json') or vim.loop.fs_stat(path .. '/.luarc.jsonc') then + return + end + end + client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, { + runtime = { + -- Tell the language server which version of Lua you're using + -- (most likely LuaJIT in the case of Neovim) + version = 'LuaJIT' + }, + -- Make the server aware of Neovim runtime files + workspace = { + checkThirdParty = false, + library = { + vim.env.VIMRUNTIME + } + } + }) + end + lspconfig.jsonls.settings = { + json = { + schemas = require('schemastore').json.schemas(), + validate = { enable = true }, + }, + yaml = { + schemaStore = { + -- You must disable built-in SchemaStore support if you want to use + -- this plugin and its advanced options like `ignore`. + enable = false, + -- Avoid TypeError: Cannot read properties of undefined (reading 'length') + url = '', + }, + schemas = require('schemastore').yaml.schemas(), + validate = { enable = true }, + }, + } + end, }, } diff --git a/config/nvim/lua/plugins/lualine.lua b/config/nvim/lua/plugins/lualine.lua deleted file mode 100644 index 9081c97..0000000 --- a/config/nvim/lua/plugins/lualine.lua +++ /dev/null @@ -1,70 +0,0 @@ --- Fancier statusline --- https://github.com/nvim-lualine/lualine.nvim -return { - 'nvim-lualine/lualine.nvim', - dependencies = { - 'kyazdani42/nvim-web-devicons', - 'folke/noice.nvim', - }, - config = function() - local function diff_source() - local gitsigns = vim.b.gitsigns_status_dict - if gitsigns then - return { - added = gitsigns.added, - modified = gitsigns.changed, - removed = gitsigns.removed, - } - end - end - - require('lualine').setup { - options = { - icons_enabled = true, - component_separators = '|', - section_separators = '', - }, - -- Sections - -- +-------------------------------------------------+ - -- | A | B | C X | Y | Z | - -- +-------------------------------------------------+ - sections = { - lualine_a = { - 'mode', - }, - lualine_b = { - { 'b:gitsigns_head', icon = '' }, - { 'diff', source = diff_source }, - 'diagnostics', - }, - lualine_c = { - 'filename', - }, - lualine_x = { - 'filetype', - }, - lualine_y = { - 'location', - }, - lualine_z = { - { - require('noice').api.statusline.mode.get, - cond = require('noice').api.statusline.mode.has, - }, - { - require('noice').api.status.command.get, - cond = require('noice').api.status.command.has, - }, - }, - }, - inactive_sections = { - lualine_a = {}, - lualine_b = {}, - lualine_c = { 'filename' }, - lualine_x = { 'location' }, - lualine_y = {}, - lualine_z = {}, - }, - } - end, -} diff --git a/config/nvim/lua/plugins/mini.lua b/config/nvim/lua/plugins/mini.lua index d400682..8d00f84 100644 --- a/config/nvim/lua/plugins/mini.lua +++ b/config/nvim/lua/plugins/mini.lua @@ -2,36 +2,139 @@ -- https://github.com/echasnovski/mini.nvim/tree/main?tab=readme-ov-file#modules return { -- Presets for common options and mappings - { 'echasnovski/mini.basics', version = '*' }, - - -- Visualize and work with indent scope - -- Replaced lukas-reineke/indent-blankline.nvim - { 'echasnovski/mini.indentscope', version = '*', opts = {} }, + { 'echasnovski/mini.basics', version = '*' }, -- Animate common Neovim actions -- Replaced anuvyklack/windows.nvim - { 'echasnovski/mini.animate', version = '*', opts = {} }, + { 'echasnovski/mini.animate', version = '*', opts = {} }, - -- Fast and feature-rich surround actions - -- Replaced kylechui/nvim-surround - { 'echasnovski/mini.surround', version = '*', opts = {} }, + -- Buffer removing (unshow, delete, wipeout), which saves window layout + -- Replaced famiu/bufdelete.nvim + { 'echasnovski/mini.bufremove', version = '*', opts = {} }, - -- Move lines and blocks of text - { 'echasnovski/mini.move', version = '*', opts = {} }, - - -- Jump to next/previous single character + -- Show next key clues + -- Replaced folke/which-key.nvim { - 'echasnovski/mini.jump', + 'echasnovski/mini.clue', + version = '*', + config = function() + local miniclue = require 'mini.clue' + + miniclue.setup { + triggers = { + -- Leader triggers + { mode = 'n', keys = '' }, + { mode = 'x', keys = '' }, + + -- Built-in completion + { mode = 'i', keys = '' }, + + -- `g` key + { mode = 'n', keys = 'g' }, + { mode = 'x', keys = 'g' }, + + -- Marks + { mode = 'n', keys = "'" }, + { mode = 'n', keys = '`' }, + { mode = 'x', keys = "'" }, + { mode = 'x', keys = '`' }, + + -- Registers + { mode = 'n', keys = '"' }, + { mode = 'x', keys = '"' }, + { mode = 'i', keys = '' }, + { mode = 'c', keys = '' }, + + -- Window commands + { mode = 'n', keys = '' }, + + -- `z` key + { mode = 'n', keys = 'z' }, + { mode = 'x', keys = 'z' }, + }, + + clues = { + -- Enhance this by adding descriptions for mapping groups + miniclue.gen_clues.builtin_completion(), + miniclue.gen_clues.g(), + miniclue.gen_clues.marks(), + miniclue.gen_clues.registers(), + miniclue.gen_clues.windows(), + miniclue.gen_clues.z(), + { mode = 'n', keys = 'b', desc = '+Buffers' }, + { mode = 'n', keys = 'c', desc = '+Code' }, + { mode = 'n', keys = 'cb', desc = '+CommentBox' }, + { mode = 'n', keys = 'q', desc = '+Quit' }, + { mode = 'n', keys = 's', desc = '+Telescope' }, + { mode = 'n', keys = 't', desc = '+Toggle' }, + { mode = 'n', keys = 'x', desc = '+Trouble' }, + { mode = 'n', keys = 'z', desc = '+TreeSitter' }, + { mode = 'n', keys = 'zg', desc = '+Goto' }, + { mode = 'n', keys = '?', desc = '+Help' }, + { mode = 'n', keys = 'd', desc = '+Diagnostics' }, + { mode = 'n', keys = 'y', desc = '+Yank' }, + }, + } + end, + }, + + -- Comment lines + -- Replaced numToStr/Comment.nvim + { 'echasnovski/mini.comment', version = '*', opts = {} }, + + -- Highlight cursor word and its matches + { 'echasnovski/mini.cursorword', version = '*' }, + + -- Work with diff hunks + -- Replaced lewis6991/gitsigns.nvim + { 'echasnovski/mini.diff', version = '*', opts = {} }, + + -- Git integration + { 'echasnovski/mini-git', version = '*', opts = {}, main = 'mini.git' }, + + -- Highlight patterns in text + -- Replaced folke/todo-comments.nvim + { + 'echasnovski/mini.hipatterns', version = '*', opts = { - mappings = { - forward = 'f', - backward = 'F', - forward_till = 't', - backward_till = 'T', - repeat_jump = ';', + highlighters = { + -- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE' + fixme = { + pattern = '%f[%w]()FIXME:?%s*()%f[%W]', + group = 'MiniHipatternsFixme', + }, + hack = { + pattern = '%f[%w]()HACK:?%s*()%f[%W]', + group = 'MiniHipatternsHack', + }, + todo = { + pattern = '%f[%w]()NOTE:?%s*()%f[%W]', + group = 'MiniHipatternsTodo', + }, + note = { + pattern = '%f[%w]()NOTE()%f[%W]', + group = 'MiniHipatternsNote', + }, + bug = { + pattern = '%f[%w]()BUG:?%s*()%f[%W]', + group = 'MiniHipatternsBug', + }, + perf = { + pattern = '%f[%w]()PERF:?%s*()%f[%W]', + group = 'MiniHipatternsPerf', + }, }, }, + config = function(opts) + local hp = require 'mini.hipatterns' + hp.setup { + highlighters = opts.highlighters, + + -- Highlight hex color strings (`#rrggbb`) using that color + hex_color = hp.gen_highlighter.hex_color(), + } + end, }, -- Icons @@ -48,14 +151,73 @@ return { }, }, - -- Highlight cursor word and its matches - { 'echasnovski/mini.cursorword', version = '*' }, + -- Visualize and work with indent scope + -- Replaced lukas-reineke/indent-blankline.nvim + { 'echasnovski/mini.indentscope', version = '*', opts = {} }, + + -- Jump to next/previous single character + { + 'echasnovski/mini.jump', + version = '*', + opts = { + mappings = { + forward = 'f', + backward = 'F', + forward_till = 't', + backward_till = 'T', + repeat_jump = ';', + }, + }, + }, + + -- Move lines and blocks of text + { 'echasnovski/mini.move', version = '*', opts = {} }, + + -- Text edit operators + { 'echasnovski/mini.operators', version = '*', opts = {} }, -- Split and join arguments, lists, and other sequences -- Replaced Wansmer/treesj - { 'echasnovski/mini.splitjoin', version = '*', opts = {} }, + { 'echasnovski/mini.splitjoin', version = '*', opts = {} }, - -- Work with diff hunks - -- Replaced lewis6991/gitsigns.nvim - { 'echasnovski/mini.diff', version = '*', opts = {} }, + -- Fast and flexible start screen + -- Replaced glepnir/dashboard-nvim + { 'echasnovski/mini.starter', version = '*', opts = {} }, + + -- Minimal and fast statusline module with opinionated default look + -- Replaced nvim-lualine/lualine.nvim + { + 'echasnovski/mini.statusline', + version = '*', + opts = { + use_icons = true, + set_vim_settings = true, + content = { + active = function() + local mode, mode_hl = MiniStatusline.section_mode({ trunc_width = 120 }) + local git = MiniStatusline.section_git({ trunc_width = 75 }) + local diagnostics = MiniStatusline.section_diagnostics({ trunc_width = 75 }) + local filename = MiniStatusline.section_filename({ trunc_width = 140 }) + local fileinfo = MiniStatusline.section_fileinfo({ trunc_width = 120 }) + local location = MiniStatusline.section_location({ trunc_width = 75 }) + return MiniStatusline.combine_groups({ + { hl = mode_hl, strings = { mode } }, + { hl = 'MiniStatuslineDevinfo', strings = { git, diagnostics } }, + '%<', -- Mark general truncate point + { hl = 'MiniStatuslineFilename', strings = { filename } }, + '%=', -- End left alignment + { hl = 'MiniStatuslineFileinfo', strings = { fileinfo } }, + { hl = mode_hl, strings = { location } }, + }) + end, + }, + } + }, + + -- Fast and feature-rich surround actions + -- Replaced kylechui/nvim-surround + { 'echasnovski/mini.surround', version = '*', opts = {} }, + + -- Work with trailing whitespace + { 'echasnovski/mini.trailspace', version = '*', opts = {} }, } diff --git a/config/nvim/lua/plugins/neotree.lua b/config/nvim/lua/plugins/neotree.lua index 1c53d4a..e498025 100644 --- a/config/nvim/lua/plugins/neotree.lua +++ b/config/nvim/lua/plugins/neotree.lua @@ -35,6 +35,7 @@ return { window = { mappings = { [''] = 'close_window', + ['q'] = 'close_window', }, }, filtered_items = { diff --git a/config/nvim/lua/plugins/noice.lua b/config/nvim/lua/plugins/noice.lua deleted file mode 100644 index a58ba65..0000000 --- a/config/nvim/lua/plugins/noice.lua +++ /dev/null @@ -1,85 +0,0 @@ --- Highly experimental plugin that completely replaces the UI --- for messages, cmdline and the popupmenu. --- https://github.com/folke/noice.nvim -return { - 'folke/noice.nvim', - lazy = false, - enabled = true, - dependencies = { - 'MunifTanjim/nui.nvim', - -- A fancy, configurable, notification manager for NeoVim - -- https://github.com/rcarriga/nvim-notify - 'rcarriga/nvim-notify', - 'hrsh7th/nvim-cmp', - }, - opts = { - lsp = { - -- override markdown rendering so that **cmp** and other plugins use **Treesitter** - override = { - ['vim.lsp.util.convert_input_to_markdown_lines'] = true, - ['vim.lsp.util.stylize_markdown'] = true, - ['cmp.entry.get_documentation'] = true, -- requires hrsh7th/nvim-cmp - }, - }, - -- you can enable a preset for easier configuration - presets = { - bottom_search = false, -- use a classic bottom cmdline for search - command_palette = true, -- position the cmdline and popupmenu together - long_message_to_split = true, -- long messages will be sent to a split - inc_rename = false, -- enables an input dialog for inc-rename.nvim - lsp_doc_border = false, -- add a border to hover docs and signature help - }, - routes = { - { - filter = { - event = 'msg_show', - any = { - { find = '%d+L, %d+B' }, - { find = '; after #%d+' }, - { find = '; before #%d+' }, - { find = '%d fewer lines' }, - { find = '%d more lines' }, - }, - }, - opts = { skip = true }, - }, - { - filter = { - event = 'notify', - find = 'No information available', - }, - opts = { skip = true }, - }, - }, - views = { - cmdline_popup = { - position = { - row = 5, - col = '50%', - }, - size = { - width = 60, - height = 'auto', - }, - }, - popupmenu = { - relative = 'editor', - position = { - row = 8, - col = '50%', - }, - size = { - width = 60, - height = 10, - }, - border = { - style = 'rounded', - padding = { 0, 1 }, - }, - win_options = { - winhighlight = { Normal = 'Normal', FloatBorder = 'DiagnosticInfo' }, - }, - }, - }, - }, -} diff --git a/config/nvim/lua/plugins/telescope.lua b/config/nvim/lua/plugins/telescope.lua index c69e727..73cdcb0 100644 --- a/config/nvim/lua/plugins/telescope.lua +++ b/config/nvim/lua/plugins/telescope.lua @@ -7,7 +7,6 @@ return { dependencies = { { 'nvim-lua/plenary.nvim' }, { 'nvim-telescope/telescope-symbols.nvim' }, - { 'folke/which-key.nvim' }, -- A Telescope picker to quickly access configurations -- of plugins managed by lazy.nvim. @@ -33,7 +32,6 @@ return { config = function() local t = require 'telescope' local a = require 'telescope.actions' - local themes = require 'telescope.themes' -- [[ Configure Telescope ]] -- See `:help telescope` and `:help telescope.setup()` @@ -80,7 +78,6 @@ return { } -- Load extensions - pcall(t.load_extension, 'harpoon') pcall(t.load_extension, 'git_worktree') pcall(t.load_extension, 'lazy_plugins') pcall(t.load_extension, 'luasnip') @@ -92,14 +89,5 @@ return { -- [[ Telescope Keymaps ]] -- See `:help telescope.builtin` -- See `:help telescope.keymap` - vim.keymap.set('n', '/', function() - -- You can pass additional configuration to telescope to change theme, layout, etc. - require('telescope.builtin').current_buffer_fuzzy_find( - themes.get_dropdown { - winblend = 20, - previewer = true, - } - ) - end, { desc = '[/] Fuzzily search in current buffer]' }) end, } diff --git a/config/nvim/lua/plugins/todo-comments.lua b/config/nvim/lua/plugins/todo-comments.lua deleted file mode 100644 index 7d9efb0..0000000 --- a/config/nvim/lua/plugins/todo-comments.lua +++ /dev/null @@ -1,8 +0,0 @@ --- Highlight, list and search todo comments in your projects --- https://github.com/folke/todo-comments.nvim -return { - 'folke/todo-comments.nvim', - version = '*', - dependencies = { 'nvim-lua/plenary.nvim' }, - opts = {}, -} diff --git a/config/nvim/lua/plugins/treesitter.lua b/config/nvim/lua/plugins/treesitter.lua index a0f64b2..487425b 100644 --- a/config/nvim/lua/plugins/treesitter.lua +++ b/config/nvim/lua/plugins/treesitter.lua @@ -12,130 +12,57 @@ return { 'nvim-treesitter/nvim-treesitter-context', 'JoosepAlviste/nvim-ts-context-commentstring', }, - config = function() - require('nvim-treesitter.configs').setup { - auto_install = true, - ignore_install = {}, - sync_install = true, - modules = {}, + ---@type TSConfig + opts = { + auto_install = true, -- Auto install the parser generators + sync_install = false, -- Sync install the parser generators, install async - -- Add languages to be installed here that you want installed for treesitter - ensure_installed = { - 'bash', - 'c', - 'css', - 'diff', - 'go', - 'html', - 'javascript', - 'jsdoc', - 'json', - 'jsonc', - 'lua', - 'luadoc', - 'markdown', - 'markdown_inline', - 'python', - 'query', - 'regex', - 'rust', - 'sql', - 'terraform', - 'toml', - 'tsx', - 'typescript', - 'vim', - 'vimdoc', - 'xml', - 'yaml', - }, + -- Add languages to be installed here that you want installed for treesitter + ensure_installed = { + 'bash', + 'json', + 'jsonc', + 'lua', + 'luadoc', + 'markdown', + 'markdown_inline', + 'query', + 'regex', + 'vim', + 'vimdoc', + 'yaml', + }, - refactor = { - navigation = { - enable = true, - -- Assign keymaps to false to disable them, e.g. `goto_definition = false`. - keymaps = { - goto_definition = 'gnd', - list_definitions = 'gnD', - list_definitions_toc = 'gO', - goto_next_usage = '', - goto_previous_usage = '', - }, - }, - smart_rename = { - enable = true, - -- Assign keymaps to false to disable them, e.g. `smart_rename = false`. - keymaps = { - smart_rename = 'grr', - }, - }, - highlight_definitions = { - enable = true, - -- Set to false if you have an `updatetime` of ~100. - clear_on_cursor_move = true, - }, - highlight_current_scope = { enable = false }, - }, - highlight = { enable = true }, - indent = { enable = true }, - incremental_selection = { + highlight = { enable = true }, + indent = { enable = true }, + textobjects = { + select = { enable = true, - keymaps = { - init_selection = '', - node_incremental = '', - scope_incremental = '', - node_decremental = '', - }, + lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim }, - textobjects = { - select = { - enable = true, - lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim - keymaps = { - -- You can use the capture groups defined in textobjects.scm - ['aa'] = '@parameter.outer', - ['ia'] = '@parameter.inner', - ['af'] = '@function.outer', - ['if'] = '@function.inner', - ['ac'] = '@class.outer', - ['ic'] = '@class.inner', - ['ii'] = '@conditional.inner', - ['ai'] = '@conditional.outer', - ['il'] = '@loop.inner', - ['al'] = '@loop.outer', - ['at'] = '@comment.outer', - }, - }, - move = { - enable = true, - set_jumps = true, -- whether to set jumps in the jumplist - goto_next_start = { - [']f'] = '@function.outer', - [']]'] = '@class.outer', - }, - goto_next_end = { - [']F'] = '@function.outer', - [']['] = '@class.outer', - }, - goto_previous_start = { - ['[f'] = '@function.outer', - ['[['] = '@class.outer', - }, - goto_previous_end = { - ['[F'] = '@function.outer', - ['[]'] = '@class.outer', - }, - }, - swap = { - enable = true, - swap_next = { - ['cn'] = '@parameter.inner', - }, - swap_previous = { - ['cP'] = '@parameter.inner', - }, - }, + move = { + enable = true, + set_jumps = true, -- whether to set jumps in the jumplist }, - } + }, + }, + config = function(_, opts) + require('nvim-treesitter.configs').setup(opts) + + vim.api.nvim_create_autocmd({ "FileType" }, { + callback = function() + -- Set foldmethod to treesitter if available + if require("nvim-treesitter.parsers").has_parser() then + vim.opt.foldmethod = "expr" + vim.opt.foldexpr = "nvim_treesitter#foldexpr()" + else + -- Otherwise, set foldmethod to syntax + vim.opt.foldmethod = "syntax" + end + + vim.opt.foldlevel = 9 -- Open all folds by default + vim.opt.foldnestmax = 99 -- Maximum fold nesting + end, + }) end, } diff --git a/config/nvim/lua/plugins/trouble.lua b/config/nvim/lua/plugins/trouble.lua deleted file mode 100644 index 2bd73cc..0000000 --- a/config/nvim/lua/plugins/trouble.lua +++ /dev/null @@ -1,15 +0,0 @@ --- A pretty diagnostics, references, telescope results, --- quickfix and location list to help you solve all the --- trouble your code is causing. --- https://github.com/folke/trouble.nvim -return { - 'folke/trouble.nvim', - lazy = false, - dependencies = { 'nvim-tree/nvim-web-devicons' }, - opts = { - auto_preview = true, - auto_fold = true, - auto_close = true, - use_lsp_diagnostic_signs = true, - }, -} diff --git a/config/nvim/lua/plugins/ufo.lua b/config/nvim/lua/plugins/ufo.lua deleted file mode 100644 index 8e82366..0000000 --- a/config/nvim/lua/plugins/ufo.lua +++ /dev/null @@ -1,130 +0,0 @@ --- Not UFO in the sky, but an ultra fold in Neovim. --- https://github.com/kevinhwang91/nvim-ufo/ -return { - 'kevinhwang91/nvim-ufo', - version = '*', - dependencies = { - { 'kevinhwang91/promise-async' }, - { 'nvim-treesitter/nvim-treesitter' }, - { - -- Status column plugin that provides a configurable - -- 'statuscolumn' and click handlers. - -- https://github.com/luukvbaal/statuscol.nvim - 'luukvbaal/statuscol.nvim', - config = function() - local builtin = require 'statuscol.builtin' - require('statuscol').setup { - relculright = true, - ft_ignore = { - 'dashboard', - 'NvimTree', - 'help', - 'vim', - 'alpha', - 'dashboard', - 'neo-tree', - 'Trouble', - 'lazy', - 'toggleterm', - }, - bt_ignore = { - 'help', - 'vim', - 'alpha', - 'dashboard', - 'neo-tree', - 'Trouble', - 'lazy', - 'toggleterm', - }, - segments = { - { - text = { builtin.foldfunc }, - click = 'v:lua.ScFa', - }, - { - sign = { - namespace = { 'diagnostic/signs' }, - maxwidth = 2, - -- auto = true, - }, - click = 'v:lua.ScSa', - }, - { - text = { builtin.lnumfunc, ' ' }, - click = 'v:lua.ScLa', - }, - }, - } - end, - }, - }, - config = function() - 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 = '', - scrollD = '', - jumpTop = '[', - jumpBot = ']', - }, - }, - - 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 - end - curWidth = curWidth + chunkWidth - end - table.insert(newVirtText, { suffix, 'MoreMsg' }) - return newVirtText - end, - } - end, -} diff --git a/config/nvim/lua/plugins/ui.lua b/config/nvim/lua/plugins/ui.lua index 06ad10c..965204a 100644 --- a/config/nvim/lua/plugins/ui.lua +++ b/config/nvim/lua/plugins/ui.lua @@ -27,104 +27,18 @@ return { }, }, - -- Neovim plugin to animate the cursor with a smear effect in all terminals - -- https://github.com/sphamba/smear-cursor.nvim - { 'sphamba/smear-cursor.nvim', opts = {} }, - -- A neovim plugin that shows colorcolumn dynamically -- https://github.com/Bekaboo/deadcolumn.nvim { 'Bekaboo/deadcolumn.nvim' }, - -- vim dashboard - -- https://github.com/nvimdev/dashboard-nvim - { - 'nvimdev/dashboard-nvim', - event = 'VimEnter', - config = function() - require('dashboard').setup { - theme = 'doom', - config = { - disable_move = true, - week_header = { - enable = true, - }, - shortcut = {}, - center = { - { - icon = ' ', - icon_hl = '@variable', - desc = 'Files', - group = 'Label', - action = 'Telescope find_files', - key = 'f', - }, - { - icon = ' ', - desc = 'Marks', - group = 'DiagnosticHint', - action = 'Telescope harpoon marks', - key = 'a', - }, - { - icon = '⚑ ', - desc = 'TODO', - group = 'DiagnosticOptions', - action = 'TodoTelescope', - key = 't', - }, - { - icon = ' ', - desc = 'Search', - group = 'Number', - action = 'Telescope live_grep', - key = 's', - }, - { - icon = '󰊳 ', - desc = 'Lazy Update', - group = '@property', - action = 'Lazy update', - key = 'u', - }, - { - icon = '☉ ', - desc = 'Quit', - group = 'DiagnosticError', - action = 'q', - key = 'q', - }, - }, - }, - } - end, - dependencies = { { 'nvim-tree/nvim-web-devicons' } }, - }, - -- Remove all background colors to make nvim transparent -- https://github.com/xiyaowong/nvim-transparent - { 'xiyaowong/nvim-transparent', opts = {} }, + { 'xiyaowong/nvim-transparent', opts = {} }, -- Display a character as the colorcolumn -- https://github.com/lukas-reineke/virt-column.nvim { 'lukas-reineke/virt-column.nvim', opts = {} }, - -- ui components - { 'MunifTanjim/nui.nvim', lazy = true }, - - -- Seamless navigation between tmux panes and vim splits - -- https://github.com/christoomey/vim-tmux-navigator - { - 'christoomey/vim-tmux-navigator', - cmd = { - 'TmuxNavigateLeft', - 'TmuxNavigateDown', - 'TmuxNavigateUp', - 'TmuxNavigateRight', - 'TmuxNavigatePrevious', - }, - opts = {}, - }, - -- Cloak allows you to overlay *'s over defined patterns in defined files. -- https://github.com/laytan/cloak.nvim { @@ -152,9 +66,6 @@ return { }, }, }, - -- Close buffer without messing up with the window. - -- https://github.com/famiu/bufdelete.nvim - { 'famiu/bufdelete.nvim' }, -- Neovim plugin for locking a buffer to a window -- https://github.com/stevearc/stickybuf.nvim @@ -177,12 +88,17 @@ return { -- Clarify and beautify your comments using boxes and lines. -- https://github.com/LudoPinelli/comment-box.nvim - { 'LudoPinelli/comment-box.nvim', opts = {} }, + { + 'LudoPinelli/comment-box.nvim', + event = 'BufEnter', + opts = {} + }, -- Plugin to improve viewing Markdown files in Neovim -- https://github.com/MeanderingProgrammer/render-markdown.nvim { 'MeanderingProgrammer/render-markdown.nvim', + event = 'BufEnter', dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons', diff --git a/config/nvim/lua/plugins/vim-sleuth.lua b/config/nvim/lua/plugins/vim-sleuth.lua deleted file mode 100644 index a6ff93b..0000000 --- a/config/nvim/lua/plugins/vim-sleuth.lua +++ /dev/null @@ -1,3 +0,0 @@ --- Detect tabstop and shiftwidth automatically --- https://github.com/tpope/vim-sleuth -return { 'tpope/vim-sleuth' } diff --git a/config/nvim/lua/plugins/which-key.lua b/config/nvim/lua/plugins/which-key.lua deleted file mode 100644 index 7e7d532..0000000 --- a/config/nvim/lua/plugins/which-key.lua +++ /dev/null @@ -1,553 +0,0 @@ --- Useful plugin to show you pending keybinds. --- https://github.com/folke/which-key.nvim -return { - 'folke/which-key.nvim', - lazy = false, - version = '*', - priority = 1001, -- Make sure to load this as soon as possible - dependencies = { - 'nvim-lua/plenary.nvim', - 'echasnovski/mini.icons', - }, - config = function() - local wk = require 'which-key' - wk.setup() - - wk.add { - -- ╭─────────────────────────────────────────────────────────╮ - -- │ With leader │ - -- ╰─────────────────────────────────────────────────────────╯ - - -- ── Buffer ────────────────────────────────────────────────────────── - { - 'b', - group = '[b] Buffer', - -- Add the current buffers to the menu - expand = function() return require('which-key.extras').expand.buf() end, - }, - { - { 'bk', 'blast', desc = 'Buffer: Last' }, - { 'bj', 'bfirst', desc = 'Buffer: First' }, - { 'bh', 'bprev', desc = 'Buffer: Prev' }, - { 'bl', 'bnext', desc = 'Buffer: Next' }, - { 'bd', 'Bdelete', desc = 'Buffer: Delete' }, - { 'bw', 'Bwipeout', desc = 'Buffer: Wipeout' }, - }, - - -- ── Code ──────────────────────────────────────────────────────────── - { 'c', group = '[c] Code' }, - { - 'ca', - 'lua vim.lsp.buf.code_action()', - desc = 'LSP: Code Action', - }, - { - 'cg', - 'lua require("neogen").generate()', - desc = 'Generate annotations', - }, - - -- ── Code: CommentBox ──────────────────────────────────────────────── - { 'cb', group = 'CommentBox' }, - { 'cbb', 'CBccbox', desc = 'CommentBox: Box Title' }, - { 'cbd', 'CBd', desc = 'CommentBox: Remove a box' }, - { 'cbl', 'CBline', desc = 'CommentBox: Simple Line' }, - { 'cbm', 'CBllbox14', desc = 'CommentBox: Marked' }, - { 'cbt', 'CBllline', desc = 'CommentBox: Titled Line' }, - - -- ── Code: LSPSaga ─────────────────────────────────────────────────── - -- See: lua/plugins/lsp.lua - { - '', - 'Lspsaga term_toggle', - desc = 'LSPSaga: Open Floaterm', - }, - { - 'ca', - 'Lspsaga code_action', - desc = 'LSPSaga: Code Actions', - }, - { - 'cci', - 'Lspsaga incoming_calls', - desc = 'LSPSaga: Incoming Calls', - }, - { - 'cco', - 'Lspsaga outgoing_calls', - desc = 'LSPSaga: Outgoing Calls', - }, - { - 'cd', - 'Lspsaga show_line_diagnostics', - desc = 'LSPSaga: Show Line Diagnostics', - }, - { - 'cf', - 'lua require("conform").format({ async = true, lsp_fallback = true })', - mode = {}, - desc = 'Format buffer with Conform', - }, - { - 'ci', - 'Lspsaga implement', - desc = 'LSPSaga: Implementations', - }, - { - 'cl', - 'Lspsaga show_cursor_diagnostics', - desc = 'LSPSaga: Show Cursor Diagnostics', - }, - { - 'cp', - 'Lspsaga peek_definition', - desc = 'LSPSaga: Peek Definition', - }, - { 'cr', 'Lspsaga rename', desc = 'LSPSaga: Rename' }, - { - 'cR', - 'Lspsaga rename ++project', - desc = 'LSPSaga: Rename Project wide', - }, - { - 'cs', - 'Lspsaga signature_help', - desc = 'LSPSaga: Signature Documentation', - }, - { - 'ct', - 'Lspsaga peek_type_definition', - desc = 'LSPSaga: Peek Type Definition', - }, - { - 'cu', - 'Lspsaga preview_definition', - desc = 'LSPSaga: Preview Definition', - }, - { - 'cv', - 'Lspsaga diagnostic_jump_prev', - desc = 'LSPSaga: Diagnostic Jump Prev', - }, - { - 'cw', - 'Lspsaga diagnostic_jump_next', - desc = 'LSPSaga: Diagnostic Jump Next', - }, - { - 'cx', - 'Telescope import', - desc = 'Telescope import', - }, - - { - 'f', - 'Telescope find_files', - desc = 'Find files', - }, - - -- ── Harpoon ───────────────────────────────────────────────────────── - -- See: lua/plugins/telescope.lua - { 'h', group = '[h] Harpoon' }, - { - { - 'ha', - 'lua require("harpoon"):list():add()', - desc = 'harpoon file', - }, - { - 'hn', - 'lua require("harpoon"):list():next()', - desc = 'harpoon to next file', - }, - { - 'hp', - 'lua require("harpoon"):list():prev()', - desc = 'harpoon to previous file', - }, - { - 'ht', - "lua require('harpoon.ui').toggle_quick_menu()", - desc = 'DAP: Harpoon UI', - }, - }, - - -- ── LSP ───────────────────────────────────────────────────────────── - { 'l', group = '[l] LSP' }, - -- See: lua/plugins/lsp.lua - - -- ── Quit ──────────────────────────────────────────────────────────── - { 'q', group = '[q] Quit' }, - { - { 'qf', 'q', desc = 'Quicker close split' }, - { 'qq', 'wq!', desc = 'Quit with force saving' }, - { 'qw', 'wq', desc = 'Write and quit' }, - }, - - -- ── Search ────────────────────────────────────────────────────────── - { 's', group = '[s] Search' }, - -- See: lua/plugins/telescope.lua - { - '', - 'Telescope buffers', - desc = 'Find existing buffers', - }, - { - 'sc', - 'Telescope commands', - desc = 'Telescope: Commands', - }, - { - 'sd', - 'Telescope diagnostics', - desc = 'Search Diagnostics', - }, - { - 'sf', - 'Telescope find_files', - desc = 'Find files', - }, - { - 'sg', - 'Telescope live_grep', - desc = 'Search by Grep', - }, - { - 'sh', - 'Telescope highlights', - desc = 'List highlights', - }, - { - 'sl', - 'Telescope luasnip', - desc = 'Search LuaSnip', - }, - { - 'sm', - 'Telescope harpoon marks', - desc = 'Harpoon Marks', - }, - { - 'sn', - "lua require('telescope').extensions.notify.notify()", - desc = 'Show Notifications', - }, - { - 'so', - 'Telescope oldfiles', - desc = 'Find recently Opened files', - }, - { - 'sp', - "lua require('telescope').extensions.lazy_plugins.lazy_plugins()", - desc = 'Find neovim/lazy configs', - }, - { - 'sq', - 'Telescope quickfix', - desc = 'Quickfix list', - }, - { - 'sr', - group = 'References', - { - 'srd', - 'Telescope lsp_definitions', - desc = 'Definitions', - }, - { - 'sri', - 'Telescope lsp_implementations', - desc = 'Implementations', - }, - { - 'srp', - 'Telescope lsp_document_symbols', - desc = 'Document Symbols', - }, - { - 'srr', - 'Telescope lsp_references', - desc = 'LSP References', - }, - { - 'srt', - 'Telescope lsp_type_definitions', - desc = 'Type Definitions', - }, - { - 'srw', - 'Telescope lsp_workspace_symbols', - desc = 'Workspace Symbols', - }, - }, - { - 'ss', - 'Telescope treesitter', - desc = 'Treesitter symbols', - }, - { 'st', 'TodoTelescope', desc = 'Telescope: Show Todo' }, - { - 'sw', - 'Telescope grep_string', - desc = 'Search current Word', - }, - - -- ── Toggle ────────────────────────────────────────────────────────── - { 't', group = '[t] Toggle' }, - { - { 'tc', 'CloakToggle', desc = 'Toggle Cloak' }, - { 'tn', 'Noice dismiss', desc = 'Noice dismiss' }, - { 'ts', 'noh', desc = 'Toggle Search Highlighting' }, - { - 'tt', - 'TransparentToggle', - desc = 'Toggle Transparency', - }, - { - 'tl', - 'exec &bg=="light"? "set bg=dark" : "set bg=light"', - desc = 'Toggle Light/Dark Theme', - }, - }, - - -- ── Workspace ─────────────────────────────────────────────────────── - { 'w', group = '[w] Workspace' }, - { - { - 'wa', - 'lua vim.lsp.buf.add_workspace_folder()', - desc = 'LSP: Workspace Add Folder', - }, - { - 'wl', - 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', - desc = 'LSP: Workspace List Folders', - }, - { - 'wr', - 'lua vim.lsp.buf.remove_workspace_folder()', - desc = 'LSP: Workspace Remove Folder', - }, - { - 'ws', - 'lua require("telescope.builtin").lsp_dynamic_workspace_symbols()', - desc = 'LSP: Workspace Symbols', - }, - }, - - -- ── Trouble ───────────────────────────────────────────────────────── - { 'x', group = '[x] Trouble' }, - { - { - 'xx', - 'Trouble diagnostics', - desc = 'Toggle Trouble Diagnostics', - }, - { - 'xw', - 'Trouble workspace_diagnostics', - desc = 'Toggle Workspace Diagnostics', - }, - { - 'xd', - 'Trouble document_diagnostics', - desc = 'Toggle Document Diagnostics', - }, - { 'xl', 'Trouble loclist', desc = 'Toggle Loclist' }, - { 'xq', 'Trouble quickfix', desc = 'Toggle Quickfix' }, - }, - - -- ── Help ──────────────────────────────────────────────────────────── - { '?', group = '[?] Help & Cheat sheets' }, - { - { - '?h', - 'Telescope help_tags', - desc = 'Help tags', - }, - { - '?m', - 'Telescope man_pages', - desc = 'Man pages', - }, - { - '?w', - 'lua require("which-key").show({global = true})', - desc = 'Buffer Local Keymaps (which-key)', - }, - }, - - -- ── Misc ──────────────────────────────────────────────────────────── - { - 'D', - 'lua vim.lsp.buf.type_definition()', - desc = 'LSP: Type Definition', - }, - { 'e', 'Neotree reveal', desc = 'NeoTree reveal' }, - - -- ╭─────────────────────────────────────────────────────────╮ - -- │ Without leader │ - -- ╰─────────────────────────────────────────────────────────╯ - { 'y', group = 'Yank & Surround' }, - - { 'gp', group = 'Goto Preview' }, - { - { - 'gpd', - 'lua require("goto-preview").goto_preview_definition()', - desc = 'Goto: Preview Definition', - }, - { - 'gpi', - 'lua require("goto-preview").goto_preview_implementation()', - desc = 'Goto: Preview Implementation', - }, - { - 'gpP', - 'lua require("goto-preview").close_all_windows()', - desc = 'Goto: Close All Preview Windows', - }, - }, - - -- ── tmux navigation ───────────────────────────────────────────────── - { - { - '', - 'TmuxNavigateLeft', - desc = 'tmux: Navigate Left', - }, - { - '', - 'TmuxNavigateDown', - desc = 'tmux: Navigate Down', - }, - { '', 'TmuxNavigateUp', desc = 'tmux: Navigate Up' }, - { - '', - 'TmuxNavigateRight', - desc = 'tmux: Navigate Right', - }, - { - '', - 'TmuxNavigatePrevious', - desc = 'tmux: Navigate Previous', - }, - }, - - -- ── Old habits ────────────────────────────────────────────────────── - { '', 'w!', desc = 'Save file' }, - - -- ── Text manipulation in visual mode ──────────────────────────────── - { - mode = { 'v', 'n' }, - { '>', '>gv', desc = 'Indent Right' }, - { '<', 'm '>+1gv=gv", desc = 'Move Block Down' }, - { 'K', "m '<-2gv=gv", desc = 'Move Block Up' }, - }, - - -- ── LSP ───────────────────────────────────────────────────────────── - { - '', - 'lua vim.lsp.buf.signature_help()', - desc = 'LSP: Signature Documentation', - }, - { - 'K', - 'Lspsaga hover_doc', - desc = 'LSPSaga: Hover Documentation', - }, - - { 'd', group = 'Diagnostics' }, - { - { - 'dn', - 'lua vim.diagnostic.goto_next()', - desc = 'Diagnostic: Goto Next', - }, - { - 'dp', - 'lua vim.diagnostic.goto_prev()', - desc = 'Diagnostic: Goto Prev', - }, - }, - { - { 'g', group = 'Goto' }, - { - 'gD', - 'lua vim.lsp.buf.declaration()', - desc = 'LSP: Goto Declaration', - }, - { - 'gI', - 'lua vim.lsp.buf.implementation()', - desc = 'LSP: Goto Implementation', - }, - { - 'gR', - 'Trouble lsp_references', - desc = 'Toggle LSP References', - }, - { - 'gd', - 'lua vim.lsp.buf.definition()', - desc = 'LSP: Goto Definition', - }, - { - 'gr', - 'lua require("telescope.builtin").lsp_references()', - desc = 'LSP: Goto References', - }, - }, - - -- ── Misc keybinds ─────────────────────────────────────────────────── - -- Sublime-like shortcut 'go to file' ctrl+p. - { - '', - 'Telescope find_files', - desc = 'Search for files starting at current directory.', - }, - { 'QQ', 'q!', desc = 'Quit without saving' }, - { 'WW', 'w!', desc = 'Force write to file' }, - { 'ss', 'noh', desc = 'Clear Search Highlighting' }, - { - 'jj', - '', - desc = 'Esc without touching esc in insert mode', - mode = 'i', - }, - - -- ── Splits ────────────────────────────────────────────────────────── - -- Use CTRL+ to switch between windows in normal mode - -- See `:help wincmd` for a list of all window commands - { '', '', desc = 'Move focus to the left window' }, - { '', '', desc = 'Move focus to the right window' }, - { '', '', desc = 'Move focus to the lower window' }, - { '', '', desc = 'Move focus to the upper window' }, - -- Split resizing - { ',', 'vertical resize -10', desc = 'V Resize -' }, - { '.', 'vertical resize +10', desc = 'V Resize +' }, - - -- ── Disable arrow keys in normal mode ─────────────────────────────── - { '', 'echo "Use h to move!!"' }, - { '', 'echo "Use l to move!!"' }, - { '', 'echo "Use k to move!!"' }, - { '', 'echo "Use j to move!!"' }, - - -- ── 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 , 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 to exit terminal mode. - { '', '', desc = 'Exit terminal mode', mode = 't' }, - - -- ── Search ────────────────────────────────────────────────────────── - -- :noh if you have search highlights - { '', 'noh', desc = 'Clear search highlights' }, - } - end, -} diff --git a/docs/nvim-keybindings.md b/docs/nvim-keybindings.md index e197a7a..84ddb84 100644 --- a/docs/nvim-keybindings.md +++ b/docs/nvim-keybindings.md @@ -2,40 +2,214 @@ ```txt -n / * - [/] Fuzzily search in current buffer] -n ht * - Open Harpoon Quick menu -n hw * - Open harpoon window with telescope -x # * +x *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "" +n *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "" +x " *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after """ +n " *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after """ +x ' *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "'" +n ' *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "'" +x ` *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "`" +n ` *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "`" +x g *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "g" +n g *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "g" +x z *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "z" +n z *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "z" +n *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Query keys after "" +n * :nohlsearch + Clear Search Highlighting +n qQ * :q! + Force quit without saving +n qw * :wq + Write and quit +n qq * :wq! + Quit with force saving +n qf * :q + Quicker close split +n tn * :Noice dismiss + Noice: Dismiss Notification +n tl * :lua vim.o.bg = vim.o.bg:get() == "light" and "dark" or "light" + Toggle Light/Dark Mode +n te * :Neotree toggle + Toggle Neotree +n tc * :CloakToggle + Cloak: Toggle +n o * ~/.config/nvim/lua/keymaps.lua + Open repo in browser +n xx * :Trouble diagnostics + Trouble: Diagnostic +n xw * :Trouble workspace_diagnostics + Trouble: Workspace Diagnostics +n xq * :Trouble quickfix + Trouble: Quickfix +n xl * :Trouble loclist + Trouble: Location List +n xd * :Trouble document_diagnostics + Trouble: Document Diagnostics +n sx * :Telescope import + Telescope: Import +n sw * :Telescope grep_string + Grep String +n st * :TodoTelescope + Search Todos +n ss * :Telescope treesitter + Treesitter +n sq * :Telescope quickfix + Quickfix +n sp * :lua require("telescope").extensions.lazy_plugins.lazy_plugins() + Lazy Plugins +n so * :Telescope oldfiles + Old Files +n sl * :Telescope luasnip + Search LuaSnip +n sk * :Telescope keymaps + Search Keymaps +n sh * :Telescope highlights + List Highlights +n sg * :Telescope live_grep + Search by Grep +n sd * :Telescope diagnostics + Search Diagnostics +n sc * :Telescope commands + Commands +n / * ~/.config/nvim/lua/keymaps.lua + Fuzzily search in current buffer +n , * :Telescope buffers + Find existing buffers +n f * :Telescope find_files + Find Files +n cbt * CBllline + CB: Titled Line +n cbm * CBllbox14 + CB: Marked +n cbl * CBline + CB: Simple Line +n cbd * CBd + CB: Remove a box +n cbb * CBccbox + CB: Box Title +n cw * :Lspsaga diagnostic_jump_next + Diagnostic Jump Next +n cv * :Lspsaga diagnostic_jump_prev + Diagnostic Jump Prev +n cu * :Lspsaga preview_definition + Preview Definition +n cT * :Telescope lsp_type_definitions + LSP Type Definitions +n ct * :Lspsaga peek_type_definition + Peek Type Definition +n cs * :Telescope lsp_document_symbols + LSP Document Symbols +n cR * :Lspsaga rename ++project + Rename Project wide +n cr * :Lspsaga rename + Rename +n cp * :Lspsaga peek_definition + Peek Definition +n cl * :Lspsaga show_cursor_diagnostics + Cursor Diagnostics +n ci * :Lspsaga implement + Implementations +x cf * :lua vim.lsp.buf.format() + Format +n cf * :lua vim.lsp.buf.format() + Format +n cd * :Lspsaga show_line_diagnostics + Line Diagnostics +n cco * :Lspsaga outgoing_calls + Outgoing Calls +n cci * :Lspsaga incoming_calls + Incoming Calls +n ca * :Lspsaga code_action + Code Action +n cg * :lua require("neogen").generate() + Generate annotations +n bw * :lua MiniBufremove.wipeout() + Wipeout +n bl * :bnext + Next +n bk * :blast + Last +n bj * :bfirst + First +n bh * :bprev + Prev +n bd * :lua MiniBufremove.delete() + Delete +x # * vim/_defaults.lua :help v_#-default o % (MatchitOperationForward) x % (MatchitVisualForward) n % (MatchitNormalForward) n & * :&& :help &-default -x * * +x * * vim/_defaults.lua :help v_star-default +o ; * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua + Repeat jump +x ; * lua MiniJump.jump() + Repeat jump +n ; * lua MiniJump.jump() + Repeat jump +v < * * >gv + Indent Right +n > * >gv + Indent Right +n @ * ~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Execute macro without 'mini.clue' triggers x @ * mode() == 'V' ? ':normal! @'.getcharstr().'' : '@' :help v_@-default +o F * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua + Jump backward +x F * lua MiniJump.smart_jump(true, false) + Jump backward +n F * lua MiniJump.smart_jump(true, false) + Jump backward +n K * :Lspsaga hover_doc + Hover Documentation +n Q * ~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua + Execute macro without 'mini.clue' triggers x Q * mode() == 'V' ? ':normal! @=reg_recorded()' : 'Q' :help v_Q-default -o R * - Treesitter Search -x R * - Treesitter Search +o T * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua + Jump backward till +x T * lua MiniJump.smart_jump(true, true) + Jump backward till +n T * lua MiniJump.smart_jump(true, true) + Jump backward till n Y * y$ :help Y-default -n Zk * +n Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua Flash Treesitter -o Zk * +x Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua Flash Treesitter -x Zk * +o Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua Flash Treesitter o [% (MatchitOperationMultiBackward) x [% (MatchitVisualMultiBackward) n [% (MatchitNormalMultiBackward) +o [i * lua MiniIndentscope.operator('top') + Go to indent scope top +x [i * lua MiniIndentscope.operator('top') + Go to indent scope top +n [i * lua MiniIndentscope.operator('top', true) + Go to indent scope top o [h * Vlua MiniDiff.goto_hunk('prev') Previous hunk x [h * lua MiniDiff.goto_hunk('prev') @@ -48,17 +222,17 @@ x [H * lua MiniDiff.goto_hunk('first') First hunk n [H * lua MiniDiff.goto_hunk('first') First hunk -o [i * lua MiniIndentscope.operator('top') - Go to indent scope top -x [i * lua MiniIndentscope.operator('top') - Go to indent scope top -n [i * lua MiniIndentscope.operator('top', true) - Go to indent scope top -n [d * +n [d * vim/_defaults.lua Jump to the previous diagnostic o ]% (MatchitOperationMultiForward) x ]% (MatchitVisualMultiForward) n ]% (MatchitNormalMultiForward) +o ]i * lua MiniIndentscope.operator('bottom') + Go to indent scope bottom +x ]i * lua MiniIndentscope.operator('bottom') + Go to indent scope bottom +n ]i * lua MiniIndentscope.operator('bottom', true) + Go to indent scope bottom o ]H * Vlua MiniDiff.goto_hunk('last') Last hunk x ]H * lua MiniDiff.goto_hunk('last') @@ -71,62 +245,76 @@ x ]h * lua MiniDiff.goto_hunk('next') Next hunk n ]h * lua MiniDiff.goto_hunk('next') Next hunk -o ]i * lua MiniIndentscope.operator('bottom') - Go to indent scope bottom -x ]i * lua MiniIndentscope.operator('bottom') - Go to indent scope bottom -n ]i * lua MiniIndentscope.operator('bottom', true) - Go to indent scope bottom -n ]d * +n ]d * vim/_defaults.lua Jump to the next diagnostic x a% (MatchitVisualTextObject) o ai * lua MiniIndentscope.textobject(true) Object scope with border x ai * lua MiniIndentscope.textobject(true) Object scope with border +o f * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua + Jump forward +x f * lua MiniJump.smart_jump(false, false) + Jump forward +n f * lua MiniJump.smart_jump(false, false) + Jump forward n gR * :RegexplainerToggle Toggle Regexplainer o g% (MatchitOperationBackward) x g% (MatchitVisualBackward) n g% (MatchitNormalBackward) -n gP * - Close preview windows -n gpr * - Preview references -n gpD * - Preview declaration -n gpi * - Preview implementation -n gpt * - Preview type definition -n gpd * - Preview definition +o gh * lua MiniDiff.textobject() + Hunk range textobject +x gH * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua + Reset hunks +n gH * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua + Reset hunks +x gh * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua + Apply hunks +n gh * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua + Apply hunks +x gs * lua MiniOperators.sort('visual') + Sort selection +n gss ^gsg_ + Sort line +n gs * v:lua.MiniOperators.sort() + Sort operator +x gr * lua MiniOperators.replace('visual') + Replace selection +n grr gr_ + Replace line +n gr * v:lua.MiniOperators.replace() + Replace operator +x gm * lua MiniOperators.multiply('visual') + Multiply selection +n gmm gm_ + Multiply line +n gm * v:lua.MiniOperators.multiply() + Multiply operator +n gxx gx_ + Exchange line +x g= * lua MiniOperators.evaluate('visual') + Evaluate selection +n g== g=_ + Evaluate line +n g= * v:lua.MiniOperators.evaluate() + Evaluate operator x gS * :lua MiniSplitjoin.toggle({ region = MiniSplitjoin.get_visual_region() }) Toggle arguments n gS * v:lua.MiniSplitjoin.operator("toggle") . " " Toggle arguments -o gh * lua MiniDiff.textobject() - Hunk range textobject -x gH * - Reset hunks -n gH * - Reset hunks -x gh * - Apply hunks -n gh * - Apply hunks -o gc * +o gc * lua MiniComment.textobject() Comment textobject -n gcc * - Toggle comment line -x gc * - Toggle comment -n gc * - Toggle comment -x gx * - Opens filepath or URI under cursor with the system handler (file explorer, web browser, …) -n gx * - Opens filepath or URI under cursor with the system handler (file explorer, web browser, …) +n gcc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua + Comment line +x gc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua + Comment selection +n gc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua + Comment +x gx * lua MiniOperators.exchange('visual') + Exchange selection +n gx * v:lua.MiniOperators.exchange() + Exchange operator o ii * lua MiniIndentscope.textobject(false) Object scope x ii * lua MiniIndentscope.textobject(false) @@ -135,50 +323,78 @@ n j * v:count == 0 ? 'gj' : 'j' Move down n k * v:count == 0 ? 'gk' : 'k' Move up -o r * - Remote Flash -n shn * +n shn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Highlight next surrounding -n sFn * +n sFn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Find next left surrounding -n sfn * +n sfn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Find next right surrounding -n srn * +n srn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Replace next surrounding -n sdn * +n sdn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Delete next surrounding -n shl * +n shl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Highlight previous surrounding -n sFl * +n sFl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Find previous left surrounding -n sfl * +n sfl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Find previous right surrounding -n srl * +n srl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Replace previous surrounding -n sdl * +n sdl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Delete previous surrounding x sa * :lua MiniSurround.add('visual') Add surrounding to selection -n sn * +n sn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Update `MiniSurround.config.n_lines` -n sh * +n sh * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Highlight surrounding -n sF * +n sF * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Find left surrounding -n sf * +n sf * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Find right surrounding -n sr * +n sr * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Replace surrounding -n sd * +n sd * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Delete surrounding -n sa * +n sa * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua Add surrounding -n zk * +o t * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua + Jump forward till +x t * lua MiniJump.smart_jump(false, true) + Jump forward till +n t * lua MiniJump.smart_jump(false, true) + Jump forward till +x zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua Flash -o zk * +n zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua Flash -x zk * +o zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua Flash +n = * = + Equal Size Splits +n + * :resize +5 + H Resize + +n - * :resize -5 + H Resize - +n . * :vertical resize +10 + V Resize + +n , * :vertical resize -10 + V Resize - +v * :m '>+1gv=gv + Move Block Down +n * :m '>+1gv=gv + Move Block Down +v * :m '<-2gv=gv + Move Block Up +n * :m '<-2gv=gv + Move Block Up +n * :w! + Save +n * :echo "Use j to move!!" +n * :echo "Use k to move!!" +n * :echo "Use l to move!!" +n * :echo "Use h to move!!" x (MatchitVisualTextObject) (MatchitVisualMultiBackward)o(MatchitVisualMultiForward) o (MatchitOperationMultiForward) * :call matchit#MultiMatch("W", "o") o (MatchitOperationMultiBackward) * :call matchit#MultiMatch("bW", "o") @@ -192,29 +408,29 @@ x (MatchitVisualBackward) * :call matchit#Match_wrapper('',0,'v')(MatchitVisualForward) * :call matchit#Match_wrapper('',1,'v'):if col("''") != col("$") | exe ":normal! m'" | endifgv`` n (MatchitNormalBackward) * :call matchit#Match_wrapper('',0,'n') n (MatchitNormalForward) * :call matchit#Match_wrapper('',1,'n') -s luasnip-jump-prev * - LuaSnip: Jump to the previous node -s luasnip-jump-next * - LuaSnip: Jump to the next node -s luasnip-prev-choice * - LuaSnip: Change to the previous choice from the choiceNode -s luasnip-next-choice * - LuaSnip: Change to the next choice from the choiceNode -s luasnip-expand-snippet * - LuaSnip: Expand the current snippet -s luasnip-expand-or-jump * - LuaSnip: Expand or jump in the current snippet - luasnip-expand-repeat * - LuaSnip: Repeat last node expansion -n luasnip-delete-check * - LuaSnip: Removes current snippet from jumplist +n * lua MiniMove.move_line('up') + Move line up +n * lua MiniMove.move_line('down') + Move line down +n * lua MiniMove.move_line('right') + Move line right +n * lua MiniMove.move_line('left') + Move line left +x * lua MiniMove.move_selection('up') + Move up +x * lua MiniMove.move_selection('down') + Move down +x * lua MiniMove.move_selection('right') + Move right +x * lua MiniMove.move_selection('left') + Move left n PlenaryTestFile * :lua require('plenary.test_harness').test_file(vim.fn.expand("%:p")) n d Show diagnostics under the cursor -n d * +n d * vim/_defaults.lua Show diagnostics under the cursor -n * nohlsearch|diffupdate|normal! - :help CTRL-L-default +n * :lua vim.lsp.buf.signature_help() + Signature ``` -- Generated on Fri 22 Nov 2024 15:30:39 EET +- Generated on Mon 9 Dec 2024 10:05:25 EET diff --git a/scripts/create-nvim-keymaps.sh b/scripts/create-nvim-keymaps.sh index 22e123f..375e0f4 100755 --- a/scripts/create-nvim-keymaps.sh +++ b/scripts/create-nvim-keymaps.sh @@ -19,8 +19,12 @@ main() printf "\n\`\`\`\n\n- Generated on %s\n" "$(date)" >> "$DEST" - # Remove lines with "Last set from" from the file - sed -e '/^ Last set from/d' "$DEST" > "${DEST}.tmp" && mv "${DEST}.tmp" "$DEST" + # Remove unnecessary information from the output and the last line + sed -E \ + -e 's/]+):[0-9]+>/\1/' \ + -e '/^ Last set from/d' "$DEST" \ + > "${DEST}.tmp" \ + && mv "${DEST}.tmp" "$DEST" msg "Neovim keybindings documentation generated at $DEST" }