Created
November 5, 2022 16:24
-
-
Save esdras/cdd10eb5e0ec5a067ab08d058600f646 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
call plug#begin('~/.local/share/nvim/plugged') | |
" | |
" Plugins from: https://hannadrehman.com/top-neovim-plugins-for-developers-in-2022 | |
" Rust setup from: https://rsdlt.github.io/posts/rust-nvim-ide-guide-walkthrough-development-debug/ | |
" | |
" | |
Plug 'rust-lang/rust.vim' | |
Plug 'scrooloose/nerdcommenter' " | |
Plug 'phaazon/hop.nvim' "keyword base navigation | |
Plug 'voldikss/vim-floaterm' "floating terminal | |
Plug 'folke/trouble.nvim' "list errors in a window | |
Plug 'folke/todo-comments.nvim' "highlight and manage FIXME, TODO, WARNING, comments | |
Plug 'RRethy/vim-illuminate' "highlight other occurrences of the symbol under the cursor | |
Plug 'liuchengxu/vista.vim' "list symbols, like ctags but better | |
Plug 'm-demare/hlargs.nvim' "highlight arguments | |
"Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } | |
Plug 'Xuyuanp/nerdtree-git-plugin' | |
Plug 'ntpeters/vim-better-whitespace' | |
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } | |
Plug 'puremourning/vimspector' | |
Plug 'hrsh7th/cmp-buffer' | |
Plug 'hrsh7th/cmp-nvim-lsp' | |
Plug 'hrsh7th/cmp-nvim-lsp-signature-help' | |
Plug 'hrsh7th/cmp-nvim-lua' | |
Plug 'hrsh7th/cmp-path' | |
Plug 'hrsh7th/cmp-vsnip' | |
Plug 'hrsh7th/nvim-cmp' | |
Plug 'hrsh7th/vim-vsnip' | |
Plug 'dense-analysis/ale' | |
Plug 'EdenEast/nightfox.nvim' " Vim-Plug | |
Plug 'nvim-lua/plenary.nvim' | |
Plug 'mfussenegger/nvim-dap' | |
Plug 'nvim-telescope/telescope.nvim' | |
Plug 'neovim/nvim-lspconfig' | |
Plug 'sheerun/vim-polyglot' | |
Plug 'evanleck/vim-svelte', {'branch': 'main'} | |
Plug 'godlygeek/tabular' | |
Plug 'ryanoasis/vim-devicons' | |
Plug 'nvim-tree/nvim-web-devicons' " optional, for file icons | |
Plug 'nvim-tree/nvim-tree.lua' | |
Plug 'cohama/lexima.vim' | |
Plug 'hrsh7th/nvim-compe' | |
Plug 'nvim-lua/plenary.nvim' | |
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} | |
Plug 'nvim-lualine/lualine.nvim' | |
Plug 'lukas-reineke/indent-blankline.nvim' | |
Plug 'simrat39/rust-tools.nvim' | |
call plug#end() | |
lua << EOF | |
-- | |
-- nvim-tree config | |
-- disable netrw at the very start of your init.lua (strongly advised) | |
-- | |
vim.g.loaded_netrw = 1 | |
vim.g.loaded_netrwPlugin = 1 | |
require("nvim-tree").setup({ | |
sort_by = "case_sensitive", | |
view = { | |
adaptive_size = true, | |
mappings = { | |
list = { | |
{ key = "u", action = "dir_up" }, | |
}, | |
}, | |
}, | |
renderer = { | |
group_empty = true, | |
}, | |
filters = { | |
dotfiles = true, | |
}, | |
}) | |
-- | |
-- hop config | |
-- | |
local hop = require('hop') | |
hop.setup() | |
local directions = require('hop.hint').HintDirection | |
vim.keymap.set('', 'f', function() | |
hop.hint_words() | |
end, {remap=true}) | |
vim.keymap.set('', 'F', function() | |
hop.hint_char1({ direction = directions.BEFORE_CURSOR, current_line_only = true }) | |
end, {remap=true}) | |
vim.keymap.set('', 't', function() | |
hop.hint_char1({ direction = directions.AFTER_CURSOR, current_line_only = true, hint_offset = -1 }) | |
end, {remap=true}) | |
vim.keymap.set('', 'T', function() | |
hop.hint_char1({ direction = directions.BEFORE_CURSOR, current_line_only = true, hint_offset = 1 }) | |
end, {remap=true}) | |
-- | |
-- lualine setup | |
-- | |
require('lualine').setup() | |
-- | |
-- lsp rust tools setup | |
-- | |
local rt = require("rust-tools") | |
rt.setup({ | |
server = { | |
on_attach = function(_, bufnr) | |
-- Hover actions | |
vim.keymap.set("n", "<C-space>", rt.hover_actions.hover_actions, { buffer = bufnr }) | |
-- Code action groups | |
vim.keymap.set("n", "<Leader>a", rt.code_action_group.code_action_group, { buffer = bufnr }) | |
end, | |
["rust-analyzer"] = { | |
checkOnSave = { | |
command = "clippy" | |
}, | |
}, | |
}, | |
}) | |
-- LSP Diagnostics Options Setup | |
local sign = function(opts) | |
vim.fn.sign_define(opts.name, { | |
texthl = opts.name, | |
text = opts.text, | |
numhl = '' | |
}) | |
end | |
sign({name = 'DiagnosticSignError', text = ''}) | |
sign({name = 'DiagnosticSignWarn', text = ''}) | |
sign({name = 'DiagnosticSignHint', text = ''}) | |
sign({name = 'DiagnosticSignInfo', text = ''}) | |
--Set completeopt to have a better completion experience | |
-- :help completeopt | |
-- menuone: popup even when there's only one match | |
-- noinsert: Do not insert text until a selection is made | |
-- noselect: Do not select, force to select one from the menu | |
-- shortness: avoid showing extra messages when using completion | |
-- updatetime: set updatetime for CursorHold | |
vim.opt.completeopt = {'menuone', 'noselect', 'noinsert'} | |
vim.opt.shortmess = vim.opt.shortmess + { c = true} | |
vim.api.nvim_set_option('updatetime', 300) | |
vim.diagnostic.config({ | |
virtual_text = false, | |
signs = true, | |
update_in_insert = true, | |
underline = true, | |
severity_sort = false, | |
float = { | |
border = 'rounded', | |
source = 'always', | |
header = '', | |
prefix = '', | |
}, | |
}) | |
vim.cmd([[ | |
set signcolumn=yes | |
autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false }) | |
]]) | |
-- | |
-- Completion Plugin Setup | |
-- | |
local cmp = require'cmp' | |
cmp.setup({ | |
-- Enable LSP snippets | |
snippet = { | |
expand = function(args) | |
vim.fn["vsnip#anonymous"](args.body) | |
end, | |
}, | |
mapping = { | |
['<C-p>'] = cmp.mapping.select_prev_item(), | |
['<C-n>'] = cmp.mapping.select_next_item(), | |
-- Add tab support | |
['<S-Tab>'] = cmp.mapping.select_prev_item(), | |
['<Tab>'] = cmp.mapping.select_next_item(), | |
['<C-S-f>'] = cmp.mapping.scroll_docs(-4), | |
['<C-f>'] = cmp.mapping.scroll_docs(4), | |
['<C-Space>'] = cmp.mapping.complete(), | |
['<C-e>'] = cmp.mapping.close(), | |
['<CR>'] = cmp.mapping.confirm({ | |
behavior = cmp.ConfirmBehavior.Insert, | |
select = true, | |
}) | |
}, | |
-- Installed sources: | |
sources = { | |
{ name = 'path' }, -- file paths | |
{ name = 'nvim_lsp', keyword_length = 3 }, -- from language server | |
{ name = 'nvim_lsp_signature_help'}, -- display function signatures with current parameter emphasized | |
{ name = 'nvim_lua', keyword_length = 2}, -- complete neovim's Lua runtime API such vim.lsp.* | |
{ name = 'buffer', keyword_length = 2 }, -- source current buffer | |
{ name = 'vsnip', keyword_length = 2 }, -- nvim-cmp source for vim-vsnip | |
{ name = 'calc'}, -- source for math calculation | |
}, | |
window = { | |
completion = cmp.config.window.bordered(), | |
documentation = cmp.config.window.bordered(), | |
}, | |
formatting = { | |
fields = {'menu', 'abbr', 'kind'}, | |
format = function(entry, item) | |
local menu_icon ={ | |
nvim_lsp = 'λ', | |
vsnip = '⋗', | |
buffer = 'Ω', | |
path = '🖫', | |
} | |
item.menu = menu_icon[entry.source.name] | |
return item | |
end, | |
}, | |
}) | |
-- | |
-- vimspector setup | |
-- | |
vim.cmd([[ | |
let g:vimspector_sidebar_width = 85 | |
let g:vimspector_bottombar_height = 15 | |
let g:vimspector_terminal_maxwidth = 70 | |
]]) | |
vim.cmd([[ | |
nmap <F3> <cmd>call vimspector#Launch()<cr> | |
nmap <F4> <cmd>call vimspector#StepOver()<cr> | |
nmap <F5> <cmd>call vimspector#Reset()<cr> | |
nmap <F6> <cmd>call vimspector#StepOver()<cr>") | |
nmap <F7> <cmd>call vimspector#StepOut()<cr>") | |
nmap <F8> <cmd>call vimspector#StepInto()<cr>") | |
]]) | |
vim.keymap.set("n", "<leader>db", ":call vimspector#ToggleBreakpoint()<cr>", | |
{silent = true, noremap = true} | |
) | |
vim.keymap.set("n", "<leader>dw", ":call vimspector#AddWatch()<cr>", | |
{silent = true, noremap = true} | |
) | |
vim.keymap.set("n", "<leader>de", ":call vimspector#Evaluate()<cr>", | |
{silent = true, noremap = true} | |
) | |
vim.keymap.set("n", "<leader>dr", ":call vimspector#Reset()<cr>", | |
{silent = true, noremap = true} | |
) | |
vim.keymap.set("n", "<leader>dl", ":call vimspector#Launch()<cr>", | |
{silent = true, noremap = true} | |
) | |
-- | |
-- trouble setup | |
-- | |
require("trouble").setup { | |
-- your configuration comes here | |
-- or leave it empty to use the default settings | |
-- refer to the configuration section below | |
} | |
vim.keymap.set("n", "<leader>xx", "<cmd>TroubleToggle<cr>", | |
{silent = true, noremap = true} | |
) | |
vim.keymap.set("n", "<leader>xw", "<cmd>TroubleToggle workspace_diagnostics<cr>", | |
{silent = true, noremap = true} | |
) | |
vim.keymap.set("n", "<leader>xd", "<cmd>TroubleToggle document_diagnostics<cr>", | |
{silent = true, noremap = true} | |
) | |
vim.keymap.set("n", "<leader>xl", "<cmd>TroubleToggle loclist<cr>", | |
{silent = true, noremap = true} | |
) | |
vim.keymap.set("n", "<leader>xq", "<cmd>TroubleToggle quickfix<cr>", | |
{silent = true, noremap = true} | |
) | |
vim.keymap.set("n", "gR", "<cmd>TroubleToggle lsp_references<cr>", | |
{silent = true, noremap = true} | |
) | |
-- | |
-- todo-comments setup | |
-- | |
require("todo-comments").setup { | |
-- your configuration comes here | |
-- or leave it empty to use the default settings | |
-- refer to the configuration section below | |
} | |
-- | |
-- vim-illuminate setup | |
-- | |
require('illuminate').configure({ | |
-- providers: provider used to get references in the buffer, ordered by priority | |
providers = { | |
'lsp', | |
'treesitter', | |
'regex', | |
}, | |
-- delay: delay in milliseconds | |
delay = 100, | |
-- filetype_overrides: filetype specific overrides. | |
-- The keys are strings to represent the filetype while the values are tables that | |
-- supports the same keys passed to .configure except for filetypes_denylist and filetypes_allowlist | |
filetype_overrides = {}, | |
-- filetypes_denylist: filetypes to not illuminate, this overrides filetypes_allowlist | |
filetypes_denylist = { | |
'dirvish', | |
'fugitive', | |
}, | |
-- filetypes_allowlist: filetypes to illuminate, this is overriden by filetypes_denylist | |
filetypes_allowlist = {}, | |
-- modes_denylist: modes to not illuminate, this overrides modes_allowlist | |
modes_denylist = {}, | |
-- modes_allowlist: modes to illuminate, this is overriden by modes_denylist | |
modes_allowlist = {}, | |
-- providers_regex_syntax_denylist: syntax to not illuminate, this overrides providers_regex_syntax_allowlist | |
-- Only applies to the 'regex' provider | |
-- Use :echom synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name') | |
providers_regex_syntax_denylist = {}, | |
-- providers_regex_syntax_allowlist: syntax to illuminate, this is overriden by providers_regex_syntax_denylist | |
-- Only applies to the 'regex' provider | |
-- Use :echom synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name') | |
providers_regex_syntax_allowlist = {}, | |
-- under_cursor: whether or not to illuminate under the cursor | |
under_cursor = true, | |
-- large_file_cutoff: number of lines at which to use large_file_config | |
-- The `under_cursor` option is disabled when this cutoff is hit | |
large_file_cutoff = nil, | |
-- large_file_config: config to use for large files (based on large_file_cutoff). | |
-- Supports the same keys passed to .configure | |
-- If nil, vim-illuminate will be disabled for large files. | |
large_file_overrides = nil, | |
}) | |
-- | |
-- Vista setup | |
-- | |
vim.keymap.set("n", "<leader>vv", "<cmd>Vista!!<cr>", | |
{silent = true, noremap = true} | |
) | |
-- | |
-- hlargs setup | |
-- | |
require('hlargs').setup() | |
EOF | |
" Toggle hlsearch with <leader>hs | |
nmap <C-l> :set hlsearch! hlsearch?<CR> | |
"let g:deoplete#enable_at_startup = 1 | |
" Some helpers to edit mode | |
" http://vimcasts.org/e/14 | |
nmap <leader>ew :e <C-R>=expand('%:h').'/'<cr> | |
nmap <leader>es :sp <C-R>=expand('%:h').'/'<cr> | |
nmap <leader>ev :vsp <C-R>=expand('%:h').'/'<cr> | |
nmap <leader>et :tabe <C-R>=expand('%:h').'/'<cr> | |
if has('nvim') | |
let s:user_dir = stdpath('config') | |
else | |
let s:user_dir = has('win32') ? expand('~/vimfiles') : expand('~/.vim') | |
endif | |
"better-whitespace strip on save | |
let g:better_whitespace_enabled=1 | |
let g:strip_whitespace_on_save=1 | |
noremap <leader>ee :NvimTreeToggle<CR> | |
"telescope | |
nnoremap <leader>ff <cmd>lua require('telescope.builtin').find_files()<cr> | |
nnoremap <leader>fg <cmd>lua require('telescope.builtin').live_grep()<cr> | |
nnoremap <leader>fb <cmd>lua require('telescope.builtin').buffers()<cr> | |
nnoremap <leader>fh <cmd>lua require('telescope.builtin').help_tags()<cr> | |
nnoremap <leader>fc <cmd>lua require('telescope.builtin').commands()<cr> | |
nnoremap <leader>ft <cmd>lua require('telescope.builtin').tags()<cr> | |
"nvim-compe | |
let g:lexima_no_default_rules = v:true | |
call lexima#set_default_rules() | |
inoremap <silent><expr> <C-Space> compe#complete() | |
inoremap <silent><expr> <CR> compe#confirm(lexima#expand('<LT>CR>', 'i')) | |
inoremap <silent><expr> <C-e> compe#close('<C-e>') | |
inoremap <silent><expr> <C-f> compe#scroll({ 'delta': +4 }) | |
inoremap <silent><expr> <C-d> compe#scroll({ 'delta': -4 }) | |
set clipboard=unnamedplus | |
set number | |
set ruler | |
lua << EOF | |
require'nvim-treesitter.configs'.setup { | |
-- A list of parser names, or "all" | |
ensure_installed = { "c", "lua", "rust" }, | |
-- Install parsers synchronously (only applied to `ensure_installed`) | |
sync_install = false, | |
-- Automatically install missing parsers when entering buffer | |
-- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally | |
auto_install = true, | |
-- List of parsers to ignore installing (for "all") | |
ignore_install = { "javascript" }, | |
ident = { enable = true }, | |
---- If you need to change the installation directory of the parsers (see -> Advanced Setup) | |
-- parser_install_dir = "/some/path/to/store/parsers", -- Remember to run vim.opt.runtimepath:append("/some/path/to/store/parsers")! | |
highlight = { | |
-- `false` will disable the whole extension | |
enable = true, | |
-- NOTE: these are the names of the parsers and not the filetype. (for example if you want to | |
-- disable highlighting for the `tex` filetype, you need to include `latex` in this list as this is | |
-- the name of the parser) | |
-- list of language that will be disabled | |
-- disable = { "c", "rust" }, | |
-- Or use a function for more flexibility, e.g. to disable slow treesitter highlight for large files | |
disable = function(lang, buf) | |
local max_filesize = 100 * 1024 -- 100 KB | |
local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf)) | |
if ok and stats and stats.size > max_filesize then | |
return true | |
end | |
end, | |
-- Setting this to true will run `:h syntax` and tree-sitter at the same time. | |
-- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). | |
-- Using this option may slow down your editor, and you may see some duplicate highlights. | |
-- Instead of true it can also be a list of languages | |
additional_vim_regex_highlighting = false, | |
}, | |
rainbow = { | |
enable = true, | |
extended_mode = true, | |
max_file_lines = nil, | |
} | |
} | |
EOF | |
nnoremap <silent> <F9> :FloatermNew<CR> | |
tnoremap <silent> <F9> <C-\><C-n>:FloatermNew<CR> | |
nnoremap <silent> <F10> :FloatermPrev<CR> | |
tnoremap <silent> <F10> <C-\><C-n>:FloatermPrev<CR> | |
nnoremap <silent> <F11> :FloatermNext<CR> | |
tnoremap <silent> <F11> <C-\><C-n>:FloatermNext<CR> | |
nnoremap <silent> <F12> :FloatermToggle<CR> | |
tnoremap <silent> <F12> <C-\><C-n>:FloatermToggle<CR> | |
let g:rustfmt_autosave = 1 | |
colorscheme nightfox |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment