" ======= " [ GENERAL ] " ======= " This section is dedicated to general settings of the editor. " Set the encoding set encoding=utf8 scriptencoding utf8 " Set true colors set termguicolors " Set the EOL 'style' set fileformat=unix " Set the locale try lang en_US catch endtry " Disable unsafe commands set secure " Add subfolders in the path set path+=** " Automatically set the directory to the buffer's directory set autochdir " Add confirmation dialog when quitting if there are unsaved changes set confirm try set undodir=~/.config/nvim/undo set undofile set backupdir=~/.config/nvim/backup set backup set directory=~/.config/nvim/swap catch endtry " ======= " [ PLUGINS ] " ======= " Section dedicated to plugins and their configurations. " Initialize plugin manager (vim-plug) call plug#begin('/etc/nvim/plugins') " Plug 'neoclide/coc.nvim' " Core plugin Plug 'elixir-lsp/coc-elixir', {'do': 'yarn install --frozen-lockfile'} " Elixir Plug 'fannheyward/coc-sql', {'do': 'yarn install --frozen-lockfile'} " SQL Plug 'neoclide/coc-css', {'do': 'yarn install --frozen-lockfile'} " CSS Plug 'neoclide/coc-eslint', { 'do': 'yarn install --frozen-lockfile' } " ESLint Plug 'neoclide/coc-tsserver', {'do': 'yarn install --frozen-lockfile'} " TypeScript Plug 'neoclide/coc-json', {'do': 'yarn install --frozen-lockfile'} " JSON Plug 'neoclide/coc-html', {'do': 'yarn install --frozen-lockfile'} " HTML Plug 'neoclide/coc-highlight', {'do': 'yarn install --frozen-lockfile'} " Highlighting " Make auto-select the first completion item and notify coc.nvim to " format on enter, could be remapped by other vim plugin inoremap pumvisible() ? coc#_select_confirm() \: "\u\\=coc#on_enter()\" " Use tab for trigger completion with characters ahead and navigate. inoremap \ pumvisible() ? "\" : \ check_back_space() ? "\" : \ coc#refresh() inoremap pumvisible() ? "\" : "\" function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Interactive finder Plug 'liuchengxu/vim-clap', { 'do': ':Clap install-binary' } " Comment out lines in any* language Plug 'tpope/vim-commentary' " Integrate VIM (https://editorconfig.org/) Plug 'editorconfig/editorconfig-vim' " Collection of language packs for highlighting Plug 'sheerun/vim-polyglot' " Godot syntax highlighting + folding & running scenes Plug 'habamax/vim-godot' " HTML5 snippets Plug 'mattn/emmet-vim' " Snippets " Configurable statusline Plug 'itchyny/lightline.vim' " Configure the statusline let g:lightline = \{ \ 'colorscheme': 'dracula', \ 'component': { \ 'lineinfo': ' %3l:%-2v', \ }, \ 'component_function': { \ 'readonly': 'LightlineReadonly', \ 'fugitive': 'LightlineFugitive' \ }, \ 'separator': { 'left': '', 'right': '' }, \ 'subseparator': { 'left': '', 'right': '' } \} " Helper functions function! LightlineReadonly() return &readonly ? '' : '' endfunction " Dracula colorscheme Plug 'dracula/vim' " Make the background 'transparent' let g:dracula_colorterm=0 " Markdown visualizer Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && yarn install' } " specify browser to open preview page let g:mkdp_browser = 'firefox' " Graphical debugger Plug 'puremourning/vimspector' " Enable default mappings let g:vimspector_enable_mappings = 'HUMAN' " Stops the plugin manager call plug#end() " Re-enables filetype filetype plugin indent on " required! re-enables filetype " ========= " [ INTERFACE ] " ========= " Section dedicated to configurations that are related to the interface. " Set the matches for insert mode completion set complete=.,w,b,u,kspell " List of options for insert mode completion set completeopt=longest,menuone,preview,noselect " Remove ins-complete-menu messages set shortmess+=c " Enable hidden buffers, so when quitting a window the buffer stays listed set hidden " Sets the behaviour of backspace set backspace=indent,eol,start " Ignore case in search patterns set ignorecase " Keep the cursor in the same column when moving around set nostartofline " Disable line wrapping (visual) set nowrap " When splitting windows vertically, put it to the right of the current one set splitright " Show completion options on command-line set wildmenu " Showcase line numbers relative to current " 'set number' makes it so the current line shows it's 'true' line number set number set relativenumber " Sets the fold method based on syntax highlight set foldmethod=syntax " Shows a column with signs in the left, in case there is any set signcolumn=auto " Disable screen redraw while executing commands that haven't been typed set nolazyredraw " Don't show current mode in the command-line set noshowmode " Override the 'ignorecase' option if it contains upper case characters set smartcase " Jumps to nearest search result if there are any if exists("+incsearch") set incsearch endif " Set the background 'theme' to dark set background=dark " Set a colorscheme if the terminal has colors if &t_Co > 2 || has("gui_running") try colorscheme dracula " Sets colorscheme catch /^Vim\%((\a\+)\)\=:E185/ " Not available endtry endif " Enables syntax highlighting if feature is installed if exists("+syntax") syntax on " More accurately highlight file syntax sync fromstart endif " When searching a previous search pattern, highlight all its matches if exists("+hlsearch") set hlsearch endif " Enable visual characters for eol, tab, etc set list " Set visual characters for eol, tab, etc set listchars=tab:›–,eol:¶,extends:‹,precedes:‡ " Shows matching brackets when hovering with cursor set showmatch " Always show the statusline set laststatus=2 " Show (partial) command in the last line of the screen if exists("+showcmd") set showcmd endif " ================== " [ INDENTATION & TEXT ] " ================== " Section dedicated to configurations that are related to indentation and text " manipulation. " Indent based on the lines around set autoindent " Include angle brackets in matching pairs set matchpairs+=<:> " Insert only a single space after punctuation when using join commands set nojoinspaces " Adds support for formatting numbered/bullet lists set formatoptions+=n " Defaults to tab identation with length of four set expandtab " always use spaces set shiftwidth=2 "set tabstop=4 " Insert smartly the indentation according shiftwidth if exists("+smarttab") set smarttab endif " if exists("+smartindent") set smartindent endif " ========= " [ SHORTCUTS ] " ========= " Section dedicated to adding shortcuts " Set the to a better key let mapleader="," " Change between dark and light backgrounds function ChangeBackground() if &background ==# 'dark' set background=light elseif &background ==# 'light' set background=dark endif endfunction " Map the function a shortcut nmap tc :call ChangeBackground() " Enable spell checking map sc :setlocal spell! " Remove highlights more quickly nmap n :noh " Open NETRW nnoremap t :Vexplore " Location list shortcuts nnoremap lo :lopen nnoremap lc :lclose nnoremap ln :lnext nnoremap lp :lprevious " nmap gd (coc-definition) nmap gy (coc-type-definition) nmap gi (coc-implementation) nmap gr (coc-references) " vim-clap nmap vf :Clap files nmap vg :Clap grep nmap vm :Clap marks