Last active
October 23, 2022 07:33
-
-
Save edg-l/624737e31d6e85b2385689298fcccebe to your computer and use it in GitHub Desktop.
neovim config
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
call plug#begin() | |
Plug 'tpope/vim-fugitive' | |
Plug 'tpope/vim-surround' | |
Plug 'airblade/vim-gitgutter' | |
"Plug 'itchyny/lightline.vim' | |
Plug 'cespare/vim-toml' | |
Plug 'tpope/vim-sleuth' | |
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } | |
Plug 'junegunn/fzf.vim' | |
Plug 'vhdirk/vim-cmake' | |
" lsp stuff | |
Plug 'folke/lsp-colors.nvim' | |
Plug 'neovim/nvim-lspconfig' | |
Plug 'hrsh7th/cmp-nvim-lsp' | |
Plug 'hrsh7th/cmp-buffer' | |
Plug 'hrsh7th/cmp-path' | |
Plug 'hrsh7th/cmp-cmdline' | |
Plug 'hrsh7th/nvim-cmp' | |
Plug 'hrsh7th/cmp-vsnip' | |
Plug 'hrsh7th/vim-vsnip' | |
Plug 'arkav/lualine-lsp-progress' | |
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} | |
" theme | |
Plug 'folke/tokyonight.nvim', { 'branch': 'main' } | |
Plug 'EdenEast/nightfox.nvim' " requires nvim 0.8 | |
Plug 'nvim-lualine/lualine.nvim' | |
" If you want to have icons in your statusline choose one of these | |
Plug 'kyazdani42/nvim-web-devicons' | |
call plug#end() | |
set background=dark | |
set clipboard=unnamedplus | |
set completeopt=noinsert,menuone,noselect | |
set cursorline | |
set hidden | |
set inccommand=split | |
set number | |
set relativenumber | |
set splitbelow splitright | |
set title | |
set ttimeoutlen=0 | |
set wildmenu | |
set smartindent | |
set smarttab | |
set mouse= | |
set ruler | |
set hlsearch | |
set smartcase | |
set ignorecase | |
set incsearch | |
set signcolumn=number | |
" Tabs size | |
set expandtab | |
set shiftwidth=2 | |
set tabstop=2 | |
filetype plugin indent on | |
syntax on | |
set t_Co=256 | |
let term_program=$TERM_PROGRAM | |
" Check for conflicts with Apple Terminal app | |
if term_program !=? 'Apple_Terminal' | |
set termguicolors | |
else | |
if $TERM !=? 'xterm-256color' | |
set termguicolors | |
endif | |
endif | |
" Italics | |
let &t_ZH="\e[3m" | |
let &t_ZR="\e[23m" | |
nnoremap <c-p> :FZF<CR> | |
nnoremap <C-f> :Rg<Cr> | |
nnoremap <F4> :tab sp<Cr> | |
"colorscheme tokyonight | |
colorscheme carbonfox | |
highlight! Pmenu guibg=#000000,guifg=#FFFFFF | |
lua << EOF | |
require('lualine').setup { | |
options = { | |
icons_enabled = true, | |
theme = 'auto', | |
component_separators = { left = '', right = ''}, | |
section_separators = { left = '', right = ''}, | |
disabled_filetypes = { | |
statusline = {}, | |
winbar = {}, | |
}, | |
ignore_focus = {}, | |
always_divide_middle = true, | |
globalstatus = false, | |
refresh = { | |
statusline = 1000, | |
tabline = 1000, | |
winbar = 1000, | |
} | |
}, | |
sections = { | |
lualine_a = {'mode'}, | |
lualine_b = {'branch', 'diff', 'diagnostics'}, | |
lualine_c = {'filename', 'lsp_progress'}, | |
lualine_x = {'encoding', 'fileformat', 'filetype'}, | |
lualine_y = {'progress'}, | |
lualine_z = {'location'} | |
}, | |
inactive_sections = { | |
lualine_a = {}, | |
lualine_b = {}, | |
lualine_c = {'filename'}, | |
lualine_x = {'location'}, | |
lualine_y = {}, | |
lualine_z = {} | |
}, | |
tabline = {}, | |
winbar = {}, | |
inactive_winbar = {}, | |
extensions = {} | |
} | |
-- Set up nvim-cmp. | |
local cmp = require'cmp' | |
cmp.setup({ | |
snippet = { | |
-- REQUIRED - you must specify a snippet engine | |
expand = function(args) | |
vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. | |
-- require('luasnip').lsp_expand(args.body) -- For `luasnip` users. | |
-- require('snippy').expand_snippet(args.body) -- For `snippy` users. | |
-- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users. | |
end, | |
}, | |
window = { | |
completion = cmp.config.window.bordered(), | |
documentation = cmp.config.window.bordered(), | |
}, | |
mapping = cmp.mapping.preset.insert({ | |
['<C-b>'] = cmp.mapping.scroll_docs(-4), | |
['<C-f>'] = cmp.mapping.scroll_docs(4), | |
['<C-Space>'] = cmp.mapping.complete(), | |
['<C-e>'] = cmp.mapping.abort(), | |
['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. | |
}), | |
sources = cmp.config.sources({ | |
{ name = 'nvim_lsp' }, | |
{ name = 'vsnip' }, -- For vsnip users. | |
-- { name = 'luasnip' }, -- For luasnip users. | |
-- { name = 'ultisnips' }, -- For ultisnips users. | |
-- { name = 'snippy' }, -- For snippy users. | |
}, { | |
{ name = 'buffer' }, | |
}) | |
}) | |
-- Set configuration for specific filetype. | |
cmp.setup.filetype('gitcommit', { | |
sources = cmp.config.sources({ | |
{ name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it. | |
}, { | |
{ name = 'buffer' }, | |
}) | |
}) | |
-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). | |
cmp.setup.cmdline({ '/', '?' }, { | |
mapping = cmp.mapping.preset.cmdline(), | |
sources = { | |
{ name = 'buffer' } | |
} | |
}) | |
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). | |
cmp.setup.cmdline(':', { | |
mapping = cmp.mapping.preset.cmdline(), | |
sources = cmp.config.sources({ | |
{ name = 'path' } | |
}, { | |
{ name = 'cmdline' } | |
}) | |
}) | |
-- Mappings. | |
-- See `:help vim.diagnostic.*` for documentation on any of the below functions | |
local opts = { noremap=true, silent=true } | |
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts) | |
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) | |
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) | |
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts) | |
-- Use an on_attach function to only map the following keys | |
-- after the language server attaches to the current buffer | |
local on_attach = function(client, bufnr) | |
-- Enable completion triggered by <c-x><c-o> | |
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') | |
-- Mappings. | |
-- See `:help vim.lsp.*` for documentation on any of the below functions | |
local bufopts = { noremap=true, silent=true, buffer=bufnr } | |
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) | |
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) | |
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) | |
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) | |
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts) | |
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts) | |
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts) | |
vim.keymap.set('n', '<space>wl', function() | |
print(vim.inspect(vim.lsp.buf.list_workspace_folders())) | |
end, bufopts) | |
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts) | |
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts) | |
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts) | |
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) | |
vim.keymap.set('n', '<space>f', function() vim.lsp.buf.format { async = true } end, bufopts) | |
end | |
local capabilities = require("cmp_nvim_lsp").default_capabilities() | |
local lsp_flags = { | |
-- This is the default in Nvim 0.7+ | |
debounce_text_changes = 150, | |
} | |
require("lspconfig").clangd.setup({ | |
on_attach = on_attach, | |
flags = lsp_flags, | |
capabilities = capabilities | |
}) | |
require('lspconfig')['rust_analyzer'].setup{ | |
on_attach = on_attach, | |
flags = lsp_flags, | |
capabilities = capabilities, | |
-- Server-specific settings... | |
settings = { | |
["rust-analyzer"] = {} | |
} | |
} | |
require'nvim-treesitter.configs'.setup { | |
-- A list of parser names, or "all" | |
ensure_installed = { "c", "cpp", "rust", "html", "lua", "go", "vim" }, | |
-- 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, | |
highlight = { | |
-- `false` will disable the whole extension | |
enable = true, | |
-- 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, | |
}, | |
} | |
EOF | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment