"=============================================================================== "====================== NVIM Main Configuration File =========================== "=============================================================================== "============================== General Setup ================================== "=============================================================================== " This section contains seme stuff I just want in general. inoremap jk " Automatic expansion of comments. set formatoptions=rqn1 " Disable mouse. set mouse="" " Plain old cursor in every mode. set guicursor= " Don't use arrow keys unless in command mode. inoremap inoremap inoremap inoremap nnoremap nnoremap nnoremap nnoremap vnoremap vnoremap vnoremap vnoremap " I disabled this, since the shell requires arrow keys... "tnoremap "tnoremap "tnoremap "tnoremap " Getting out of the terminal insert mode is extremely awkward. " This mapping solves that. tnoremap " Use UTF-8, because we don't live in 1783 anymore. set encoding=UTF-8 " Why would everything remain highlighted all the time? set nohlsearch " Relative numbers are great. set number relativenumber "====================== Code Style Related Settings ============================ "=============================================================================== " This is basically Python's recommendation. set tabstop=4 set softtabstop=0 set shiftwidth=4 set expandtab "===================== Filetype And Related Settings =========================== "=============================================================================== " This section contains stuff that is related to file types. filetype plugin on set modeline set modelines=10 "_______________________________________________________________________________ "========================= Installing all Plugins ============================== "=============================================================================== " For reasons this has to been done in a single step. call plug#begin('~/.vim/plugged') " This is for the LSP stuff. Plug 'neovim/nvim-lspconfig' Plug 'anott03/nvim-lspinstall' Plug 'nvim-lua/completion-nvim' " Inserting unicode characters. Plug 'chrisbra/unicode.vim' " Color schemes. Plug 'tomasr/molokai' Plug 'bluz71/vim-moonfly-colors' Plug 'bluz71/vim-nightfly-guicolors' Plug 'sainnhe/sonokai' Plug 'dylnmc/vulpo.vim' " This is for snippets. Plug 'SirVer/ultisnips' " Treesitter seems to be a reall nice " plugin for code highlighting. Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} call plug#end() "===================== Language Server Configuration =========================== "=============================================================================== " This section sets up the language server for the languages I use. " Run this to install pyls if you haven't yet. "LspInstall pyls "LspInstall bashls " Install ccls from snap or flatpack. lua << EOF local nvim_lsp = require('lspconfig') -- This basically enables autocompletion local on_attach = function(_, bufnr) vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') require'completion'.on_attach() end -- Enable the language servers. nvim_lsp.ccls.setup{on_attach=on_attach} nvim_lsp.vimls.setup{on_attach=on_attach} nvim_lsp.pyls.setup{on_attach=on_attach} nvim_lsp.bashls.setup{on_attach=on_attach} nvim_lsp.yamlls.setup{on_attach=on_attach} EOF " Highlight the problems in the code. highlight LspDiagnosticsDefaultError guifg=BrightRed highlight LspDiagnosticsDefaultWarning guifg=BrightYellow " This allows to jump to the definition, and " show some documentation respectively. nnoremap gd lua vim.lsp.buf.definition() nnoremap gh lua vim.lsp.buf.hover() " This part sets up lsp diagnostics. lua << EOF vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with( vim.lsp.diagnostic.on_publish_diagnostics, { underline = true, -- This sets the spacing and the prefix, obviously. virtual_text = { spacing = 4 , prefix = '🔙' } }) EOF "========================= Settings For Autocompletion ========================= "=============================================================================== " This prevents vim from inserting random function heads, " and also gives some documentation preview. set completeopt=menuone,noinsert,noselect " This prevents the auto-completion from " inserting the full method signature. let g:completion_enable_auto_signature = 0 let g:completion_enable_snippet = 'UltiSnips' " Use completion-nvim in every buffer autocmd BufEnter * lua require'completion'.on_attach() " This function and mapping is basically related " to autocompletion as well. " It automatically maps a single bracket to the " GNU-style formatted bracket. let g:AutoInsertBracket_enable = 0 function! AutoInsertBracket() if g:AutoInsertBracket_enable return "{\n}\O" else return "{" endif endfunction inoremap { AutoInsertBracket() "========================== A Nice Color Scheme ================================ "=============================================================================== "set background=dark "let g:airline_theme='one' let $NVIM_TUI_ENABLE_TRUE_COLOR=1 set termguicolors " This is for sonokai, a rather nice " color scheme. "let g:sonokai_style = 'atlantis' "let g:sonokai_enable_italic = 0 "let g:sonokai_disable_italic_comment = 0 colorscheme molokai "=================== Settings Related to Highlighting ========================== "=============================================================================== let g:vimsyn_embed= 'l' "==================== Settings Related to Treesitter =========================== "=============================================================================== " Install the language parsers. "TSInstall python "TSInstall c "TSInstall cpp "TSInstall bash