فهرست منبع

Desktop. Added CR accept cmp, ESC closes cmp if open

Don Duvall 1 سال پیش
والد
کامیت
6e9ba84f5c
6فایلهای تغییر یافته به همراه193 افزوده شده و 27 حذف شده
  1. 2 1
      lua/config/options.lua
  2. 4 2
      lua/plugins/copilot.lua
  3. 8 0
      lua/plugins/disabled.lua
  4. 10 16
      lua/plugins/lspconfig.lua
  5. 7 0
      lua/plugins/luasnip.lua
  6. 162 8
      lua/plugins/nvim-cmp.lua

+ 2 - 1
lua/config/options.lua

@@ -11,6 +11,7 @@ vim.opt.softtabstop = 4
 vim.opt.shiftwidth = 4
 
 vim.opt.autoindent = true
-
 vim.g.autoformat = false
 
+vim.g.autoclose = 0
+

+ 4 - 2
lua/plugins/copilot.lua

@@ -4,7 +4,7 @@ return {
         cmd = "Copilot",
         build = ":Copilot auth",
         opts = {
-            suggestion = { enabled = false },
+            suggestion = { enabled = true, auto_trigger = true },
             panel = { enabled = false },
             filetypes = { ["*"] = true },
         },
@@ -12,7 +12,9 @@ return {
     {
         "zbirenbaum/copilot-cmp",
         dependencies = "copilot.lua",
-        opts = {},
+        opts = {
+            
+        },
         config = function(_, opts)
             local copilot_cmp = require("copilot_cmp")
             copilot_cmp.setup(opts)

+ 8 - 0
lua/plugins/disabled.lua

@@ -0,0 +1,8 @@
+return {
+
+    { 
+        "echasnovski/mini.pairs",
+        enabled = false,
+    }
+
+}

+ 10 - 16
lua/plugins/lspconfig.lua

@@ -1,19 +1,13 @@
 return {
-  "neovim/nvim-lspconfig",
-  ---@class PluginLspOpts
-  opts = {
-    ---@type lspconfig.options
-    --autoformat = false,
-    servers = {
-      -- pyright will be automatically installed with mason and loaded with lspconfig
-      pyright = {},
-      intelephense = {
-        --          settings = {
-        --            intelephense = {
-        --              files = {}
-        --            }
-        --          }
-      },
+    "neovim/nvim-lspconfig",
+    ---@class PluginLspOpts
+    opts = {
+        ---@type lspconfig.options
+        --autoformat = false,
+        servers = {
+            -- pyright will be automatically installed with mason and loaded with lspconfig
+            pyright = {},
+            intelephense = {},
+        },
     },
-  },
 }

+ 7 - 0
lua/plugins/luasnip.lua

@@ -0,0 +1,7 @@
+return {
+	"L3MON4D3/LuaSnip",
+	-- follow latest release.
+	version = "v2.*", -- Replace <CurrentMajor> by the latest released major (first number of latest release)
+	-- install jsregexp (optional!).
+	build = "make install_jsregexp"
+}

+ 162 - 8
lua/plugins/nvim-cmp.lua

@@ -1,3 +1,95 @@
+
+-- 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 {
+    {
+        "L3MON4D3/LuaSnip",
+        keys = function()
+            return {}
+        end,
+    },
+    -- then: setup supertab in cmp
+    {
+        "hrsh7th/nvim-cmp",
+        dependencies = {
+            "hrsh7th/cmp-emoji",
+        },
+        ---@param opts cmp.ConfigSchema
+        opts = function(_, opts)
+            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
+
+            local luasnip = require("luasnip")
+            local cmp = require("cmp")
+
+            opts.mapping = vim.tbl_extend("force", opts.mapping, {
+                ["<Tab>"] = cmp.mapping(function(fallback)
+                    if cmp.visible() then
+                        cmp.select_next_item()
+                        -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
+                        -- this way you will only jump inside the snippet region
+                    elseif luasnip.expand_or_jumpable() then
+                        luasnip.expand_or_jump()
+                    elseif has_words_before() then
+                        cmp.complete()
+                    else
+                        fallback()
+                    end
+                end, { "i", "s" }),
+                ["<S-Tab>"] = cmp.mapping(function(fallback)
+                    if cmp.visible() then
+                        cmp.select_prev_item()
+                    elseif luasnip.jumpable(-1) then
+                        luasnip.jump(-1)
+                    else
+                        fallback()
+                    end
+                end, { "i", "s" }),
+                ["<CR>"] = cmp.mapping.confirm({
+                    behavior = cmp.ConfirmBehavior.Replace,
+                    select = true,
+                }),
+                ["<C-Space>"] = cmp.mapping.complete(),
+                ["<Esc>"] = cmp.mapping.close(),
+                --["<C-t>"] = { 
+                --    "copilot#Accept('\\<CR>')", 
+                --    desc = "copilot expand", 
+                --    silent = true, 
+                --    expr = true, 
+                --    script = true
+                --},
+            })
+        end,
+    },
+}
+
+
+
+
+
+
+
+
+
+-- vim.opt.completeopt = "menu,menuone,noselect"
+
+
+
+
+
+--[[
 return {
     "nvim-cmp",
     dependencies = {
@@ -6,15 +98,77 @@ return {
             "zbirenbaum/copilot-cmp",
             opts = {}
         },
+        "L3MON4D3/LuaSnip",
     },
-    opts = function(_, opts)
+
+    config = function(_, opts)
+        -- TODO: This is should be the cmp configuration with its custom bindings?
         local cmp = require("cmp")
-        opts.sources = cmp.config.sources(vim.list_extend(
-            opts.sources, 
-            {
-                { name = "copilot" }, 
-                { name = "emoji" }
-            }
-        ))
+        local luasnip = require("luasnip")
+
+        opts.mapping = {
+            ["<Tab>"] = cmp.mapping(
+                function(fallback)
+                    if cmp.visible() then
+                        cmp.select_next_item()
+                    elseif luasnip.expand_or_jumpable() then
+                        luasnip.expand_or_jump()
+                    elseif has_words_before() then
+                        cmp.complete()
+                    else
+                        fallback()
+                    end
+                end, { "i", "s" }),
+            ["<S-Tab>"] = cmp.mapping(
+                function(fallback)
+                    if cmp.visible() then
+                        cmp.select_prev_item()
+                    elseif luasnip.jumpable(-1) then
+                        luasnip.jump(-1)
+                    else
+                        fallback()
+                    end
+                end,
+                { "i", "s" }),
+            ["<CR>"] = cmp.mapping()
+        }
+
+        cmp.setup(opts)
+
     end,
+
 }
+]]
+
+
+
+
+-- M.opts = function(_, opts)
+-- 
+--     local cmp = require("cmp")
+--     opts.sources = cmp.config.sources(vim.list_extend(
+--         opts.sources,
+--         {
+--             { name = "copilot" },
+--             { name = "emoji" }
+--         }
+--     ))
+--     opts.mapping = cmp.config.mapping(vim.list_extend(
+--         opts.mapping,
+--         {
+--             ["<C-Space>"] = cmp.mapping.complete(),
+--             ["<Esc>"] = cmp.mapping.close(),
+--             ["<CR>"] = cmp.mapping.confirm({
+--                 behavior = cmp.ConfirmBehavior.Replace,
+--                 select = true,
+--             }),
+--         }
+--     ))
+-- 
+--     opts.mapping["<Tab>"] = cmp.mapping.select_next_item()
+--     opts.mapping["<S-Tab>"] = cmp.mapping.select_prev_item()
+-- end
+
+
+--return M
+