Commit b10c54d8 authored by Tim van Deurzen's avatar Tim van Deurzen

Updated keybindings and settings for Neovim.

parent d58a3608
local t = function(str) local lspkind = require("lspkind")
return vim.api.nvim_replace_termcodes(str, true, true, true) lspkind.init()
end
local check_back_space = function() local has_words_before = function()
local col = vim.fn.col('.') - 1 local line, col = unpack(vim.api.nvim_win_get_cursor(0))
if col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') then return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
return true
else
return false
end
end end
-- Use (s-)tab to: local luasnip = require("luasnip")
--- move to prev/next item in completion menuone local cmp_autopairs = require("nvim-autopairs.completion.cmp")
--- jump to prev/next snippet's placeholder
_G.tab_complete = function() local cmp = require("cmp")
if vim.fn.pumvisible() == 1 then cmp.setup({
return t "<C-n>" completion = {
elseif vim.fn.call("vsnip#available", {1}) == 1 then completeopt = "menu,menuone,noinsert",
return t "<Plug>(vsnip-expand-or-jump)" },
elseif check_back_space() then
return t "<Tab>" mapping = {
["<C-d>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(2),
["<C-e>"] = cmp.mapping.close(),
["<c-y>"] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Insert,
select = true,
}),
["<c-q>"] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Replace,
select = true,
}),
["<CR>"] = cmp.mapping.confirm({ select = true }),
["<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 else
return vim.fn['compe#complete']() fallback()
end end
end end, {
_G.s_tab_complete = function() "i",
if vim.fn.pumvisible() == 1 then "s",
return t "<C-p>" }),
elseif vim.fn.call("vsnip#jumpable", {-1}) == 1 then
return t "<Plug>(vsnip-jump-prev)" ["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else else
return t "<S-Tab>" fallback()
end end
end end, {
"i",
"s",
}),
},
-- Youtube:
-- the order of your sources matter (by default). That gives them priority
-- you can configure:
-- keyword_length
-- priority
-- max_item_count
-- (more?)
sources = {
{ name = "nvim_lsp" },
{ name = "nvim_lua" },
{ name = "path" },
{ name = "luasnip" },
{ name = "buffer", keyword_length = 5 },
},
sorting = {
-- TODO: Would be cool to add stuff like "See variable names before method names" in rust, or something like that.
comparators = {
cmp.config.compare.offset,
cmp.config.compare.exact,
cmp.config.compare.score,
cmp.config.compare.kind,
cmp.config.compare.sort_text,
cmp.config.compare.length,
cmp.config.compare.order,
},
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
formatting = {
-- Youtube: How to set up nice formatting for your sources.
format = lspkind.cmp_format({
with_text = true,
menu = {
buffer = "[buf]",
nvim_lsp = "[LSP]",
nvim_lua = "[api]",
path = "[path]",
luasnip = "[snip]",
gh_issues = "[issues]",
},
}),
},
experimental = {
-- I like the new menu better! Nice work hrsh7th
native_menu = false,
vim.api.nvim_set_keymap("i", "<Tab>", "v:lua.tab_complete()", {expr = true}) -- Let's play with this for a day or two
vim.api.nvim_set_keymap("s", "<Tab>", "v:lua.tab_complete()", {expr = true}) ghost_text = true,
vim.api.nvim_set_keymap("i", "<S-Tab>", "v:lua.s_tab_complete()", {expr = true}) },
vim.api.nvim_set_keymap("s", "<S-Tab>", "v:lua.s_tab_complete()", {expr = true}) })
local opts = {noremap = true, silent = true, expr = true} cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done({ map_char = { tex = "" } }))
vim.api.nvim_set_keymap("i", "<CR>", [[compe#confirm({'keys': "\<Plug>delimitMateCR", 'mode': ''})]], opts)
vim.api.nvim_set_keymap("i", "<c-c>", [[compe#complete()]], opts)
vim.api.nvim_set_keymap("i", "<c-e>", [[compe#close('<c-e>')]], opts)
This diff is collapsed.
return require('packer').startup(function() return require("packer").startup(function()
use 'wbthomason/packer.nvim' use("wbthomason/packer.nvim")
-- Color schemes -- Color schemes
use 'morhetz/gruvbox' use("morhetz/gruvbox")
use 'icymind/NeoSolarized' use("icymind/NeoSolarized")
use 'romgrk/doom-one.vim' use("romgrk/doom-one.vim")
use { use({
'tjdevries/gruvbuddy.nvim', "tjdevries/gruvbuddy.nvim",
requires = {'tjdevries/colorbuddy.vim'}, requires = { "tjdevries/colorbuddy.vim" },
config = function() config = function()
--require('colorbuddy').colorscheme('gruvbox') --require('colorbuddy').colorscheme('gruvbox')
vim.cmd[[colo gruvbox]] vim.cmd([[colo gruvbox]])
end end,
} })
-- UI -- UI
use 'ntpeters/vim-better-whitespace' use("ntpeters/vim-better-whitespace")
use 'Yggdroot/indentLine' use("Yggdroot/indentLine")
use 'haya14busa/incsearch.vim' use("haya14busa/incsearch.vim")
use { use({
'junegunn/fzf.vim', "junegunn/fzf.vim",
requires = {'junegunn/fzf'} requires = { "junegunn/fzf" },
} })
-- Look at feline for a leaner better maintained alternative. -- Look at feline for a leaner better maintained alternative.
use { use({
'glepnir/galaxyline.nvim', "glepnir/galaxyline.nvim",
branch = 'main', branch = "main",
config = function() config = function()
require('statusline') require("statusline")
end, end,
requires = {'kyazdani42/nvim-web-devicons'} requires = { "kyazdani42/nvim-web-devicons" },
} })
use 'liuchengxu/vista.vim' use("liuchengxu/vista.vim")
use 'kyazdani42/nvim-tree.lua' use({
use { "kyazdani42/nvim-tree.lua",
'AckslD/nvim-whichkey-setup.lua', requires = "kyazdani42/nvim-web-devicons",
requires = {'liuchengxu/vim-which-key'} config = function()
} require("nvim-tree").setup({})
use { end,
'akinsho/nvim-bufferline.lua', })
use({
"AckslD/nvim-whichkey-setup.lua",
requires = { "liuchengxu/vim-which-key" },
})
use({
"akinsho/nvim-bufferline.lua",
requires = 'kyazdani42/nvim-web-devicons', requires = "kyazdani42/nvim-web-devicons",
config = function() config = function()
require('bufferline').setup{} require("bufferline").setup({})
end end,
} })
-- Utilities -- Utilities
use 'editorconfig/editorconfig-vim' use("editorconfig/editorconfig-vim")
use { use({
'nvim-treesitter/nvim-treesitter', "nvim-treesitter/nvim-treesitter",
run = ':TSUpdate', run = ":TSUpdate",
requires = { requires = {
'nvim-treesitter/nvim-treesitter-refactor', "nvim-treesitter/nvim-treesitter-refactor",
'nvim-treesitter/nvim-treesitter-textobjects' "nvim-treesitter/nvim-treesitter-textobjects",
}, },
} })
use { use({
'nvim-telescope/telescope.nvim', "nvim-telescope/telescope.nvim",
requires = { requires = {
{'nvim-lua/popup.nvim'}, { "nvim-lua/popup.nvim" },
{'nvim-lua/plenary.nvim'}, { "nvim-lua/plenary.nvim" },
{'nvim-telescope/telescope-project.nvim'} { "nvim-telescope/telescope-project.nvim" },
}, },
config = function() config = function()
require('telescope').load_extension('project') require("telescope").load_extension("project")
end end,
} })
use 'Chiel92/vim-autoformat' use("Chiel92/vim-autoformat")
use 'Raimondi/delimitMate' use("Raimondi/delimitMate")
use { use({
'Shougo/echodoc.vim', "Shougo/echodoc.vim",
config = function()
vim.cmd [[let g:echodoc#enable_at_start=1]]
end
}
-- Completion
use {
'hrsh7th/nvim-compe',
config = function() config = function()
require('compe').setup { vim.cmd([[let g:echodoc#enable_at_start=1]])
enabled = true;
autocomplete = true;
debug = false;
min_length = 1;
preselect = 'enable';
throttle_time = 80;
source_timeout = 200;
incomplete_delay = 400;
max_abbr_width = 100;
max_kind_width = 100;
max_menu_width = 100;
documentation = true;
source = {
path = true;
buffer = true;
calc = true;
nvim_lsp = true;
nvim_lua = true;
vsnip = true;
};
}
end, end,
})
requires = {
{
'hrsh7th/vim-vsnip',
requires = {'hrsh7th/vim-vsnip-integ'}
}
}
}
-- LSP -- LSP
use 'neovim/nvim-lspconfig' use("neovim/nvim-lspconfig")
use { use({
'RishabhRD/nvim-lsputils', "RishabhRD/nvim-lsputils",
requires = {'RishabhRD/popfix'},
disable = true
}
use {
'glepnir/lspsaga.nvim',
requires = {'neovim/nvim-lspconfig'},
config = function() requires = { "RishabhRD/popfix" },
require('lspsaga').init_lsp_saga { disable = true,
error_sign = '•', })
warn_sign = '•',
hint_sign = '•',
infor_sign = '•',
code_action_icon = '?',
border_style = 2,
code_action_prompt = {
enable = true,
sign = true,
sign_priority = 20,
virtual_text = false,
},
code_action_keys = {
quit = '<esc>',
exec = '<CR>'
},
finder_action_keys = {
open = 'o',
vsplit = 's',
split = 'i',
quit = '<esc>',
scroll_down = '<C-n>',
scroll_up = '<C-p>'
},
}
-- vim.api.nvim_command [[autocmd CursorHold,CursorHoldI * :lua require('lspsaga.signaturehelp').signature_help()]] use({
end "nvim-lua/lsp_extensions.nvim",
}
use {
'nvim-lua/lsp_extensions.nvim',
requires = {'neovim/nvim-lspconfig'}, requires = { "neovim/nvim-lspconfig" },
disable = true, disable = true,
config = function() config = function()
require('lsp_extensions').inlay_hints{ require("lsp_extensions").inlay_hints({
highlight = "Comment", highlight = "Comment",
prefix = " » ", prefix = " » ",
aligned = true, aligned = true,
only_current_line = false, only_current_line = false,
enabled = { "ChainingHint" } enabled = { "ChainingHint" },
} })
end end,
} })
use { use({
"folke/lsp-trouble.nvim", "folke/lsp-trouble.nvim",
requires = "kyazdani42/nvim-web-devicons", requires = "kyazdani42/nvim-web-devicons",
config = function() config = function()
require("trouble").setup { require("trouble").setup({
-- your configuration comes here -- your configuration comes here
-- or leave it empty to use the default settings -- or leave it empty to use the default settings
-- refer to the configuration section below -- refer to the configuration section below
} })
end end,
} })
use { -- Completion
"ray-x/lsp_signature.nvim", use("onsails/lspkind-nvim")
use("hrsh7th/cmp-buffer")
use("hrsh7th/cmp-path")
use("hrsh7th/cmp-nvim-lua")
use("hrsh7th/cmp-nvim-lsp")
use("hrsh7th/nvim-cmp")
use({
"saadparwaiz1/cmp_luasnip",
-- config = function() requires = {
-- end "L3MON4D3/LuaSnip",
} },
})
use { -- use "hrsh7th/cmp-vsnip"
'simrat39/rust-tools.nvim', -- use "hrsh7th/vim-vsnip"
requires = { use("windwp/nvim-autopairs")
'nvim-lua/popup.nvim'
}
}
use({
"simrat39/rust-tools.nvim",
use {
'lewis6991/gitsigns.nvim',
requires = { requires = {
'nvim-lua/plenary.nvim' "nvim-lua/popup.nvim",
},
})
use({
"lewis6991/gitsigns.nvim",
requires = {
"nvim-lua/plenary.nvim",
}, },
config = function() config = function()
require('gitsigns').setup() require("gitsigns").setup()
end end,
} })
use 'tomlion/vim-solidity' use("tomlion/vim-solidity")
end) end)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment