neovim

Personal neovim configuration files
git clone git://gtms.dev/neovim
Log | Files | Refs

commit 119c5931779aa6ee2e6f9bd3aa8fbe089399e0a8
parent d4206b98b1b6abec50bba8e260236ac1ce978701
Author: Tomas Nemec <owl@gtms.dev>
Date:   Fri, 30 Jun 2023 02:08:22 +0200

update: copilot

Diffstat:
Mafter/plugin/cmp.lua | 29++++++++++++++++++-----------
Aafter/plugin/copilot.lua | 31+++++++++++++++++++++++++++++++
Mafter/plugin/lsp.lua | 5+++--
Mlua/plugins.lua | 7+++++--
Mlua/tms/p/telescope.lua | 6+++---
Alua/tms/toggle.lua | 33+++++++++++++++++++++++++++++++++
Mplugin/unimpaired.lua | 50+++++++++++---------------------------------------
7 files changed, 104 insertions(+), 57 deletions(-)

diff --git a/after/plugin/cmp.lua b/after/plugin/cmp.lua @@ -44,12 +44,19 @@ local cmp = require('cmp') -- }) -- cmp.register_source('exe', require('tms.p.cmp.exe_source').new()) -local function doOrOpen(fn, t) - return function(_) +local function close() + return function(fallback) + if pcall(require, 'copilot') then + local copilot = require('copilot.suggestion') + if copilot.is_visible() then + fallback = copilot.dismiss + end + end + if cmp.visible() then - fn(t) + cmp.abort() else - cmp.complete() + fallback() end end end @@ -65,7 +72,7 @@ cmp.setup({ require('luasnip').lsp_expand(args.body) end, }, - view = { entries = { name = 'custom' } }, + -- view = { entries = { name = 'custom' } }, formatting = { format = function(entry, vim_item) -- Kind icons @@ -83,13 +90,13 @@ cmp.setup({ end, }, mapping = { - ['<c-e>'] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close() }), + ['<c-e>'] = cmp.mapping({ i = close(), c = cmp.mapping.close() }), ['<c-y>'] = cmp.mapping.confirm({ select = true }), - ['<c-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), + ['<c-u>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), ['<c-d>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), - -- ['<c-space>'] = cmp.mapping { i = doOrOpen(cmp.confirm, { select = true }) }, - ['<c-p>'] = cmp.mapping({ i = doOrOpen(cmp.select_prev_item, { behavior = cmp.SelectBehavior.Select }) }), - ['<c-n>'] = cmp.mapping({ i = doOrOpen(cmp.select_next_item, { behavior = cmp.SelectBehavior.Select }) }), + ['<c-p>'] = cmp.mapping({ i = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select }) }), + ['<c-n>'] = cmp.mapping({ i = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select }) }), + ['<c-space>'] = cmp.mapping({ i = cmp.mapping.complete() }), }, sources = cmp.config.sources({ { name = 'nvim_lsp' }, @@ -120,7 +127,7 @@ cmp.setup({ -- compare.order, -- }, -- }, - experimental = { ghost_text = true }, + experimental = { ghost_text = false }, }) -- cmp.setup.cmdline('/', { diff --git a/after/plugin/copilot.lua b/after/plugin/copilot.lua @@ -0,0 +1,31 @@ +if not pcall(require, 'copilot') then + return +end + +local copilot = require('copilot') +copilot.setup({ -- - + suggestion = { + enabled = true, + auto_trigger = true, + keymap = { next = '<c-n>', prev = '<c-p>', accept = '<c-y>', dismiss = '<c-e>' }, + }, +}) + +local toggle = require('tms.toggle') +toggle.fn('p', require('copilot.suggestion').toggle_auto_trigger, 'copilot') + +if pcall(require, 'cmp') then + local cmp = require('cmp') + cmp.event:on('menu_opened', function() + vim.b.copilot_suggestion_hidden = true + if require('copilot.suggestion').is_visible() then + require('copilot.suggestion').dismiss() + end + end) + cmp.event:on('menu_closed', function() + vim.b.copilot_suggestion_hidden = false + if not require('copilot.suggestion').is_visible() then + require('copilot.suggestion').next() + end + end) +end diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua @@ -30,8 +30,9 @@ local function keymap(client, buf) vim.keymap.set('n', 'gm', lb.implementation, opt('LSP Implementation')) end if client.supports_method('textDocument/signatureHelp') then - vim.keymap.set('n', '<c-p>', lb.signature_help, opt('LSP Signature Help')) - vim.keymap.set('i', '<c-p>', lb.signature_help, opt('LSP Signature Help')) + -- TODO(tms) 29.06.23: + -- vim.keymap.set('n', '<c-p>', lb.signature_help, opt('LSP Signature Help')) + -- vim.keymap.set('i', '<c-p>', lb.signature_help, opt('LSP Signature Help')) end if client.supports_method('textDocument/references') then vim.keymap.set('n', 'gr', lb.references, opt('LSP References')) diff --git a/lua/plugins.lua b/lua/plugins.lua @@ -29,8 +29,8 @@ return packer.startup { use 'tpope/vim-repeat' use 'kylechui/nvim-surround' use 'chaoren/vim-wordmotion' -- word counts with _,.,-,... - use 'romgrk/equal.operator' -- equal text object `lefthand = righthand` - use 'godlygeek/tabular' -- align + use 'romgrk/equal.operator' -- equal text object `lefthand = righthand` + use 'godlygeek/tabular' -- align -- use 'windwp/nvim-autopairs' use 'numToStr/Comment.nvim' use 'mbbill/undotree' @@ -97,6 +97,7 @@ return packer.startup { 'hrsh7th/cmp-calc', 'hrsh7th/cmp-cmdline', 'hrsh7th/cmp-nvim-lsp', + 'zbirenbaum/copilot-cmp', 'hrsh7th/cmp-nvim-lsp-signature-help', 'hrsh7th/cmp-nvim-lua', 'hrsh7th/cmp-path', @@ -123,6 +124,8 @@ return packer.startup { use { 'jose-elias-alvarez/null-ls.nvim', requires = { 'nvim-lua/plenary.nvim' } } use 'lvimuser/lsp-inlayhints.nvim' + use 'zbirenbaum/copilot.lua' + -- dap use 'mfussenegger/nvim-dap' use 'leoluz/nvim-dap-go' diff --git a/lua/tms/p/telescope.lua b/lua/tms/p/telescope.lua @@ -35,15 +35,15 @@ function L.dd_large_noprev(opts) return themes.get_dropdown(opts) end -M.mail_address = function() +function M.mail_address() pickers.new { results_title = 'Adresses', - finder = finders.new_oneshot_job({ 'goobook', 'query', '.*' }), + finder = finders.new_oneshot_job({ 'mates', 'email-query' }), sorter = sorters.get_fuzzy_file(), attach_mappings = function(_) action_set.select:replace(function(prompt_bufnr, _) local entry = action_state.get_selected_entry() - local mail = entry.value:match('(%S+)') + local mail = entry.value:match('<(%S+)>') actions.close(prompt_bufnr) vim.fn.setreg('+', mail) vim.fn.setreg('*', mail) diff --git a/lua/tms/toggle.lua b/lua/tms/toggle.lua @@ -0,0 +1,33 @@ +local M = {} + +function M.option(letter, option, mode) + vim.keymap.set('n', 'yo' .. letter, function() + local scope + if mode == 'local' then + scope = vim.opt_local + elseif mode == 'global' then + scope = vim.opt_global + else + scope = vim.opt + end + + local val = scope[option]:get() + if type(val) == 'boolean' then + scope[option] = not val + elseif type(val) == 'number' then + if val == 1 then + scope[option] = 0 + else + scope[option] = 1 + end + end + end, { desc = 'Toggle ' .. option }) +end + +function M.fn(letter, fn, desc) + vim.keymap.set('n', 'yo' .. letter, function() + fn() + end, { desc = 'Toggle ' .. desc }) +end + +return M diff --git a/plugin/unimpaired.lua b/plugin/unimpaired.lua @@ -24,42 +24,14 @@ vim.keymap.set('n', '<c-h><c-s>', '[s') vim.keymap.set('n', '<c-l>s', ']S') vim.keymap.set('n', '<c-h>s', '[S') -local toggle = function(op, mode) - local scope - if mode == 'local' then - scope = vim.opt_local - elseif mode == 'global' then - scope = vim.opt_global - else - scope = vim.opt - end - - local val = scope[op]:get() - if type(val) == 'boolean' then - scope[op] = not val - elseif type(val) == 'number' then - if val == 1 then - scope[op] = 0 - else - scope[op] = 1 - end - end - -end - -local map_toggle = function(letter, option, mode) - vim.keymap.set('n', 'yo' .. letter, function() - toggle(option, mode) - end) -end - -map_toggle('c', 'cursorline', 'local') -map_toggle('u', 'cursorcolumn', 'local') -map_toggle('h', 'hlsearch', 'global') -map_toggle('i', 'ignorecase', 'global') -map_toggle('l', 'list', 'local') -map_toggle('n', 'number', 'local') -map_toggle('r', 'relativenumber', 'local') -map_toggle('s', 'spell', 'local') -map_toggle('w', 'wrap', 'local') -map_toggle('d', 'cmdheight', 'global') +local toggle = require('tms.toggle') +toggle.option('c', 'cursorline', 'local') +toggle.option('u', 'cursorcolumn', 'local') +toggle.option('h', 'hlsearch', 'global') +toggle.option('i', 'ignorecase', 'global') +toggle.option('l', 'list', 'local') +toggle.option('n', 'number', 'local') +toggle.option('r', 'relativenumber', 'local') +toggle.option('s', 'spell', 'local') +toggle.option('w', 'wrap', 'local') +toggle.option('d', 'cmdheight', 'global')