Last active
February 27, 2022 19:26
-
-
Save Voronar/b796da36bfee4527c2819a16e5423d20 to your computer and use it in GitHub Desktop.
nvim
This file contains hidden or 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
-- Install packer | |
local install_path = vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim' | |
if vim.fn.empty(vim.fn.glob(install_path)) > 0 then | |
vim.fn.execute('!git clone https://github.com/wbthomason/packer.nvim ' .. install_path) | |
end | |
vim.cmd [[ | |
augroup Packer | |
autocmd! | |
autocmd BufWritePost init.lua PackerCompile | |
augroup end | |
]] | |
local use = require('packer').use | |
require('packer').startup(function() | |
use 'wbthomason/packer.nvim' -- Package manager | |
use 'tpope/vim-fugitive' -- Git commands in nvim | |
use 'tpope/vim-rhubarb' -- Fugitive-companion to interact with github | |
use 'numToStr/Comment.nvim' -- "gc" to comment visual regions/lines | |
-- use 'ludovicchabant/vim-gutentags' -- Automatic tags management (code folding) | |
-- UI to select things (files, grep results, open buffers...) | |
use { 'nvim-telescope/telescope.nvim', requires = { 'nvim-lua/plenary.nvim' } } | |
use {'nvim-telescope/telescope-fzf-native.nvim', run = 'make' } | |
use 'mjlbach/onedark.nvim' -- Theme inspired by Atom | |
use { | |
'nvim-lualine/lualine.nvim', | |
requires = { 'kyazdani42/nvim-web-devicons', opt = true } | |
} | |
-- Add indentation guides even on blank lines | |
use 'lukas-reineke/indent-blankline.nvim' | |
-- Add git related info in the signs columns and popups | |
use { 'lewis6991/gitsigns.nvim', requires = { 'nvim-lua/plenary.nvim' } } | |
-- Highlight, edit, and navigate code using a fast incremental parsing library | |
use 'nvim-treesitter/nvim-treesitter' | |
-- Additional textobjects for treesitter | |
use 'nvim-treesitter/nvim-treesitter-textobjects' | |
use 'neovim/nvim-lspconfig' -- Collection of configurations for built-in LSP client | |
use 'hrsh7th/nvim-cmp' -- Autocompletion plugin | |
use 'hrsh7th/cmp-nvim-lsp' | |
use 'saadparwaiz1/cmp_luasnip' | |
use 'L3MON4D3/LuaSnip' -- Snippets plugin | |
use 'Mofiqul/vscode.nvim' | |
use 'nvim-lua/lsp-status.nvim' | |
use 'simrat39/rust-tools.nvim' | |
use { | |
'sudormrfbin/cheatsheet.nvim', | |
requires = { | |
{'nvim-telescope/telescope.nvim'}, | |
{'nvim-lua/popup.nvim'}, | |
{'nvim-lua/plenary.nvim'}, | |
} | |
} | |
end) | |
vim.cmd([[ | |
filetype indent plugin on | |
filetype indent on | |
]]) | |
vim.opt.tabstop = 2 | |
vim.opt.shiftwidth = 2 | |
vim.opt.expandtab = true | |
vim.opt.smartindent = true | |
vim.cmd [[ | |
autocmd FileType xml,html,xhtml,css,scss,javascript,typescript,htmljinja,tsx,jsx setlocal shiftwidth=2 tabstop=2 | |
autocmd FileType lua,yaml,rust,cpp,c,java,react,ocaml setlocal shiftwidth=2 tabstop=2 | |
]] | |
--Set highlight on search | |
vim.o.hlsearch = false | |
--Make line numbers default | |
vim.wo.number = true | |
--Enable mouse mode | |
vim.o.mouse = 'a' | |
--Enable break indent | |
vim.o.breakindent = true | |
--Save undo history | |
vim.opt.undofile = true | |
--Case insensitive searching UNLESS /C or capital in search | |
vim.o.ignorecase = true | |
vim.o.smartcase = true | |
--Decrease update time | |
vim.o.updatetime = 250 | |
vim.wo.signcolumn = 'yes' | |
--Set colorscheme | |
vim.o.termguicolors = true | |
--vim.cmd [[colorscheme onedark]] | |
-- For dark theme | |
vim.cmd [[colorscheme vscode]] | |
vim.g.vscode_style = "dark" | |
vim.g.vscode_style = "light" | |
-- Enable transparent background. | |
vim.g.vscode_transparent = 1 | |
-- Enable italic comment | |
vim.g.vscode_italic_comment = 1 | |
require('vscode').change_style("dark") | |
-- Set completeopt to have a better completion experience | |
vim.o.completeopt = 'menuone,noselect' | |
local lsp_status = require('lsp-status') | |
-- completion_customize_lsp_label as used in completion-nvim | |
-- Optional: customize the kind labels used in identifying the current function. | |
-- g:completion_customize_lsp_label is a dict mapping from LSP symbol kind | |
-- to the string you want to display as a label | |
-- lsp_status.config { kind_labels = vim.g.completion_customize_lsp_label } | |
-- Register the progress handler | |
lsp_status.register_progress() | |
--Set statusbar | |
require('lualine').setup { | |
options = { | |
icons_enabled = true, | |
theme = 'vscode', | |
component_separators = '|', | |
section_separators = '', | |
}, | |
sections = { | |
lualine_c = { "require'lsp-status'.status()" }, | |
}, | |
} | |
--Enable Comment.nvim | |
require('Comment').setup() | |
--Remap space as leader key | |
vim.api.nvim_set_keymap('', '<Space>', '<Nop>', { noremap = true, silent = true }) | |
vim.g.mapleader = ' ' | |
vim.g.maplocalleader = ' ' | |
--Remap for dealing with word wrap | |
vim.api.nvim_set_keymap('n', 'k', "v:count == 0 ? 'gk' : 'k'", { noremap = true, expr = true, silent = true }) | |
vim.api.nvim_set_keymap('n', 'j', "v:count == 0 ? 'gj' : 'j'", { noremap = true, expr = true, silent = true }) | |
-- Highlight on yank | |
vim.cmd [[ | |
augroup YankHighlight | |
autocmd! | |
autocmd TextYankPost * silent! lua vim.highlight.on_yank() | |
augroup end | |
]] | |
--Map blankline | |
vim.g.indent_blankline_char = '┊' | |
vim.g.indent_blankline_filetype_exclude = { 'help', 'packer' } | |
vim.g.indent_blankline_buftype_exclude = { 'terminal', 'nofile' } | |
vim.g.indent_blankline_show_trailing_blankline_indent = false | |
-- Gitsigns | |
require('gitsigns').setup { | |
signs = { | |
add = { text = '+' }, | |
change = { text = '~' }, | |
delete = { text = '_' }, | |
topdelete = { text = '‾' }, | |
changedelete = { text = '~' }, | |
}, | |
} | |
local telescope = require 'telescope' | |
local telescope_builtin = require 'telescope.builtin' | |
-- Telescope | |
telescope.setup { | |
defaults = { | |
mappings = { | |
i = { | |
['<C-u>'] = false, | |
['<C-d>'] = false, | |
}, | |
}, | |
}, | |
} | |
-- Enable telescope fzf native | |
require('telescope').load_extension 'fzf' | |
--Add leader shortcuts | |
vim.api.nvim_set_keymap('n', '<leader><space>', [[<cmd>lua require('telescope.builtin').buffers()<CR>]], { noremap = true, silent = true }) | |
vim.api.nvim_set_keymap( | |
'n', | |
'<leader>sf', | |
[[<cmd>lua require('telescope.builtin').find_files({ find_command = { 'rg', '--files', '--iglob', '!.git', '--hidden' }, previewer = false })<CR>]], | |
{ noremap = true, silent = true } | |
) | |
vim.api.nvim_set_keymap('n', '<leader>sb', [[<cmd>lua require('telescope.builtin').current_buffer_fuzzy_find()<CR>]], { noremap = true, silent = true }) | |
vim.api.nvim_set_keymap('n', '<leader>sh', [[<cmd>lua require('telescope.builtin').help_tags()<CR>]], { noremap = true, silent = true }) | |
vim.api.nvim_set_keymap('n', '<leader>st', [[<cmd>lua require('telescope.builtin').tags()<CR>]], { noremap = true, silent = true }) | |
vim.api.nvim_set_keymap('n', '<leader>sd', [[<cmd>lua require('telescope.builtin').grep_string()<CR>]], { noremap = true, silent = true }) | |
vim.api.nvim_set_keymap('n', '<leader>sp', [[<cmd>lua require('telescope.builtin').live_grep()<CR>]], { noremap = true, silent = true }) | |
vim.api.nvim_set_keymap('n', '<leader>so', [[<cmd>lua require('telescope.builtin').tags{ only_current_buffer = true }<CR>]], { noremap = true, silent = true }) | |
vim.api.nvim_set_keymap('n', '<leader>?', [[<cmd>lua require('telescope.builtin').oldfiles()<CR>]], { noremap = true, silent = true }) | |
-- Treesitter configuration | |
-- Parsers must be installed manually via :TSInstall | |
require('nvim-treesitter.configs').setup { | |
highlight = { | |
enable = true, -- false will disable the whole extension | |
}, | |
incremental_selection = { | |
enable = true, | |
keymaps = { | |
init_selection = 'gnn', | |
node_incremental = 'grn', | |
scope_incremental = 'grc', | |
node_decremental = 'grm', | |
}, | |
}, | |
indent = { | |
enable = true, | |
}, | |
textobjects = { | |
select = { | |
enable = true, | |
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim | |
keymaps = { | |
-- You can use the capture groups defined in textobjects.scm | |
['af'] = '@function.outer', | |
['if'] = '@function.inner', | |
['ac'] = '@class.outer', | |
['ic'] = '@class.inner', | |
}, | |
}, | |
move = { | |
enable = true, | |
set_jumps = true, -- whether to set jumps in the jumplist | |
goto_next_start = { | |
[']m'] = '@function.outer', | |
[']]'] = '@class.outer', | |
}, | |
goto_next_end = { | |
[']M'] = '@function.outer', | |
[']['] = '@class.outer', | |
}, | |
goto_previous_start = { | |
['[m'] = '@function.outer', | |
['[['] = '@class.outer', | |
}, | |
goto_previous_end = { | |
['[M'] = '@function.outer', | |
['[]'] = '@class.outer', | |
}, | |
}, | |
}, | |
} | |
-- Diagnostic keymaps | |
vim.api.nvim_set_keymap('n', '<leader>e', '<cmd>lua vim.diagnostic.open_float()<CR>', { noremap = true, silent = true }) | |
vim.api.nvim_set_keymap('n', '[d', '<cmd>lua vim.diagnostic.got_prev()<CR>', { noremap = true, silent = true }) | |
vim.api.nvim_set_keymap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', { noremap = true, silent = true }) | |
vim.api.nvim_set_keymap('n', '<leader>q', '<cmd>lua vim.diagnostic.setloclist()<CR>', { noremap = true, silent = true }) | |
vim.diagnostic.config({virtual_text = false}) | |
-- LSP settings | |
local lspconfig = require 'lspconfig' | |
local on_attach = function(client, bufnr) | |
lsp_status.on_attach(client, bufnr) | |
local opts = { noremap = true, silent = true } | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts) | |
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>so', [[<cmd>lua require('telescope.builtin').lsp_document_symbols()<CR>]], opts) | |
vim.cmd [[ command! Format execute 'lua vim.lsp.buf.formatting()' ]] | |
end | |
-- nvim-cmp supports additional completion capabilities | |
local capabilities = vim.lsp.protocol.make_client_capabilities() | |
capabilities = vim.tbl_extend('keep', capabilities, lsp_status.capabilities) | |
-- local capabilities = lsp_status.capabilities | |
capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) | |
-- Enable the following language servers | |
local servers = { 'clangd', 'rust_analyzer', 'pyright', 'tsserver' } | |
for _, lsp in ipairs(servers) do | |
lspconfig[lsp].setup { | |
on_attach = on_attach, | |
capabilities = capabilities, | |
} | |
end | |
-- JavaScript stuff | |
lspconfig.eslint.setup {} | |
-- Rust stuff | |
-- require('rust-tools').setup({ | |
-- tools = { | |
-- autoSetHints = false, | |
-- | |
-- -- Whether to show hover actions inside the hover window | |
-- -- This overrides the default hover handler | |
-- hover_with_actions = false, | |
-- server = { on_attach = on_attach, capabilities = capabilities } | |
-- }, | |
-- }) | |
-- | |
-- vim.cmd [[ command! RustExpandMacro execute "lua require('rust-tools.expand_macro').expand_macro()" ]] | |
-- Example custom server | |
-- Make runtime files discoverable to the server | |
local runtime_path = vim.split(package.path, ';') | |
table.insert(runtime_path, 'lua/?.lua') | |
table.insert(runtime_path, 'lua/?/init.lua') | |
-- luasnip setup | |
local luasnip = require 'luasnip' | |
-- nvim-cmp setup | |
local cmp = require 'cmp' | |
cmp.setup { | |
snippet = { | |
expand = function(args) | |
luasnip.lsp_expand(args.body) | |
end, | |
}, | |
mapping = { | |
['<C-p>'] = cmp.mapping.select_prev_item(), | |
['<C-n>'] = cmp.mapping.select_next_item(), | |
['<C-d>'] = 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.Replace, | |
select = true, | |
}, | |
['<Tab>'] = function(fallback) | |
if cmp.visible() then | |
cmp.select_next_item() | |
elseif luasnip.expand_or_jumpable() then | |
luasnip.expand_or_jump() | |
else | |
fallback() | |
end | |
end, | |
['<S-Tab>'] = function(fallback) | |
if cmp.visible() then | |
cmp.select_prev_item() | |
elseif luasnip.jumpable(-1) then | |
luasnip.jump(-1) | |
else | |
fallback() | |
end | |
end, | |
}, | |
sources = { | |
{ name = 'nvim_lsp' }, | |
{ name = 'luasnip' }, | |
}, | |
} | |
-- vim: ts=2 sts=2 sw=2 et |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment