aboutsummaryrefslogtreecommitdiffhomepage
path: root/vim/mini.lua
diff options
context:
space:
mode:
Diffstat (limited to 'vim/mini.lua')
-rw-r--r--vim/mini.lua405
1 files changed, 307 insertions, 98 deletions
diff --git a/vim/mini.lua b/vim/mini.lua
index d449bf7..6f7ba57 100644
--- a/vim/mini.lua
+++ b/vim/mini.lua
@@ -38,7 +38,7 @@ Add, Now, Later = MiniDeps.add, MiniDeps.now, MiniDeps.later
38require("mini.misc").setup({ 38require("mini.misc").setup({
39 make_global = { "put", "put_text", "zoom" }, 39 make_global = { "put", "put_text", "zoom" },
40}) 40})
41vim.keymap.set( 'n', '<leader>Z', function() 41vim.keymap.set('n', '<leader>Z', function()
42 zoom() 42 zoom()
43 vim.cmd("silent! call ToggleWinPadding()") 43 vim.cmd("silent! call ToggleWinPadding()")
44end, { buffer = bufnr, desc = 'zoom' }) 44end, { buffer = bufnr, desc = 'zoom' })
@@ -114,13 +114,13 @@ require("mini.comment").setup({
114 -- Toggle comment (like `gcip` - comment inner paragraph) for both 114 -- Toggle comment (like `gcip` - comment inner paragraph) for both
115 -- Normal and Visual modes 115 -- Normal and Visual modes
116 comment = "gc", 116 comment = "gc",
117 -- 117
118 -- Toggle comment on current line 118 -- Toggle comment on current line
119 comment_line = "<C-/>", 119 comment_line = "<C-/>",
120 -- 120
121 -- Toggle comment on visual selection 121 -- Toggle comment on visual selection
122 comment_visual = "<C-/>", 122 comment_visual = "<C-/>",
123 -- 123
124 -- Define 'comment' textobject (like `dgc` - delete whole comment block) 124 -- Define 'comment' textobject (like `dgc` - delete whole comment block)
125 -- Works also in Visual mode if mapping differs from `comment_visual` 125 -- Works also in Visual mode if mapping differs from `comment_visual`
126 textobject = "gc", 126 textobject = "gc",
@@ -136,10 +136,10 @@ require("mini.diff").setup({
136 -- Visualization style. Possible values are 'sign' and 'number'. 136 -- Visualization style. Possible values are 'sign' and 'number'.
137 -- Default: 'number' if line numbers are enabled, 'sign' otherwise. 137 -- Default: 'number' if line numbers are enabled, 'sign' otherwise.
138 style = "sign", 138 style = "sign",
139 -- 139
140 -- Signs used for hunks with 'sign' view 140 -- Signs used for hunks with 'sign' view
141 signs = { add = "+", change = "▒", delete = "-" }, 141 signs = { add = "+", change = "▒", delete = "-" },
142 -- 142
143 -- Priority of used visualization extmarks 143 -- Priority of used visualization extmarks
144 priority = 199, 144 priority = 199,
145 }, 145 },
@@ -191,7 +191,7 @@ hipatterns.setup({
191 hack = { pattern = "%f[%w]()HACK()%f[%W]", group = "MiniHipatternsHack" }, 191 hack = { pattern = "%f[%w]()HACK()%f[%W]", group = "MiniHipatternsHack" },
192 todo = { pattern = "%f[%w]()TODO()%f[%W]", group = "MiniHipatternsTodo" }, 192 todo = { pattern = "%f[%w]()TODO()%f[%W]", group = "MiniHipatternsTodo" },
193 note = { pattern = "%f[%w]()NOTE()%f[%W]", group = "MiniHipatternsNote" }, 193 note = { pattern = "%f[%w]()NOTE()%f[%W]", group = "MiniHipatternsNote" },
194 -- 194
195 -- Highlight hex color strings (`#rrggbb`) using that color 195 -- Highlight hex color strings (`#rrggbb`) using that color
196 hex_color = hipatterns.gen_highlighter.hex_color(), 196 hex_color = hipatterns.gen_highlighter.hex_color(),
197 }, 197 },
@@ -205,7 +205,7 @@ end, { buffer = bufnr, desc = "Toggle hex color highlight" })
205require("mini.pairs").setup() 205require("mini.pairs").setup()
206-- }}} 206-- }}}
207-- -- mini.statusline {{{ 207-- -- mini.statusline {{{
208-- -- 208--
209-- require("mini.statusline").setup({ 209-- require("mini.statusline").setup({
210-- content = { 210-- content = {
211-- active = status_config, 211-- active = status_config,
@@ -351,16 +351,16 @@ Add {
351-- }}} 351-- }}}
352-- vim-livedown {{{ 352-- vim-livedown {{{
353Add { 353Add {
354 source ='shime/vim-livedown' 354 source = 'shime/vim-livedown'
355} 355}
356vim.keymap.set( 'n', '<F10>', ":LivedownToggle<CR>", { buffer = bufnr, desc = '' }) 356vim.keymap.set('n', '<F10>', ":LivedownToggle<CR>", { buffer = bufnr, desc = '' })
357-- }}} 357-- }}}
358-- Preview Image {{{ 358-- Preview Image {{{
359Add { 359Add {
360 source = 'qaiviq/vim-imager' 360 source = 'qaiviq/vim-imager'
361} 361}
362vim.cmd("let g:imager#filetypes = ['.md']") 362vim.cmd("let g:imager#filetypes = ['.md']")
363vim.keymap.set( 'n', '\\i', ":ToggleImages<CR>", { buffer = bufnr, desc = '' }) 363vim.keymap.set('n', '\\i', ":ToggleImages<CR>", { buffer = bufnr, desc = '' })
364-- }}} 364-- }}}
365 365
366 366
@@ -371,11 +371,11 @@ if not (vim.uv or vim.loop).fs_stat(lazypath) then
371 local lazyrepo = "https://github.com/folke/lazy.nvim.git" 371 local lazyrepo = "https://github.com/folke/lazy.nvim.git"
372 vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) 372 vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
373end 373end
374vim.cmd("set rtp+="..lazypath) 374vim.cmd("set rtp+=" .. lazypath)
375-- }}} 375-- }}}
376require("lazy").setup({ 376require("lazy").setup({
377 -- "tpope/vim-sleuth", 377 -- "tpope/vim-sleuth",
378-- bufferline {{{ 378 -- bufferline {{{
379 { 379 {
380 "akinsho/bufferline.nvim", 380 "akinsho/bufferline.nvim",
381 lazy = false, 381 lazy = false,
@@ -384,7 +384,7 @@ require("lazy").setup({
384 "tiagovla/scope.nvim", 384 "tiagovla/scope.nvim",
385 }, 385 },
386 config = function() 386 config = function()
387 require('bufferline').setup{ 387 require('bufferline').setup {
388 options = { 388 options = {
389 numbers = 'ordinal', 389 numbers = 'ordinal',
390 tab_size = 14, 390 tab_size = 14,
@@ -428,7 +428,7 @@ require("lazy").setup({
428 text_align = "right" 428 text_align = "right"
429 } 429 }
430 }, 430 },
431 custom_filter = function (buf_number) 431 custom_filter = function(buf_number)
432 if vim.t.bufs == nil then return false end 432 if vim.t.bufs == nil then return false end
433 for _, p in ipairs(vim.t.bufs) do 433 for _, p in ipairs(vim.t.bufs) do
434 if p == buf_number then 434 if p == buf_number then
@@ -522,7 +522,7 @@ require("lazy").setup({
522 }, 522 },
523 }, 523 },
524 lualine_y = { 524 lualine_y = {
525 { "progress", separator = " ", padding = { left = 1, right = 0 } }, 525 { "progress", separator = " ", padding = { left = 1, right = 0 } },
526 { "location", padding = { left = 0, right = 1 } }, 526 { "location", padding = { left = 0, right = 1 } },
527 }, 527 },
528 lualine_z = { 528 lualine_z = {
@@ -539,7 +539,7 @@ require("lazy").setup({
539 config = function() 539 config = function()
540 require('lualine').setup(opts) 540 require('lualine').setup(opts)
541 if vim.o.lines < 20 then 541 if vim.o.lines < 20 then
542 vim.o.laststatus=0 542 vim.o.laststatus = 0
543 end 543 end
544 end 544 end
545 }, 545 },
@@ -564,11 +564,11 @@ require("lazy").setup({
564 require("telescope").setup({ 564 require("telescope").setup({
565 defaults = { 565 defaults = {
566 preview = { 566 preview = {
567 filesize_hook = function(filepath, bufnr, opts) 567 filesize_hook = function(filepath, bufnr, opts)
568 local max_bytes = 100000 568 local max_bytes = 100000
569 local cmd = {"head", "-c", max_bytes, filepath} 569 local cmd = { "head", "-c", max_bytes, filepath }
570 require('telescope.previewers.utils').job_maker(cmd, bufnr, opts) 570 require('telescope.previewers.utils').job_maker(cmd, bufnr, opts)
571 end 571 end
572 }, 572 },
573 mappings = { 573 mappings = {
574 i = { 574 i = {
@@ -612,17 +612,17 @@ require("lazy").setup({
612 }, 612 },
613 extensions = { 613 extensions = {
614 fzf = { 614 fzf = {
615 fuzzy = true, -- false will only do exact matching 615 fuzzy = true, -- false will only do exact matching
616 override_generic_sorter = true, -- override the generic sorter 616 override_generic_sorter = true, -- override the generic sorter
617 override_file_sorter = true, -- override the file sorter 617 override_file_sorter = true, -- override the file sorter
618 case_mode = "smart_case", -- or "ignore_case" or "respect_case" 618 case_mode = "smart_case", -- or "ignore_case" or "respect_case"
619 -- the default case_mode is "smart_case" 619 -- the default case_mode is "smart_case"
620 }, 620 },
621 aerial = { 621 aerial = {
622 -- Display symbols as <root>.<parent>.<symbol> 622 -- Display symbols as <root>.<parent>.<symbol>
623 show_nesting = { 623 show_nesting = {
624 ["_"] = false, -- This key will be the default 624 ["_"] = false, -- This key will be the default
625 json = true, -- You can set the option for specific filetypes 625 json = true, -- You can set the option for specific filetypes
626 yaml = true, 626 yaml = true,
627 }, 627 },
628 }, 628 },
@@ -653,7 +653,7 @@ require("lazy").setup({
653 vim.keymap.set("n", "<leader>tt", "<cmd>Telescope<CR>", { desc = "telescope help page" }) 653 vim.keymap.set("n", "<leader>tt", "<cmd>Telescope<CR>", { desc = "telescope help page" })
654 vim.keymap.set("n", "<leader>sk", "<cmd>Telescope keymaps<CR>", { desc = "telescope keymaps" }) 654 vim.keymap.set("n", "<leader>sk", "<cmd>Telescope keymaps<CR>", { desc = "telescope keymaps" })
655 vim.keymap.set("n", "<leader>pt", "<cmd>Telescope terms<CR>", { desc = "telescope pick hidden term" }) 655 vim.keymap.set("n", "<leader>pt", "<cmd>Telescope terms<CR>", { desc = "telescope pick hidden term" })
656 -- 656
657 vim.keymap.set("n", "<leader>ss", function() 657 vim.keymap.set("n", "<leader>ss", function()
658 local current_filetype = vim.bo.filetype 658 local current_filetype = vim.bo.filetype
659 local cwd = os.getenv("HOME") .. "/snippets" 659 local cwd = os.getenv("HOME") .. "/snippets"
@@ -672,7 +672,7 @@ require("lazy").setup({
672 return current_picker:_get_prompt() 672 return current_picker:_get_prompt()
673 end 673 end
674 end 674 end
675 -- 675
676 local edit_snippet = function() 676 local edit_snippet = function()
677 local file = get_prompt_or_entry() 677 local file = get_prompt_or_entry()
678 require("telescope.actions").close(prompt_bufnr) 678 require("telescope.actions").close(prompt_bufnr)
@@ -683,7 +683,7 @@ require("lazy").setup({
683 vim.bo.bufhidden = "wipe" 683 vim.bo.bufhidden = "wipe"
684 vim.cmd("set filetype?") 684 vim.cmd("set filetype?")
685 end 685 end
686 -- 686
687 local insert_selected_snippet = function() 687 local insert_selected_snippet = function()
688 local file = get_prompt_or_entry() 688 local file = get_prompt_or_entry()
689 local path = cwd .. "/" .. file 689 local path = cwd .. "/" .. file
@@ -696,16 +696,16 @@ require("lazy").setup({
696 edit_snippet() 696 edit_snippet()
697 end 697 end
698 end 698 end
699 -- 699
700 map("i", "<CR>", insert_selected_snippet) 700 map("i", "<CR>", insert_selected_snippet)
701 map("i", "<C-T>", edit_snippet) 701 map("i", "<C-T>", edit_snippet)
702 map("n", "<CR>", insert_selected_snippet) 702 map("n", "<CR>", insert_selected_snippet)
703 -- 703
704 return true 704 return true
705 end, 705 end,
706 }) 706 })
707 end, { desc = "[S]earch [S]nippets" }) 707 end, { desc = "[S]earch [S]nippets" })
708 -- 708
709 vim.keymap.set("n", "<leader>sd", function() 709 vim.keymap.set("n", "<leader>sd", function()
710 require("telescope.builtin").oldfiles({ 710 require("telescope.builtin").oldfiles({
711 prompt_title = "CD to", 711 prompt_title = "CD to",
@@ -716,10 +716,10 @@ require("lazy").setup({
716 require("telescope.actions").close(prompt_bufnr) 716 require("telescope.actions").close(prompt_bufnr)
717 vim.api.nvim_feedkeys(":cd " .. path, "n", true) 717 vim.api.nvim_feedkeys(":cd " .. path, "n", true)
718 end 718 end
719 -- 719
720 map("i", "<CR>", cd_prompt) 720 map("i", "<CR>", cd_prompt)
721 map("n", "<CR>", cd_prompt) 721 map("n", "<CR>", cd_prompt)
722 -- 722
723 return true 723 return true
724 end, 724 end,
725 }) 725 })
@@ -768,7 +768,7 @@ require("lazy").setup({
768 root_folder_label = false, 768 root_folder_label = false,
769 highlight_git = true, 769 highlight_git = true,
770 highlight_opened_files = "none", 770 highlight_opened_files = "none",
771 -- 771
772 indent_markers = { 772 indent_markers = {
773 enable = true, 773 enable = true,
774 }, 774 },
@@ -877,7 +877,7 @@ require("lazy").setup({
877 end, 877 end,
878 }, 878 },
879 --}}} 879 --}}}
880-- Markdown: obsidian {{{ 880 -- Markdown: obsidian {{{
881 { 881 {
882 "epwalsh/obsidian.nvim", 882 "epwalsh/obsidian.nvim",
883 version = "*", -- recommended, use latest release instead of latest commit 883 version = "*", -- recommended, use latest release instead of latest commit
@@ -895,12 +895,12 @@ require("lazy").setup({
895 "nvim-lua/plenary.nvim", 895 "nvim-lua/plenary.nvim",
896 }, 896 },
897 config = function() 897 config = function()
898 vim.keymap.set("n", "<leader>oo", ":Obsidian", { }) 898 vim.keymap.set("n", "<leader>oo", ":Obsidian", {})
899 vim.keymap.set("n", "<leader>ot", ":ObsidianTags<CR>", { }) 899 vim.keymap.set("n", "<leader>ot", ":ObsidianTags<CR>", {})
900 vim.keymap.set("n", "<leader>os", ":ObsidianSearch<CR>", { }) 900 vim.keymap.set("n", "<leader>os", ":ObsidianSearch<CR>", {})
901 vim.keymap.set("n", "<leader>oq", ":ObsidianQuickSwitch<CR>", { }) 901 vim.keymap.set("n", "<leader>oq", ":ObsidianQuickSwitch<CR>", {})
902 vim.keymap.set("v", "<leader>on", ":ObsidianLinkNew<CR>", { }) 902 vim.keymap.set("v", "<leader>on", ":ObsidianLinkNew<CR>", {})
903 vim.keymap.set("n", "<leader>ol", ":ObsidianLinks<CR>", { }) 903 vim.keymap.set("n", "<leader>ol", ":ObsidianLinks<CR>", {})
904 require("obsidian").setup({ 904 require("obsidian").setup({
905 workspaces = { 905 workspaces = {
906 { 906 {
@@ -961,8 +961,8 @@ require("lazy").setup({
961 }) 961 })
962 end, 962 end,
963 }, 963 },
964-- }}} 964 -- }}}
965-- Markdown: preview {{{ 965 -- Markdown: preview {{{
966 { 966 {
967 "iamcco/markdown-preview.nvim", 967 "iamcco/markdown-preview.nvim",
968 cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" }, 968 cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
@@ -982,7 +982,7 @@ require("lazy").setup({
982 vim.g.mkdp_browser = 'firefox' 982 vim.g.mkdp_browser = 'firefox'
983 end, 983 end,
984 }, 984 },
985-- }}} 985 -- }}}
986 -- markview.nvim {{{ 986 -- markview.nvim {{{
987 { 987 {
988 "OXY2DEV/markview.nvim", 988 "OXY2DEV/markview.nvim",
@@ -997,7 +997,7 @@ require("lazy").setup({
997 "nvim-tree/nvim-web-devicons" 997 "nvim-tree/nvim-web-devicons"
998 }, 998 },
999 config = function() 999 config = function()
1000 vim.keymap.set( 'n', '\\m', ":Markview<CR>", { buffer = bufnr, desc = '' }) 1000 vim.keymap.set('n', '\\m', ":Markview<CR>", { buffer = bufnr, desc = '' })
1001 end 1001 end
1002 }, 1002 },
1003 -- }}} 1003 -- }}}
@@ -1006,43 +1006,258 @@ require("lazy").setup({
1006 -- Use :help lspconfig-all to check servers 1006 -- Use :help lspconfig-all to check servers
1007 { 1007 {
1008 "neovim/nvim-lspconfig", 1008 "neovim/nvim-lspconfig",
1009 dependencies = {
1010 -- Automatically install LSPs and related tools to stdpath for Neovim
1011 { 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants
1012 'williamboman/mason-lspconfig.nvim',
1013 'WhoIsSethDaniel/mason-tool-installer.nvim',
1014
1015 -- Useful status updates for LSP.
1016 -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
1017 { 'j-hui/fidget.nvim', opts = {} },
1018
1019 -- Allows extra capabilities provided by nvim-cmp
1020 'hrsh7th/cmp-nvim-lsp',
1021 },
1009 lazy = false, 1022 lazy = false,
1010 config = function() 1023 config = function()
1011 local lspconfig = require "lspconfig" 1024 -- Brief aside: **What is LSP?**
1012 -- 1025 --
1013 -- typescript 1026 -- LSP is an initialism you've probably heard, but might not understand what it is.
1014 lspconfig.lua_ls.setup {}
1015 lspconfig.tsserver.setup {}
1016 lspconfig.vimls.setup {}
1017 lspconfig.html.setup {}
1018 -- 1027 --
1019 vim.keymap.set("n", "<leader>F", function() 1028 -- LSP stands for Language Server Protocol. It's a protocol that helps editors
1020 vim.lsp.buf.format() 1029 -- and language tooling communicate in a standardized fashion.
1021 end, { desc = "format files" }) 1030 --
1022 end, 1031 -- In general, you have a "server" which is some tool built to understand a particular
1023 }, 1032 -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers
1024 -- }}} 1033 -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone
1025 -- Mason {{{ 1034 -- processes that communicate with some "client" - in this case, Neovim!
1026 { 1035 --
1027 "williamboman/mason.nvim", 1036 -- LSP provides Neovim with features like:
1028 dependencies = { 1037 -- - Go to definition
1029 "williamboman/mason-lspconfig.nvim", 1038 -- - Find references
1030 }, 1039 -- - Autocompletion
1031 config = function() 1040 -- - Symbol Search
1041 -- - and more!
1042 --
1043 -- Thus, Language Servers are external tools that must be installed separately from
1044 -- Neovim. This is where `mason` and related plugins come into play.
1045 --
1046 -- If you're wondering about lsp vs treesitter, you can check out the wonderfully
1047 -- and elegantly composed help section, `:help lsp-vs-treesitter`
1048
1049 -- This function gets run when an LSP attaches to a particular buffer.
1050 -- That is to say, every time a new file is opened that is associated with
1051 -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this
1052 -- function will be executed to configure the current buffer
1053 vim.api.nvim_create_autocmd('LspAttach', {
1054 group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
1055 callback = function(event)
1056 -- NOTE: Remember that Lua is a real programming language, and as such it is possible
1057 -- to define small helper and utility functions so you don't have to repeat yourself.
1058 --
1059 -- In this case, we create a function that lets us more easily define mappings specific
1060 -- for LSP related items. It sets the mode, buffer and description for us each time.
1061 local map = function(keys, func, desc)
1062 vim.keymap.set('n', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
1063 end
1064 map("<leader>F", function() vim.lsp.buf.format() end, "Format files") -- Jump to the definition of the word under your cursor.
1065
1066 -- This is where a variable was first declared, or where a function is defined, etc.
1067 -- To jump back, press <C-t>.
1068 map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
1069
1070 -- Find references for the word under your cursor.
1071 map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
1072
1073 -- Jump to the implementation of the word under your cursor.
1074 -- Useful when your language has ways of declaring types without an actual implementation.
1075 map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
1076
1077 -- Jump to the type of the word under your cursor.
1078 -- Useful when you're not sure what type a variable is and you want to see
1079 -- the definition of its *type*, not where it was *defined*.
1080 map('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
1081
1082 -- Fuzzy find all the symbols in your current document.
1083 -- Symbols are things like variables, functions, types, etc.
1084 map('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
1085
1086 -- Fuzzy find all the symbols in your current workspace.
1087 -- Similar to document symbols, except searches over your entire project.
1088 map('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
1089
1090 -- Rename the variable under your cursor.
1091 -- Most Language Servers support renaming across files, etc.
1092 map('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
1093
1094 -- Execute a code action, usually your cursor needs to be on top of an error
1095 -- or a suggestion from your LSP for this to activate.
1096 map('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
1097
1098 -- WARN: This is not Goto Definition, this is Goto Declaration.
1099 -- For example, in C this would take you to the header.
1100 map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
1101
1102 -- The following two autocommands are used to highlight references of the
1103 -- word under your cursor when your cursor rests there for a little while.
1104 -- See `:help CursorHold` for information about when this is executed
1105 --
1106 -- When you move your cursor, the highlights will be cleared (the second autocommand).
1107 local client = vim.lsp.get_client_by_id(event.data.client_id)
1108 if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then
1109 local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false })
1110 vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
1111 buffer = event.buf,
1112 group = highlight_augroup,
1113 callback = vim.lsp.buf.document_highlight,
1114 })
1115
1116 vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
1117 buffer = event.buf,
1118 group = highlight_augroup,
1119 callback = vim.lsp.buf.clear_references,
1120 })
1121
1122 vim.api.nvim_create_autocmd('LspDetach', {
1123 group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }),
1124 callback = function(event2)
1125 vim.lsp.buf.clear_references()
1126 vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf }
1127 end,
1128 })
1129 end
1130
1131 -- The following code creates a keymap to toggle inlay hints in your
1132 -- code, if the language server you are using supports them
1133 --
1134 -- This may be unwanted, since they displace some of your code
1135 if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then
1136 map('<leader>th', function()
1137 vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf })
1138 end, '[T]oggle Inlay [H]ints')
1139 end
1140 end,
1141 })
1142
1143 -- LSP servers and clients are able to communicate to each other what features they support.
1144 -- By default, Neovim doesn't support everything that is in the LSP specification.
1145 -- When you add nvim-cmp, luasnip, etc. Neovim now has *more* capabilities.
1146 -- So, we create new capabilities with nvim cmp, and then broadcast that to the servers.
1147 local capabilities = vim.lsp.protocol.make_client_capabilities()
1148 capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())
1149
1150 -- Enable the following language servers
1151 -- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
1152 --
1153 -- Add any additional override configuration in the following tables. Available keys are:
1154 -- - cmd (table): Override the default command used to start the server
1155 -- - filetypes (table): Override the default list of associated filetypes for the server
1156 -- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
1157 -- - settings (table): Override the default settings passed when initializing the server.
1158 -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
1159 local servers = {
1160 -- clangd = {},
1161 -- gopls = {},
1162 -- pyright = {},
1163 -- rust_analyzer = {},
1164 -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs
1165 --
1166 -- Some languages (like typescript) have entire language plugins that can be useful:
1167 -- https://github.com/pmizio/typescript-tools.nvim
1168 --
1169 -- But for many setups, the LSP (`tsserver`) will work just fine
1170 -- tsserver = {},
1171 --
1172 vimls = {},
1173
1174 lua_ls = {
1175 -- cmd = {...},
1176 -- filetypes = { ...},
1177 -- capabilities = {},
1178 settings = {
1179 Lua = {
1180 completion = {
1181 callSnippet = 'Replace',
1182 },
1183 -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
1184 -- diagnostics = { disable = { 'missing-fields' } },
1185 },
1186 },
1187 },
1188 }
1189
1190 -- Ensure the servers and tools above are installed
1191 -- To check the current status of installed tools and/or manually install
1192 -- other tools, you can run
1193 -- :Mason
1194 --
1195 -- You can press `g?` for help in this menu.
1032 require('mason').setup { 1196 require('mason').setup {
1033 automatically_installation = true, 1197 automatically_installation = true,
1034 ensure_installed = { 1198 }
1035 "vim-language-server", 1199
1036 "lua-language-server", 1200 -- You can add other tools here that you want Mason to install
1037 "css-lsp", 1201 -- for you, so that they are available from within Neovim.
1038 "html-lsp", 1202 local ensure_installed = vim.tbl_keys(servers or {})
1039 "prettier", 1203 vim.list_extend(ensure_installed, {
1040 "stylua", 1204 'stylua', -- Used to format Lua code
1205 })
1206 require('mason-tool-installer').setup { ensure_installed = ensure_installed }
1207
1208 require('mason-lspconfig').setup {
1209 handlers = {
1210 function(server_name)
1211 local server = servers[server_name] or {}
1212 -- This handles overriding only values explicitly passed
1213 -- by the server configuration above. Useful when disabling
1214 -- certain features of an LSP (for example, turning off formatting for tsserver)
1215 server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
1216 require('lspconfig')[server_name].setup(server)
1217 end,
1041 }, 1218 },
1042 } 1219 }
1043 end 1220 end,
1044 }, 1221 },
1045 -- }}} 1222 -- }}}
1223 -- -- comfort {{{
1224 -- { -- Autoformat
1225 -- 'stevearc/conform.nvim',
1226 -- event = { 'BufWritePre' },
1227 -- cmd = { 'ConformInfo' },
1228 -- keys = {
1229 -- {
1230 -- '<leader>F',
1231 -- function()
1232 -- require('conform').format { async = true, lsp_fallback = true }
1233 -- end,
1234 -- mode = '',
1235 -- desc = '[F]ormat buffer',
1236 -- },
1237 -- },
1238 -- opts = {
1239 -- notify_on_error = false,
1240 -- format_on_save = function(bufnr)
1241 -- -- Disable "format_on_save lsp_fallback" for languages that don't
1242 -- -- have a well standardized coding style. You can add additional
1243 -- -- languages here or re-enable it for the disabled ones.
1244 -- local disable_filetypes = { c = true, cpp = true }
1245 -- return {
1246 -- timeout_ms = 500,
1247 -- lsp_fallback = not disable_filetypes[vim.bo[bufnr].filetype],
1248 -- }
1249 -- end,
1250 -- formatters_by_ft = {
1251 -- lua = { 'stylua' },
1252 -- -- Conform can also run multiple formatters sequentially
1253 -- -- python = { "isort", "black" },
1254 -- --
1255 -- -- You can use 'stop_after_first' to run the first available formatter from the list
1256 -- -- javascript = { "prettierd", "prettier", stop_after_first = true },
1257 -- },
1258 -- },
1259 -- },
1260 -- -- }}}
1046 -- treesitter {{{ 1261 -- treesitter {{{
1047 { 1262 {
1048 "nvim-treesitter/nvim-treesitter", 1263 "nvim-treesitter/nvim-treesitter",
@@ -1068,12 +1283,6 @@ require("lazy").setup({
1068 1283
1069 indent = { enable = true }, 1284 indent = { enable = true },
1070 }) 1285 })
1071 vim.cmd([[
1072 syn match MarkdownHtmlDetails '^<details>' conceal cchar=▶
1073 syn match MarkdownHtmlSummary '<summary>' conceal cchar=
1074 syn match MarkdownHtmlSummaryEnd '</summary>' conceal
1075 syn match MarkdownHtmlDetailsEnd '^</details>' conceal cchar=E
1076 ]])
1077 end, 1286 end,
1078 }, 1287 },
1079 -- }}} 1288 -- }}}
@@ -1103,7 +1312,7 @@ require("lazy").setup({
1103 require("luasnip.loaders.from_vscode").lazy_load() 1312 require("luasnip.loaders.from_vscode").lazy_load()
1104 require("luasnip.loaders.from_lua").load() 1313 require("luasnip.loaders.from_lua").load()
1105 require("luasnip.loaders.from_lua").lazy_load { paths = vim.g.lua_snippets_path or "" } 1314 require("luasnip.loaders.from_lua").lazy_load { paths = vim.g.lua_snippets_path or "" }
1106 -- 1315
1107 vim.api.nvim_create_autocmd("InsertLeave", { 1316 vim.api.nvim_create_autocmd("InsertLeave", {
1108 callback = function() 1317 callback = function()
1109 if 1318 if
@@ -1116,7 +1325,7 @@ require("lazy").setup({
1116 }) 1325 })
1117 end, 1326 end,
1118 }, 1327 },
1119 -- 1328
1120 -- cmp sources plugins 1329 -- cmp sources plugins
1121 { 1330 {
1122 "hrsh7th/cmp-nvim-lua", 1331 "hrsh7th/cmp-nvim-lua",
@@ -1158,7 +1367,7 @@ require("lazy").setup({
1158 formatting = { 1367 formatting = {
1159 format = require('lspkind').cmp_format({ 1368 format = require('lspkind').cmp_format({
1160 with_text = true, -- do not show text alongside icons 1369 with_text = true, -- do not show text alongside icons
1161 maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters) 1370 maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters)
1162 before = function(entry, vim_item) 1371 before = function(entry, vim_item)
1163 -- Source 显示提示来源 1372 -- Source 显示提示来源
1164 vim_item.menu = '<' .. entry.source.name .. '>' 1373 vim_item.menu = '<' .. entry.source.name .. '>'
@@ -1210,30 +1419,30 @@ require("lazy").setup({
1210 'nvim-treesitter/nvim-treesitter', -- optional 1419 'nvim-treesitter/nvim-treesitter', -- optional
1211 'nvim-tree/nvim-web-devicons', -- optional 1420 'nvim-tree/nvim-web-devicons', -- optional
1212 }, 1421 },
1213 config = function() 1422 config = function()
1214 require('lspsaga').setup({ 1423 require('lspsaga').setup({
1215 autochdir = true, 1424 autochdir = true,
1216 }) 1425 })
1217 vim.api.nvim_create_autocmd("LspAttach", { 1426 vim.api.nvim_create_autocmd("LspAttach", {
1218 group = custom_autocommands, 1427 group = custom_autocommands,
1219 pattern = "*", 1428 pattern = "*",
1220 callback = function(args) 1429 callback = function(args)
1221 local map = vim.api.nvim_buf_set_keymap 1430 local map = vim.api.nvim_buf_set_keymap
1222 map(0, "n", "gd", "<cmd>Lspsaga goto_definition<cr>", {silent = true, noremap = true}) 1431 map(0, "n", "gd", "<cmd>Lspsaga goto_definition<cr>", { silent = true, noremap = true })
1223 map(0, "n", "gr", "<cmd>Lspsaga rename<cr>", {silent = true, noremap = true}) 1432 map(0, "n", "gR", "<cmd>Lspsaga rename<cr>", { silent = true, noremap = true })
1224 map(0, "n", "gx", "<cmd>Lspsaga code_action<cr>", {silent = true, noremap = true}) 1433 map(0, "n", "gx", "<cmd>Lspsaga code_action<cr>", { silent = true, noremap = true })
1225 map(0, "x", "gx", ":<c-u>Lspsaga range_code_action<cr>", {silent = true, noremap = true}) 1434 map(0, "x", "gx", ":<c-u>Lspsaga range_code_action<cr>", { silent = true, noremap = true })
1226 map(0, "n", "K", "<cmd>Lspsaga hover_doc<cr>", {silent = true, noremap = true}) 1435 map(0, "n", "K", "<cmd>Lspsaga hover_doc<cr>", { silent = true, noremap = true })
1227 map(0, "n", "go", "<cmd>Lspsaga show_line_diagnostics<cr>", {silent = true, noremap = true}) 1436 map(0, "n", "go", "<cmd>Lspsaga show_line_diagnostics<cr>", { silent = true, noremap = true })
1228 map(0, "n", "gj", "<cmd>Lspsaga diagnostic_jump_next<cr>", {silent = true, noremap = true}) 1437 map(0, "n", "gj", "<cmd>Lspsaga diagnostic_jump_next<cr>", { silent = true, noremap = true })
1229 map(0, "n", "gk", "<cmd>Lspsaga diagnostic_jump_prev<cr>", {silent = true, noremap = true}) 1438 map(0, "n", "gk", "<cmd>Lspsaga diagnostic_jump_prev<cr>", { silent = true, noremap = true })
1230 1439
1231 -- Don't know why... Everytime when modeline is set and insert a single char 1440 -- Don't know why... Everytime when modeline is set and insert a single char
1232 -- while inside a fold, the fold closes. 1441 -- while inside a fold, the fold closes.
1233 vim.opt_local.modeline = false 1442 vim.opt_local.modeline = false
1234 end, 1443 end,
1235 }) 1444 })
1236 end 1445 end
1237 }, 1446 },
1238 -- }}} 1447 -- }}}
1239 -- -- conform {{{ 1448 -- -- conform {{{