diff --git a/.config/nvim/lua/config/plugin/nvim-cmp.lua b/.config/nvim/lua/config/plugin/nvim-cmp.lua index 55295fc2..1c1ab3ce 100644 --- a/.config/nvim/lua/config/plugin/nvim-cmp.lua +++ b/.config/nvim/lua/config/plugin/nvim-cmp.lua @@ -1,5 +1,12 @@ +local has_words_before = function() + unpack = unpack or table.unpack + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil +end + return function() local cmp = require'cmp' + local snippy = require("snippy") local lspkind = require('lspkind') cmp.setup({ @@ -17,18 +24,38 @@ return function() [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - local entry = cmp.get_selected_entry() - if not entry then - cmp.select_next_item({ behavior = cmp.SelectBehavior.Select }) + [""] = cmp.mapping({ + i = function(fallback) + if cmp.visible() and cmp.get_active_entry() then + cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = false }) else - cmp.confirm() + fallback() end - else - fallback() - end - end, {"i","s","c",}), + end, + s = cmp.mapping.confirm({ select = false }), + c = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = false }), + }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif snippy.can_expand_or_advance() then + snippy.expand_or_advance() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif snippy.can_jump(-1) then + snippy.previous() + else + fallback() + end + end, { "i", "s" }), }), sources = cmp.config.sources({ { name = "copilot" }, diff --git a/.config/nvim/lua/config/plugin/nvim-devdocs.lua b/.config/nvim/lua/config/plugin/nvim-devdocs.lua new file mode 100644 index 00000000..9dfb4759 --- /dev/null +++ b/.config/nvim/lua/config/plugin/nvim-devdocs.lua @@ -0,0 +1,17 @@ +return function () + require('nvim-devdocs').setup({ + float_win = { + relative = "editor", + height = 50, + width = 170, + border = "rounded", + }, + wrap = false, + previewer_cmd = "glow", + cmd_args = { "-s", "dark", "-w", "80" }, + after_open = function(bufnr) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '', ':close', {}) + end + }) +end + diff --git a/.config/nvim/lua/keybinds/plugin.lua b/.config/nvim/lua/keybinds/plugin.lua index 65332204..ebcf6ace 100644 --- a/.config/nvim/lua/keybinds/plugin.lua +++ b/.config/nvim/lua/keybinds/plugin.lua @@ -57,5 +57,11 @@ map('n', 'G', " Neogit", { desc = "Open Neogit" }) +map('n', 'lz', "DevdocsOpenFloat", { + noremap = true, + desc = "Open devdocs viewer" +}) + + vim.keymap.set("n", "", function() toggle_telescope(harpoon:list()) end, { desc = "Open harpoon window" }) diff --git a/.config/nvim/lua/keybinds/telescope.lua b/.config/nvim/lua/keybinds/telescope.lua index 2e91196c..7205e4d8 100644 --- a/.config/nvim/lua/keybinds/telescope.lua +++ b/.config/nvim/lua/keybinds/telescope.lua @@ -41,6 +41,11 @@ map('n', 'lw', "lua require('telescope.builtin').diagnostics()" desc = "List diagnostic items" }) +map('n', 'lm', "lua require('telescope.builtin').man_pages()", { + noremap = true, + desc = "List view manpage" +}) + map('n', '', "lua vim.lsp.buf.code_action()", { noremap = true, desc = "Pick code action" diff --git a/.config/nvim/lua/plugins.lua b/.config/nvim/lua/plugins.lua index f2a083dc..7ad583a3 100644 --- a/.config/nvim/lua/plugins.lua +++ b/.config/nvim/lua/plugins.lua @@ -275,5 +275,14 @@ return { "mfussenegger/nvim-dap", }, opts = {} + }, + { + "luckasRanarison/nvim-devdocs", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-telescope/telescope.nvim", + "nvim-treesitter/nvim-treesitter", + }, + config = require("config.plugin.nvim-devdocs") } }