"=============================================================================== "======================== 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= " Use a different mapleader. let mapleader='°' " 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 " I user :terminal quite often. nnoremap t :sp:terminala "========================= 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 autocmd BufEnter *.json set formatprg=python3\ -m\ json.tool "_______________________________________________________________________________ "=========================== 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' Plug 'nvim-lua/lsp-status.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'} " SLIME brings REPL features to VIM. " I will try this out. Plug 'jpalardy/vim-slime' " This plugin should allow editing Jupyter Notebooks " in VIM. Plug 'szymonmaszke/vimpyter' " Firenvim allows to use neovim as the " firefox text editor. Plug 'glacambre/firenvim', { 'do': { _ -> firenvim#install(0) } } " This is a tree manager Plug 'kyazdani42/nvim-web-devicons' Plug 'kyazdani42/nvim-tree.lua' " Git Gut. Plug 'airblade/vim-gitgutter' 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_status = require('lsp-status') nvim_lsp_status.register_progress() 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() -- also attach lsp-status nvim_lsp_status.on_attach(_, bufnr) end -- Enable the language servers. nvim_lsp.ccls.setup{on_attach=on_attach, capabilities=nvim_lsp_status.capabilities} nvim_lsp.vimls.setup{on_attach=on_attach, capabilities=nvim_lsp_status.capabilities} nvim_lsp.pyls.setup{on_attach=on_attach, capabilities=nvim_lsp_status.capabilities} nvim_lsp.bashls.setup{on_attach=on_attach, capabilities=nvim_lsp_status.capabilities} nvim_lsp.yamlls.setup{on_attach=on_attach, capabilities=nvim_lsp_status.capabilities} 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 " Statusline function! LspStatus() abort if luaeval('#vim.lsp.buf_get_clients() > 0') return luaeval("require('lsp-status').status()") endif return '' endfunction "========================= 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 "========================== Settings Related to SLIME ========================== "=============================================================================== let g:slime_target = 'neovim' let g:slime_no_mappings = 1 xmap r SlimeRegionSend nmap r SlimeParagraphSend "========================== Settings Related to IPYNB ========================== "=============================================================================== " You have to install notedown pip3 install --user notedown. "======================== Settings Related to Firenvim ========================= "=============================================================================== if exists('g:started_by_firenvim') imap set fileformat=dos colorscheme morning set guifont=:h9 endif "============================= Statusline Settings ============================= "=============================================================================== set statusline= set statusline+=%t\ %m%-y%-r%w%< set statusline+=%=%-30.50{LspStatus()} set statusline+=%=r:%-5l\ c:%-4v set laststatus=2 "========================= Settings Related to GIT GUD ========================= "=============================================================================== set updatetime=200