dot-files/vim/.vimrc

225 lines
5.7 KiB
VimL

" Basic configuraion {{{
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Don't try to be compatible with Vi, but avoid side-effects
if &compatible
set nocompatible
endif
" Use UTF-8
set encoding=utf-8
set fileencodings=utf-8
" Allow unsaved buffers when switching windows
set hidden
" Allow command completion in command-line
set wildmenu
" Enable syntax high-lighting and file-type specific plugins
syntax on
filetype plugin indent on
" }}}
" Indentation configuration {{{
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Use space by default
set expandtab
" Indent and align to 4 spaces by default
set shiftwidth=4
" -1 means the same as shiftwidth
set softtabstop=-1
" Always indent by multiples of shiftwidth
set shiftround
" You shouldn't change the default tab width of 8 characters
set tabstop=8
" }}}
" Plugins {{{
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Install with :PlugInstall
" FIXME: At some point I'll need to switch over to the native Vim 8.0 package
" feature. Either via manual git subtree management, or maybe through minpac?
"
" Install vim-plug if we don't already have it
" Credit to github.com/captbaritone
if empty(glob("~/.vim/autoload/plug.vim"))
" Ensure all needed directories exist (Thanks @kapadiamush)
silent! execute '!mkdir -p ~/.vim/plugged'
silent! execute '!mkdir -p ~/.vim/autoload'
" Download the actual plugin manager
silent! execute '!curl -fLo ~/.vim/autoload/plug.vim https://raw.github.com/junegunn/vim-plug/master/plug.vim'
endif
call plug#begin('~/.vim/plugged')
" Theming {{{
"""""""""
" Another nice dark theme
Plug 'morhetz/gruvbox'
" Simpler gruvbox
Plug 'lifepillar/vim-gruvbox8'
" More dark colorschemes
Plug 'joshdick/onedark.vim'
" And another one
Plug 'junegunn/seoul256.vim'
" Fancy status bar
Plug 'itchyny/lightline.vim'
" }}}
" Minimum viable vim config {{{
"""""""""""""""""""""""""""
" Basic default vimrc file
Plug 'tpope/vim-sensible'
" High-light trailing whitespace
Plug 'ntpeters/vim-better-whitespace'
" }}}
" Program/language specific {{{
"""""""""""""""""""""""""""
" Pandoc syntax file
Plug 'vim-pandoc/vim-pandoc-syntax'
" Pandoc commands
Plug 'vim-pandoc/vim-pandoc'
" A sane git syntax file
Plug 'tpope/vim-git'
" An awesome git wrapper
Plug 'tpope/vim-fugitive'
" Show git messages in preview window
Plug 'rhysd/git-messenger.vim'
" Pre-written functions for fzf mappings
Plug 'junegunn/fzf.vim'
" Rust syntax, folding, compiler etc...
Plug 'rust-lang/rust.vim'
" A better GNU Info reader than info
Plug 'HiPhish/info.vim', { 'on': 'Info' }
" Nix configuration files
Plug 'LnL7/vim-nix'
" TOML files
Plug 'cespare/vim-toml'
" Beancount fiels
Plug 'nathangrigg/vim-beancount'
" Jsonnet files
Plug 'google/vim-jsonnet'
" Tmux configuration file
Plug 'tmux-plugins/vim-tmux'
" }}}
" Vim facilities enhancement {{{
""""""""""""""""""""""""""""
" A better netrw
Plug 'tpope/vim-vinegar'
" Better quick-fix window
Plug 'romainl/vim-qf'
" Better folding
Plug 'Konfekt/FastFold'
" UNIX integration
Plug 'tpope/vim-eunuch'
" Readline mappings
Plug 'tpope/vim-rsi'
" }}}
" Mappings {{{
""""""""""
" Easily delete, change and add surroundings in pairs
Plug 'tpope/vim-surround'
" Better repeatability with the '.' key
Plug 'tpope/vim-repeat'
" Some ex command mappings
Plug 'tpope/vim-unimpaired'
" Easily comment
Plug 'tpope/vim-commentary'
" }}}
" Snippets {{{
""""""""""
" Snippet manager
Plug 'SirVer/ultisnips'
" Snippet files for Ulti Snips
Plug 'honza/vim-snippets'
" }}}
" LSP {{{
"""""
" Asynchronous Linting Engine
Plug 'dense-analysis/ale'
" Pre-made ALE integration with lightline
Plug 'maximbaz/lightline-ale'
" }}}
call plug#end()
" }}}
" File parameters {{{
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Disable backups, we have source control for that
set nobackup
" Disable swapfiles too
set noswapfile
" }}}
" UI and UX parameters {{{
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Set the minimal amount of lignes under and above the cursor for context
set scrolloff=5
" Always show status line
set laststatus=2
" Enable Doxygen highlighting
let g:load_doxygen_syntax=1
" Make backspace behave as expected
set backspace=eol,indent,start
" Use the visual bell instead of beeping
set visualbell
" Disable bell completely by resetting the visual bell's escape sequence
set t_vb=
" Color the 80th column
set colorcolumn=80
" Show whitespace
set list
" Show a tab as an arrow, trailing spaces as ¤, non-breaking spaces as dots
set listchars=tab:>,trail,nbsp
" Don't redraw when executing macros
set lazyredraw
" Timeout quickly on shortcuts, I can't wait two seconds to delete in visual
set timeoutlen=500
" Set dark mode by default
set background=dark
" Use onedark
silent! colorscheme onedark
" 24-bit true color {{{
if (has("termguicolors"))
set termguicolors
" Need this hack-around because it is only applied on TERM='xterm' otherwise
if (!empty($TMUX) && !has('nvim'))
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
endif
endif
" }}}
" }}}
" Search parameters {{{
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Enable search high-lighting while the search is on-going
set hlsearch
" Ignore case on search
set ignorecase
" Ignore case unless there is an uppercase letter in the pattern
set smartcase
" }}}
" Import settings when inside a git repository {{{
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let git_settings=system("git config --get vim.settings")
if strlen(git_settings)
exe "set" git_settings
endif
" }}}
" vim: foldmethod=marker