diff --git a/init.lua b/init.lua index ff3cfba..e1d9ecd 100644 --- a/init.lua +++ b/init.lua @@ -39,6 +39,7 @@ o.title = true -- Set title of terminal window o.updatetime = 300 -- Write swap file every 300 ms (supposedly reduces delays) o.foldlevel = 99 -- Keep all folds open o.foldlevelstart = 99 +o.foldenable = true -- Don't disable folds o.conceallevel = 2 -- Hide concealed text, use replacement if defined opt.listchars = { -- Symbols for whitespace chars when 'list' is enabled tab = '🭰 ', @@ -48,6 +49,9 @@ opt.listchars = { -- Symbols for whitespace chars when 'list' is ena opt.fillchars = { -- Characters to fill certain types of empty space with diff = ' ', fold = ' ', + foldopen= '', + foldsep=' ', + foldclose='' } opt.diffopt:append({'indent-heuristic', 'algorithm:histogram'}) @@ -111,14 +115,24 @@ do -- which-key might not be available yet local ok, which_key = pcall(require, 'which-key') if ok then - which_key.register { ['!'] = {'copen', 'Quickfix window'} } - which_key.register { [''] = {'set number! relativenumber!', 'Toggle relative numbers'} } - which_key.register { [''] = {'set number!', 'Toggle line numbers'} } - - which_key.register { [''] = {'h', 'Go to the left window'} } - which_key.register { [''] = {'l', 'Go to the right window'} } - which_key.register { [''] = {'n', 'Go to the up window'} } - which_key.register { [''] = {'e', 'Go to the down window'} } + which_key.register { + ['!'] = {'copen', 'Quickfix window'}, + [''] = {'set number! relativenumber!', 'Toggle relative numbers'}, + [''] = {'set number!', 'Toggle line numbers'}, + [''] = {'h', 'Go to the left window'}, + [''] = {'l', 'Go to the right window'}, + [''] = {'j', 'Go to the up window'}, + [''] = {'k', 'Go to the down window'}, + ['+'] = {zoom_in, "Zoom in"}, + ['-'] = {zoom_out, "Zoom out"}, + ['q'] = { + name = 'Quickfix', + q = {'copen', 'Quickfix list'}, + c = {'cclose', 'Close quickfix'}, + n = {'cnext', 'Next quickfix'}, + p = {'cprev', 'Previous quickfix'}, + } + } which_key.register { [''] = {function () local ok, notify = pcall(require, 'notify') @@ -251,6 +265,7 @@ require'packer'.startup(function(use) use 'mboughaba/i3config.vim' use 'plasticboy/vim-markdown' use 'mracos/mermaid.vim' + use 'lifepillar/pgsql.vim' use 'ajouellette/sway-vim-syntax' use 'cespare/vim-toml' use 'rust-lang/rust.vim' @@ -285,6 +300,13 @@ require'packer'.startup(function(use) use {'julian/vim-textobj-variable-segment', requires = {'kana/vim-textobj-user'}, branch = 'main'} use {'nvim-treesitter/nvim-treesitter', run = ':TSUpdate'} use 'windwp/nvim-ts-autotag' + use {'kevinhwang91/nvim-ufo', requires = 'kevinhwang91/promise-async', config = function() + local ok, ufo = pcall(require, 'ufo') + if not ok then return end + vim.keymap.set('n', 'zR', ufo.openAllFolds) + vim.keymap.set('n', 'zR', ufo.closeAllFolds) + ufo.setup {} + end} use 'hrsh7th/vim-vsnip' -- LSP -- @@ -698,8 +720,8 @@ vim.keymap.set('n', 'G', 'tab Git', {desc = 'Git status (new ta require'gitsigns'.setup { on_attach = function () local gitsigns = require'gitsigns' - vim.keymap.set('n', ']h', gitsigns.next_hunk, {desc = 'Next hunk'}) - vim.keymap.set('n', '[h', gitsigns.prev_hunk, {desc = 'Previous hunk'}) + vim.keymap.set('n', ']c', gitsigns.next_hunk, {desc = 'Next hunk'}) + vim.keymap.set('n', '[c', gitsigns.prev_hunk, {desc = 'Previous hunk'}) --- Prompt interactively for global comparison base local function change_base() @@ -725,7 +747,7 @@ require'gitsigns'.setup { d = {gitsigns.toggle_deleted, 'Toggle deleted lines'}, w = {gitsigns.toggle_word_diff, 'Toggle word diffs'}, l = {gitsigns.blame_line, 'Blame current line'}, - L = {gitsigns.toggle_line_blame, 'Toggle line blame'}, + L = {gitsigns.toggle_current_line_blame, 'Toggle line blame'}, b = {':Gitsigns change_base ', 'Change diff base'}, B = {gitsigns.reset_base, 'Reset diff base'}, } @@ -797,7 +819,7 @@ cmp.setup { {'i', 's'} ), -- Scroll documentation up - [''] = cmp.mapping(cmp.mapping.scroll_docs(4), {'i', 'c'}), -- Scroll documentation down [''] = cmp.mapping(cmp.mapping.scroll_docs(-4), {'i', 'c'}), -- Complete common substring @@ -844,7 +866,13 @@ cmp.setup.filetype({'dap-repl', 'dapui_watches', 'dapui_hover'}, { { name = 'dap' }, }, }) +-- Which client functionality to tell LSP servers we support local capabilities = require'cmp_nvim_lsp'.default_capabilities() +-- nvim-ufo folding capabilities +capabilities.textDocument.foldingRange = { + dynamicRegistration = false, + lineFoldingOnly = true, +} ---- lsp: language servers ---- --- Performs keymaps and other setup specific to buffers with LSP enabled @@ -855,12 +883,12 @@ local function on_attach(client, bufnr) require'which-key'.register({ ['l'] = { D = {vim.lsp.buf.declaration, 'Declaration'}, - d = {vim.lsp.buf.definition, 'Definition'}, - i = {vim.lsp.buf.implementation, 'Implementation'}, + d = {'Telescope lsp_definitions', 'Definition'}, + i = {'Telescope lsp_implementations', 'Implementation'}, a = {vim.lsp.buf.code_action, 'Code action'}, r = {vim.lsp.buf.rename, 'Rename'}, - t = {vim.lsp.buf.type_definition, 'Type definition'}, - u = {vim.lsp.buf.references, 'Usages/references'} + t = {'Telescope lsp_type_definitions', 'Type definition'}, + u = {'Telescope lsp_references', 'Usages/references'} }, g = { d = {vim.lsp.buf.definition, 'Goto definition'}, @@ -888,7 +916,7 @@ local function on_attach(client, bufnr) [''] = {vim.lsp.buf.signature_help, 'Function signature'}, }, {buffer = bufnr}) require'which-key'.register({ - [''] = {vim.lsp.buf.signature_help, 'Function signature'} }, {buffer = bufnr, mode = 'i'}) vim.bo.tagfunc = 'v:lua.vim.lsp.tagfunc' @@ -959,11 +987,11 @@ au('FileType', { bundles = (function () -- add java-debug-adapter local bundles = { - vim.fn.glob(vim.fn.stdpath('data') .. '/mason/packages/java-debug-adapter/extension/server/com.microsoft.java.debug.plugin-*.jar', 1) + vim.fn.glob(vim.fn.stdpath('data') .. '/mason/packages/java-debug-adapter/extension/server/com.microsoft.java.debug.plugin-*.jar', true) } -- add java-test vim.list_extend(bundles, vim.split( - vim.fn.glob(vim.fn.stdpath'data' .. '/mason/packages/java-test/extension/server/*.jar', 1), + vim.fn.glob(vim.fn.stdpath'data' .. '/mason/packages/java-test/extension/server/*.jar', true), '\n' )) @@ -971,6 +999,8 @@ au('FileType', { end)(), }, + capabilities = capabilities, + on_attach = function (client, bufnr) on_attach(client, bufnr) jdtls.setup_dap() @@ -1171,6 +1201,18 @@ require('nvim-tree').setup { width = 45, }, } +-- Handle restoring sessions with nvim-tree windows properly +au('BufEnter', { + pattern = 'NvimTree*', + callback = function() + local api = require('nvim-tree.api') + local view = require('nvim-tree.view') + + if not view.is_visible() then + api.tree.open() + end + end, +}) vim.cmd'highlight NvimTreeOpenedFile guifg=NONE guibg=NONE gui=italic' vim.keymap.set('n', 't', 'NvimTreeFindFile', {desc = 'Nvim Tree'})