diff --git a/nvim/.config/nvim/after/plugin/vsnip.vim b/nvim/.config/nvim/after/plugin/vsnip.vim new file mode 100644 index 0000000..7ed484a --- /dev/null +++ b/nvim/.config/nvim/after/plugin/vsnip.vim @@ -0,0 +1,19 @@ +" Expand +imap vsnip#expandable() ? '(vsnip-expand)' : '' +smap vsnip#expandable() ? '(vsnip-expand)' : '' + +" Expand or jump +imap vsnip#available(1) ? '(vsnip-expand-or-jump)' : '' +smap vsnip#available(1) ? '(vsnip-expand-or-jump)' : '' + +" Select or cut text to use as $TM_SELECTED_TEXT in the next snippet. +" See https://github.com/hrsh7th/vim-vsnip/pull/50 +nmap s (vsnip-select-text) +xmap s (vsnip-select-text) +nmap S (vsnip-cut-text) +xmap S (vsnip-cut-text) + +" If you want to use snippet for multiple filetypes, you can `g:vsnip_filetypes` for it. +let g:vsnip_filetypes = {} +let g:vsnip_filetypes.javascriptreact = ['javascript'] +let g:vsnip_filetypes.typescriptreact = ['typescript'] diff --git a/nvim/.config/nvim/lua/lsp.lua b/nvim/.config/nvim/lua/lsp.lua index 1fdbfc9..fd328ac 100644 --- a/nvim/.config/nvim/lua/lsp.lua +++ b/nvim/.config/nvim/lua/lsp.lua @@ -116,9 +116,24 @@ local on_attach = function(client, bufnr) } end +function set_snippet_capabilities() + local capabilities = vim.lsp.protocol.make_client_capabilities() + + capabilities.textDocument.completion.completionItem.snippetSupport = true + capabilities.textDocument.completion.completionItem.resolveSupport = { + properties = { + 'documentation', + 'detail', + 'additionalTextEdits', + } + } + return capabilities +end + local servers = { 'hls', 'rust_analyzer', 'pyls', 'tsserver' } for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { on_attach = on_attach, + capabilities = set_snippet_capabilities(), } end diff --git a/nvim/.config/nvim/lua/modules/completion.lua b/nvim/.config/nvim/lua/modules/completion.lua index e6ebedd..af55e8d 100644 --- a/nvim/.config/nvim/lua/modules/completion.lua +++ b/nvim/.config/nvim/lua/modules/completion.lua @@ -22,7 +22,7 @@ require'compe'.setup { tags = true; treesitter = true; snippets_nvim = false; - vsnip = false; + vsnip = true; }; } @@ -45,6 +45,8 @@ end _G.tab_complete = function() if vim.fn.pumvisible() == 1 then return t "" + elseif vim.fn.call("vsnip#available", {1}) == 1 then + return t "(vsnip-expand-or-jump)" elseif check_back_space() then return t "" else diff --git a/nvim/.config/nvim/lua/plugins.lua b/nvim/.config/nvim/lua/plugins.lua index 23cb67c..30f8ff3 100644 --- a/nvim/.config/nvim/lua/plugins.lua +++ b/nvim/.config/nvim/lua/plugins.lua @@ -163,6 +163,11 @@ local init = function () 'kshenoy/vim-signature', 'gennaro-tedesco/nvim-peekup' } + -- Snippets + use { + 'rafamadriz/friendly-snippets', + 'hrsh7th/vim-vsnip' + } end return require('packer').startup(init)