@@ -45,7 +45,7 @@ require('lazy').setup({
4545 ' neovim/nvim-lspconfig' ,
4646 dependencies = {
4747 -- Automatically install LSPs to stdpath for neovim
48- { ' williamboman/mason.nvim' , config = true } ,
48+ ' williamboman/mason.nvim' ,
4949 ' williamboman/mason-lspconfig.nvim' ,
5050
5151 -- Useful status updates for LSP
@@ -89,16 +89,24 @@ require('lazy').setup({
8989
9090 -- don't override the built-in and fugitive keymaps
9191 local gs = package.loaded .gitsigns
92- vim .keymap .set ({' n' , ' v' }, ' ]c' , function ()
93- if vim .wo .diff then return ' ]c' end
94- vim .schedule (function () gs .next_hunk () end )
92+ vim .keymap .set ({ ' n' , ' v' }, ' ]c' , function ()
93+ if vim .wo .diff then
94+ return ' ]c'
95+ end
96+ vim .schedule (function ()
97+ gs .next_hunk ()
98+ end )
9599 return ' <Ignore>'
96- end , {expr = true , buffer = bufnr , desc = " Jump to next hunk" })
97- vim .keymap .set ({' n' , ' v' }, ' [c' , function ()
98- if vim .wo .diff then return ' [c' end
99- vim .schedule (function () gs .prev_hunk () end )
100+ end , { expr = true , buffer = bufnr , desc = ' Jump to next hunk' })
101+ vim .keymap .set ({ ' n' , ' v' }, ' [c' , function ()
102+ if vim .wo .diff then
103+ return ' [c'
104+ end
105+ vim .schedule (function ()
106+ gs .prev_hunk ()
107+ end )
100108 return ' <Ignore>'
101- end , {expr = true , buffer = bufnr , desc = " Jump to previous hunk" })
109+ end , { expr = true , buffer = bufnr , desc = ' Jump to previous hunk' })
102110 end ,
103111 },
104112 },
@@ -127,6 +135,17 @@ require('lazy').setup({
127135 },
128136 },
129137
138+ --[[
139+ {
140+ -- Add indentation guides even on blank lines
141+ 'lukas-reineke/indent-blankline.nvim',
142+ -- Enable `lukas-reineke/indent-blankline.nvim`
143+ -- See `:help indent_blankline.txt`
144+ main = 'ibl',
145+ opts = {},
146+ },
147+ --]]
148+
130149 -- "gc" to comment visual regions/lines
131150 { ' numToStr/Comment.nvim' , opts = {} },
132151
@@ -290,12 +309,14 @@ vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc
290309vim .keymap .set (' n' , ' <leader>sw' , require (' telescope.builtin' ).grep_string , { desc = ' [S]earch current [W]ord' })
291310vim .keymap .set (' n' , ' <leader>sg' , require (' telescope.builtin' ).live_grep , { desc = ' [S]earch by [G]rep' })
292311vim .keymap .set (' n' , ' <leader>sd' , require (' telescope.builtin' ).diagnostics , { desc = ' [S]earch [D]iagnostics' })
293- vim .keymap .set (' n' , ' <leader>sr' , require (' telescope.builtin' ).resume , { desc = ' [S]earch [R]resume ' })
312+ vim .keymap .set (' n' , ' <leader>sr' , require (' telescope.builtin' ).resume , { desc = ' [S]earch [R]esume ' })
294313
295314-- [[ Configure Treesitter ]]
296315-- See `:help nvim-treesitter`
297- require (' nvim-treesitter.configs' ).setup {
298- -- Add languages to be installed here that you want installed for treesitter
316+ -- Defer Treesitter setup after first render to improve startup time of 'nvim {filename}'
317+ vim .defer_fn (function ()
318+ require (' nvim-treesitter.configs' ).setup {
319+ -- Add languages to be installed here that you want installed for treesitter
299320 ensure_installed = {
300321 ' c' ,
301322 ' cpp' ,
@@ -311,65 +332,66 @@ require('nvim-treesitter.configs').setup {
311332 ' vimdoc' ,
312333 },
313334
314- -- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!)
315- auto_install = false ,
316-
317- highlight = { enable = true },
318- indent = { enable = true },
319- incremental_selection = {
320- enable = true ,
321- keymaps = {
322- init_selection = ' <c-space>' ,
323- node_incremental = ' <c-space>' ,
324- scope_incremental = ' <c-s>' ,
325- node_decremental = ' <M-space>' ,
326- },
327- },
328- textobjects = {
329- select = {
335+ -- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!)
336+ auto_install = false ,
337+
338+ highlight = { enable = true },
339+ indent = { enable = true },
340+ incremental_selection = {
330341 enable = true ,
331- lookahead = true , -- Automatically jump forward to textobj, similar to targets.vim
332342 keymaps = {
333- -- You can use the capture groups defined in textobjects.scm
334- [' aa' ] = ' @parameter.outer' ,
335- [' ia' ] = ' @parameter.inner' ,
336- [' af' ] = ' @function.outer' ,
337- [' if' ] = ' @function.inner' ,
338- [' ac' ] = ' @class.outer' ,
339- [' ic' ] = ' @class.inner' ,
343+ init_selection = ' <c-space>' ,
344+ node_incremental = ' <c-space>' ,
345+ scope_incremental = ' <c-s>' ,
346+ node_decremental = ' <M-space>' ,
340347 },
341348 },
342- move = {
343- enable = true ,
344- set_jumps = true , -- whether to set jumps in the jumplist
345- goto_next_start = {
346- [' ]m' ] = ' @function.outer' ,
347- [' ]]' ] = ' @class.outer' ,
348- },
349- goto_next_end = {
350- [' ]M' ] = ' @function.outer' ,
351- [' ][' ] = ' @class.outer' ,
352- },
353- goto_previous_start = {
354- [' [m' ] = ' @function.outer' ,
355- [' [[' ] = ' @class.outer' ,
356- },
357- goto_previous_end = {
358- [' [M' ] = ' @function.outer' ,
359- [' []' ] = ' @class.outer' ,
349+ textobjects = {
350+ select = {
351+ enable = true ,
352+ lookahead = true , -- Automatically jump forward to textobj, similar to targets.vim
353+ keymaps = {
354+ -- You can use the capture groups defined in textobjects.scm
355+ [' aa' ] = ' @parameter.outer' ,
356+ [' ia' ] = ' @parameter.inner' ,
357+ [' af' ] = ' @function.outer' ,
358+ [' if' ] = ' @function.inner' ,
359+ [' ac' ] = ' @class.outer' ,
360+ [' ic' ] = ' @class.inner' ,
361+ },
360362 },
361- },
362- swap = {
363- enable = true ,
364- swap_next = {
365- [' <leader>a' ] = ' @parameter.inner' ,
363+ move = {
364+ enable = true ,
365+ set_jumps = true , -- whether to set jumps in the jumplist
366+ goto_next_start = {
367+ [' ]m' ] = ' @function.outer' ,
368+ [' ]]' ] = ' @class.outer' ,
369+ },
370+ goto_next_end = {
371+ [' ]M' ] = ' @function.outer' ,
372+ [' ][' ] = ' @class.outer' ,
373+ },
374+ goto_previous_start = {
375+ [' [m' ] = ' @function.outer' ,
376+ [' [[' ] = ' @class.outer' ,
377+ },
378+ goto_previous_end = {
379+ [' [M' ] = ' @function.outer' ,
380+ [' []' ] = ' @class.outer' ,
381+ },
366382 },
367- swap_previous = {
368- [' <leader>A' ] = ' @parameter.inner' ,
383+ swap = {
384+ enable = true ,
385+ swap_next = {
386+ [' <leader>a' ] = ' @parameter.inner' ,
387+ },
388+ swap_previous = {
389+ [' <leader>A' ] = ' @parameter.inner' ,
390+ },
369391 },
370392 },
371- },
372- }
393+ }
394+ end , 0 )
373395
374396-- Diagnostic keymaps
375397vim .keymap .set (' n' , ' [d' , vim .diagnostic .goto_prev , { desc = ' Go to previous diagnostic message' })
@@ -435,6 +457,22 @@ local on_attach = function(_, bufnr)
435457 end , { desc = ' Format current buffer with LSP' })
436458end
437459
460+ -- document existing key chains
461+ require (' which-key' ).register {
462+ [' <leader>c' ] = { name = ' [C]ode' , _ = ' which_key_ignore' },
463+ [' <leader>d' ] = { name = ' [D]ocument' , _ = ' which_key_ignore' },
464+ [' <leader>g' ] = { name = ' [G]it' , _ = ' which_key_ignore' },
465+ [' <leader>h' ] = { name = ' More git' , _ = ' which_key_ignore' },
466+ [' <leader>r' ] = { name = ' [R]ename' , _ = ' which_key_ignore' },
467+ [' <leader>s' ] = { name = ' [S]earch' , _ = ' which_key_ignore' },
468+ [' <leader>w' ] = { name = ' [W]orkspace' , _ = ' which_key_ignore' },
469+ }
470+
471+ -- mason-lspconfig requires that these setup functions are called in this order
472+ -- before setting up the servers.
473+ require (' mason' ).setup ()
474+ require (' mason-lspconfig' ).setup ()
475+
438476-- Enable the following language servers
439477-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
440478--
@@ -507,7 +545,7 @@ mason_lspconfig.setup_handlers {
507545 settings = servers [server_name ],
508546 filetypes = (servers [server_name ] or {}).filetypes ,
509547 }
510- end
548+ end ,
511549}
512550
513551-- [[ Configure nvim-cmp ]]
0 commit comments