local lfs = require("lfs")
require('packer').startup(function(use)
use "neoclide/coc.nvim" --installed for vista.vim
use "liuchengxu/vista.vim"
use "hrsh7th/cmp-nvim-lsp"
use "hrsh7th/nvim-cmp"
use "ray-x/lsp_signature.nvim"
use "https://gitlab.com/yorickpeterse/nvim-window.git"
use "folke/trouble.nvim"
use "williamboman/mason.nvim"
use "neovim/nvim-lspconfig"
use "nvim-tree/nvim-tree.lua"
use "nvim-treesitter/nvim-treesitter"
use "easymotion/vim-easymotion"
use "github/copilot.vim"
use "wbthomason/packer.nvim"
use "preservim/tagbar" -- exuberant-ctags
use "L3MON4D3/LuaSnip"
end)
local luasnip = require("luasnip")
local cmp = require("cmp")
cmp.setup({
snippet = {
--https://github.com/hrsh7th/nvim-cmp/blob/bb95d975ff2e2c57acf5a005f5c5c9bc94522319/lua/cmp/core.lua 472
expand = function(SnippetExpansionParams) --how nvim-cmp interacts with a particular snippet engine -- cmp.SnippetExpansionParams
luasnip.lsp_expand(SnippetExpansionParams.body)
end
},
mapping = {
[""] = cmp.mapping.confirm({ select = true, behavior = cmp.ConfirmBehavior.Replace}), --If you didn't select any item and the option table contains select = true, nvim-cmp will automatically select the first item. Plus see https://github.com/hrsh7th/nvim-cmp/issues/1320
},
sources = {
{name = "nvim_lsp"},
{name = "buffer"},
}
})
require("lsp_signature").setup({
fix_pos = true, -- do not auto-close floating window until I've filled all parameters
hint_enable = false, -- do not show virtual hint text alongisde signature window
hint_prefix = "->", -- point at paramater to be filled
floating_window_above_cur_line = true, -- obviously when it's feasible
})
require("trouble").setup({
icons = false,
fold_open = "",
fold_closed = "",
indent_lines = true,
signs = {
error = "E",
warning = "W",
hint = "H",
information = "I",
other = "O",
},
}) --TODO refresh
local lspconfig = require("lspconfig")
local servers = {"pyright", "sumnekolua", "clangd", "gopls"}
for , v in pairs(servers) do
lspconfig[v].setup({
-- update_capabilities is deprecated https://github.com/hrsh7th/cmp-nvim-lsp/issues/38
capabilities = vim.tbl_deep_extend("force", lspconfig.util.default_config.capabilities, require('cmp_nvim_lsp').default_capabilities()) -- vim.tbl_deep_extend merges recursively two or more map-like tables. The first param decides what to do if a key is found in more than one table. In this case we may use value from the rightmost map. In this way we do not throw away neovim built-in's LSP capabilities.
})
end
require("mason").setup()
require("nvim-treesitter.configs").setup({
ensure_installed = {"lua"}, --parsers
indent = {enable = true},
highlight = {enable = true}, --"I get query error: invalid node type at position" paragraph. Syntax highlighting
})
require("nvim-tree").setup({ --TODO sync tab option
open_on_setup_file = true, -- focus on file window rather than nvim-tree
view = {
relativenumber = true,
number = true,
},
renderer = {
highlight_opened_files = "names",
icons = {-- To disable the display of icons see |renderer.icons.show|
show = {
git = true,
folder = false,
file = false,
folder_arrow = false,
},
},
},
diagnostics = {
enable = true,
icons = {
hint = "H",
info = "I",
warning = "W",
error = "E",
},
},
})
-- config centered on github copilot
local options = {
filetype = "on", --turned on filetype detection
foldmethod = "expr",
foldexpr = "nvimtreesitter#foldexpr()",
foldnestmax = 1,
clipboard = vim.opt.clipboard + "unnamedplus" + "unnamed", --TOFIX from repeat.vim page
expandtab = true,
hlsearch = false,
iskeyword = vim.opt.iskeyword + "-" + "",
number = true,
pumheight = 7,
relativenumber = true,
scrolloff = 999,
shiftwidth = 4, -- Number of spaces to use for each step of (auto)indent
showmode = false,
smartindent = true, -- Do smart autoindenting when starting a new line
-- softtabstop = 4, -- Number of spaces that a counts for while performing editing operations
tabstop = 4, -- Number of spaces that a in the file counts for
updatetime = 200,
cursorline = true,
cursorline=true,
cursorlineopt = "screenline",
}
for k, v in pairs(options) do
vim.opt[k] = v
end
local globals = {
tagbar_show_linenumbers = 2, -- show relative line numbers in tagbar window
copilot_no_tab_map = true, -- do not accept copilot suggestion with tab
}
for k, v in pairs(globals) do
vim.g[k] = v
end
local speedcoding = {"w", "wq", "wq!", "q", "q!", "qa", "qa!"}
local function partiallyAccept()
local = vim.fn'copilot#Accept'
local suggestion = vim.fn['copilot#TextQueuedForInsertion']()
return vim.fn.split(suggestion, [[[ .]\zs]])[1] -- the word can be separated by space or by the dot char
end
local function keymap(modes, key, value, opts)
for i=1, string.len(modes) do
local mode = string.sub(modes, i, i)
vim.keymap.set(mode, key, value, opts)
end
end
for _, v in pairs(keymaps) do
keymap(unpack(v))
end
function updateLSP(path, depth) --TODO see :help vim.lsp.start_client
if depth == 0 then
return
end
for file in lfs.dir(path) do
local f = path..'/'..file
if file ~= "." and file ~= ".." and lfs.attributes(f).mode ~= "directory" then
vim.cmd("vs " .. file)
vim.cmd("close")
end
end
vim.cmd("NvimTreeRefresh")
end
local all_files = {".lua", ".py", ".c", ".cpp", ".h", ".hpp"}
local autocmds = { -- TOSEE https://stackoverflow.com/questions/3837933/autowrite-when-changing-tab-in-vim
--TODO NERDTree like, add commenter and system clipboard
{{"TabNew"}, {pattern = all_files, command=":TagbarOpen"}},
{{"TabNew"}, {pattern = all_files, command=":NvimTreeOpen"}},
{{"VimEnter"}, {pattern = all_files, command=":NvimTreeOpen"}},
{{"VimEnter"}, {pattern = all_files, command=":TagbarOpen"}},
{{"CursorHoldI"}, {pattern = allfiles, command=":TagbarForceUpdate"}},
}
for , v in pairs(autocmds) do
vim.api.nvim_create_autocmd(unpack(v))
end
Usually I use nvim-lsp. I've installed coc.nvim as doc prescribes, and yet no result when I run ":Vista"
local lfs = require("lfs") require('packer').startup(function(use) use "neoclide/coc.nvim" --installed for vista.vim use "liuchengxu/vista.vim" use "hrsh7th/cmp-nvim-lsp" use "hrsh7th/nvim-cmp" use "ray-x/lsp_signature.nvim" use "https://gitlab.com/yorickpeterse/nvim-window.git" use "folke/trouble.nvim" use "williamboman/mason.nvim" use "neovim/nvim-lspconfig" use "nvim-tree/nvim-tree.lua" use "nvim-treesitter/nvim-treesitter" use "easymotion/vim-easymotion" use "github/copilot.vim" use "wbthomason/packer.nvim" use "preservim/tagbar" -- exuberant-ctags use "L3MON4D3/LuaSnip" end)
local luasnip = require("luasnip") local cmp = require("cmp") cmp.setup({ snippet = { --https://github.com/hrsh7th/nvim-cmp/blob/bb95d975ff2e2c57acf5a005f5c5c9bc94522319/lua/cmp/core.lua 472 expand = function(SnippetExpansionParams) --how nvim-cmp interacts with a particular snippet engine -- cmp.SnippetExpansionParams luasnip.lsp_expand(SnippetExpansionParams.body) end }, mapping = { [""] = cmp.mapping.confirm({ select = true, behavior = cmp.ConfirmBehavior.Replace}), --If you didn't select any item and the option table contains
select = true
, nvim-cmp will automatically select the first item. Plus see https://github.com/hrsh7th/nvim-cmp/issues/1320 }, sources = { {name = "nvim_lsp"}, {name = "buffer"}, } }) require("lsp_signature").setup({ fix_pos = true, -- do not auto-close floating window until I've filled all parameters hint_enable = false, -- do not show virtual hint text alongisde signature window hint_prefix = "->", -- point at paramater to be filled floating_window_above_cur_line = true, -- obviously when it's feasible }) require("trouble").setup({ icons = false, fold_open = "", fold_closed = "", indent_lines = true, signs = { error = "E", warning = "W", hint = "H", information = "I", other = "O", }, }) --TODO refresh local lspconfig = require("lspconfig") local servers = {"pyright", "sumnekolua", "clangd", "gopls"} for , v in pairs(servers) do lspconfig[v].setup({ -- update_capabilities is deprecated https://github.com/hrsh7th/cmp-nvim-lsp/issues/38 capabilities = vim.tbl_deep_extend("force", lspconfig.util.default_config.capabilities, require('cmp_nvim_lsp').default_capabilities()) -- vim.tbl_deep_extend merges recursively two or more map-like tables. The first param decides what to do if a key is found in more than one table. In this case we may use value from the rightmost map. In this way we do not throw away neovim built-in's LSP capabilities.end require("mason").setup() require("nvim-treesitter.configs").setup({ ensure_installed = {"lua"}, --parsers indent = {enable = true}, highlight = {enable = true}, --"I get query error: invalid node type at position" paragraph. Syntax highlighting }) require("nvim-tree").setup({ --TODO sync tab option open_on_setup_file = true, -- focus on file window rather than nvim-tree view = { relativenumber = true, number = true, }, renderer = { highlight_opened_files = "names", icons = {-- To disable the display of icons see |renderer.icons.show| show = { git = true, folder = false, file = false, folder_arrow = false, }, }, }, diagnostics = { enable = true, icons = { hint = "H", info = "I", warning = "W", error = "E", }, }, }) -- config centered on github copilot local options = { filetype = "on", --turned on filetype detection foldmethod = "expr", foldexpr = "nvimtreesitter#foldexpr()", foldnestmax = 1, clipboard = vim.opt.clipboard + "unnamedplus" + "unnamed", --TOFIX from repeat.vim page expandtab = true, hlsearch = false, iskeyword = vim.opt.iskeyword + "-" + "", number = true, pumheight = 7, relativenumber = true, scrolloff = 999, shiftwidth = 4, -- Number of spaces to use for each step of (auto)indent showmode = false, smartindent = true, -- Do smart autoindenting when starting a new line -- softtabstop = 4, -- Number of spaces that a counts for while performing editing operations
tabstop = 4, -- Number of spaces that a in the file counts for
updatetime = 200,
cursorline = true,
cursorline=true,
cursorlineopt = "screenline",
}
for k, v in pairs(options) do
vim.opt[k] = v
end
local globals = {
tagbar_show_linenumbers = 2, -- show relative line numbers in tagbar window
copilot_no_tab_map = true, -- do not accept copilot suggestion with tab
}
for k, v in pairs(globals) do vim.g[k] = v end local speedcoding = {"w", "wq", "wq!", "q", "q!", "qa", "qa!"} local function partiallyAccept() local = vim.fn'copilot#Accept' local suggestion = vim.fn['copilot#TextQueuedForInsertion']() return vim.fn.split(suggestion, [[[ .]\zs]])[1] -- the word can be separated by space or by the dot char end
local function smartIndent() local currLine, currCol = unpack(vim.api.nvim_win_get_cursor(0)) --! => nore vim.api.nvim_command("normal! gg=G") vim.api.nvim_command("normal! " .. currLine .. "G") end -- TODO indent mode local keymaps = { -- :h modes {"i", "", 'copilot#Accept("")', {expr=true}},
{"nv", "", ":lua require('nvim-window').pick()", {}},
{"nv", "p", '"+p', {noremap=true}}, --REQUIRES xclip on X11!
{"nv", "y", '"+y', {noremap=true}},
{"nv", "c", '"_c', {noremap=true}},
{"nv", "d", '"_d', {noremap=true}},
{"nv", "x", '"_x', {noremap=true}},
{"i", "", partiallyAccept, {expr=true}},
{"n", "", smartIndent, {}},
{"n", "", function()
updateLSP(lfs.currentdir(), 1)
vim.api.nvim_command("Trouble")
end, {}},
{"nov", "F" , "(easymotion-Fl)", {}},
{"nov", "T" , "(easymotion-Tl)", {}},
{"nov", "t" , "(easymotion-tl)", {}},
{"nov", "f" , "(easymotion-fl)", {}},
}
local function keymap(modes, key, value, opts) for i=1, string.len(modes) do local mode = string.sub(modes, i, i) vim.keymap.set(mode, key, value, opts) end end
for _, v in pairs(keymaps) do keymap(unpack(v)) end function updateLSP(path, depth) --TODO see :help vim.lsp.start_client if depth == 0 then return end for file in lfs.dir(path) do local f = path..'/'..file if file ~= "." and file ~= ".." and lfs.attributes(f).mode ~= "directory" then vim.cmd("vs " .. file) vim.cmd("close") end end vim.cmd("NvimTreeRefresh") end local all_files = {".lua", ".py", ".c", ".cpp", ".h", ".hpp"} local autocmds = { -- TOSEE https://stackoverflow.com/questions/3837933/autowrite-when-changing-tab-in-vim --TODO NERDTree like, add commenter and system clipboard {{"TabNew"}, {pattern = all_files, command=":TagbarOpen"}}, {{"TabNew"}, {pattern = all_files, command=":NvimTreeOpen"}}, {{"VimEnter"}, {pattern = all_files, command=":NvimTreeOpen"}}, {{"VimEnter"}, {pattern = all_files, command=":TagbarOpen"}}, {{"CursorHoldI"}, {pattern = allfiles, command=":TagbarForceUpdate"}}, } for , v in pairs(autocmds) do vim.api.nvim_create_autocmd(unpack(v)) end