" General Options {{{1 " ==================== set nocompatible " ignored in NeoVim, tells Vim to break compatibility with vi let mapleader=';' " set syntax enable set mouse=a " enable mouse selection set number " line numbers on the left side set relativenumber " number+relativenumber = relative numbers for all but current line set showcmd " show the commands while typing set splitright " open new splits on the right set splitbelow " open new splits below set autoread " autoreload file on change set scrolloff=4 " keep the cursor 4 lines away from the top/bottom set ruler " show the lines/% bottomright set encoding=utf-8 " set default encoding set laststatus=2 " always show the status line set conceallevel=0 " don't use conceals, seriously let g:tex_conceal='' " I said no conceals set shell=/bin/zsh " use zsh instead of bash " use the nice `par` program wrap lines at 99 characters set formatprg=par\ -w99 set formatoptions=tcrqnlmj set textwidth=99 " toggle hybrid relative numbers when entering/leaving insert mode ":augroup numbertoggle ": autocmd! ": autocmd InsertLeave * set relativenumber ": autocmd InsertEnter * set norelativenumber ":augroup END " change cursor shape according to mode :let $NVIM_TUI_ENABLE_CURSOR_SHAPE=1 set ignorecase smartcase " don't match case if typing in all-lowercase " ignore motion for < > nnoremap < << nnoremap > >> " make < > shifts keep selection vnoremap < >gv inoremap  dba " Switching buffers {{{2 nnoremap :bprev " s-F2 nnoremap :bnext " s-F3 nnoremap :bwipeout " s-F4 " Indentation {{{2 set tabstop=2 " tab is 2 wide set shiftwidth=2 " for use with > and < set noexpandtab " tab key puts tabs "set list listchars=tab:‧\ ,trail:· " display tabs with a leading \cdot. Alternatives: \mapsto ↦, U+16EB runic single punctuation ᛫ " trailing whitespace looks like \cdot set list listchars=tab:¦\ ,trail:· " show indentation lines for tabs, trailing whitespace looks like \cdot " Folds {{{2 set foldlevelstart=3 " Not too much folding nnoremap @=(foldlevel('.')?'za':"\") vnoremap zf " Misc {{{2 " Escape from NeoVim terminals tnoremap " Just hit the [à0] button on an AZERTY, no need to do shift+à to for 0 nnoremap à 0 inoremap jj " Clear highlighting after a search nnoremap n :noh " Open a file in the current directory nmap e :e =expand("%:p:h") . "/" " sudo save command W :execute ':silent w !sudo tee % > /dev/null' | :edit! " Navigate to bookmark, AZERTY has no backtick key noremap m ` " Consistent aliases to jump to first non-whitespace character and last character noremap ^ noremap $ inoremap ^i inoremap $a noremap ^ inoremap ^i " System clipboard {{{2 " Copy to clipboard " Paste from clipboard vnoremap y "+y | nnoremap p "+p nnoremap Y "+yg_ | nnoremap P "+P nnoremap y "+y | vnoremap p "+p nnoremap yy "+yy | vnoremap P "+P " Opening windows {{{2 nnoremap n nmap N nnoremap v nmap V imap vmap nnoremap v :vnew nnoremap V :let spr=&sprset nosprvnewlet &spr=spr nnoremap N :let spr=&sprset nosprnewlet &spr=spr " Cool arrows {{{2 inoremap arse ↘ inoremap arsw ↙ inoremap arne ↗ inoremap arnw ↖ " Default visual block {{{2 nnoremap v nnoremap v " Color settings {{{2 " Decent color schemes: ron, delek, peachpuff, slate, murphy, elflord, desert source /usr/share/nvim/runtime/colors/ron.vim highlight LineNr ctermfg=08 ctermbg=None highlight link Whitespace Conceal " Adding modeline {{{2 " Append modeline after last line in buffer. " Use substitute() instead of printf() to handle '%%s' modeline in LaTeX " files. function! AppendModeline() let l:modeline = printf(" vim: set ts=%d sw=%d tw=%d %set :", \ &tabstop, &shiftwidth, &textwidth, &expandtab ? '' : 'no') let l:modeline = substitute(&commentstring, "%s", l:modeline, "") call append(line("$"), l:modeline) endfunction nnoremap ml :call AppendModeline() " Plugins {{{1 " ============ " Plug {{{2 " ------------ call plug#begin('~/.config/nvim/plug') " Colors "Plug 'chriskempson/base16-vim' " Language support Plug 'sheerun/vim-polyglot' " color, indentation support for 100+ languages Plug 'chrisbra/csv.vim', { 'for': 'csv' } " CSV files "Plug 'neovimhaskell/haskell-vim', { 'for': 'haskell' } " included in vim-polyglot "Plug 'LaTeX-Box-Team/LaTeX-Box', { 'for': 'tex' } " included in vim-polyglot "Plug 'rust-lang/rust.vim', { 'for': 'rust' } " included in vim-polyglot " C/C++ "Plug 'vim-scripts/c.vim', { 'for': ['c', 'cpp', 'objc'] } " various IDE-like C features Plug 'vim-scripts/DoxygenToolkit.vim', { 'for': ['c', 'cpp', 'python'] } " simplify Doxygen documentation in C, C++, Python "Plug 'derekwyatt/vim-fswitch', { 'for': ['c', 'cpp', 'objc'] } " switch between companion source files (e.g. .h and .cpp) Plug 'derekwyatt/vim-fswitch', { 'on': 'FSRight' } " switch between companion source files (e.g. .h and .cpp) "Plug 'derekwyatt/vim-protodef', { 'for': ['c', 'cpp', 'objc'] } " pull in C++ function prototypes into implementation files Plug 'vim-scripts/Conque-GDB', { 'for': ['c', 'cpp', 'objc'] } " GDB command line interface and terminal emulator "Plug 'Shougo/vimproc.vim', { 'do': 'make' } " dependency of vim-vebugger, asynchronous execution library "Plug 'idanarye/vim-vebugger', { 'for': ['c', 'cpp', 'objc', 'java', 'python', 'ruby'] } " debugger frontend for GDB, LDB, PDB, RDebug e.a. " Edit "Plug 'jiangmiao/auto-pairs' " insert or delete [], (), '' etc. in pairs Plug 'sjl/gundo.vim' " visualise your undo tree Plug 'scrooloose/nerdcommenter' " intensely orgasmic commenting Plug 'SirVer/ultisnips' " ultimate snippet solution Plug 'fadein/vim-FIGlet', { 'on': 'FIGlet' } " ASCII art Plug 'honza/vim-snippets' " snippets for ultisnips Plug 'junegunn/vim-easy-align' " easily align text in Alexander Approved™ ways Plug 'matze/vim-move' " move lines and selections up and down Plug 'kana/vim-operator-user' " define your own operator easily "Plug 'junegunn/vim-peekaboo' " preview registers when pressing \" or @ Plug 'gcmt/wildfire.vim' " smart selection of the closest text object Plug 'Valloric/YouCompleteMe', { 'do': 'git submodule update --init --recursive && ./install.py --system-libclang --all' } " code-completion engine " Navigation "Plug 'ctrlpvim/ctrlp.vim' " fuzzy file, buffer, mru, tag, etc. finder Plug 'dyng/ctrlsf.vim' " search for code and edit it in-place Plug 'Yggdroot/indentLine' " display the indention levels with thin vertical lines Plug 'scrooloose/nerdtree' " filesystem tree explorer Plug 'majutsushi/tagbar' " display tags in a window, ordered by scope Plug 'easymotion/vim-easymotion' " quickly jump to any location on the screen Plug 'airblade/vim-gitgutter' " show a Git diff in the gutter, stage/undo hunks Plug 'mhinz/vim-grepper', { 'on': 'Grepper' } " asynchronous git grep search "Plug 'ludovicchabant/vim-gutentags' " unobtrusively manage tag files Plug 'tpope/vim-obsession' " continuously updated session files " Powerline Plug 'vim-airline/vim-airline' " statusline plugin in pure Vimscript Plug 'vim-airline/vim-airline-themes' " themes for airline " Analysis Plug 'w0rp/ale' " asynchronous linting engine "Plug 'dbmrq/vim-ditto' " highlight overused words " Misc Plug 'kassio/neoterm', { 'on': 'T' } " wrapper of some neovim's :terminal functions "Plug 'tpope/vim-fugitive' " a Git wrapper Plug 'vim-scripts/TeTrIs.vim' " Tetris clone call plug#end()" " Haskell {{{2 " ------------ let g:haskell_enable_quantification=1 let g:haskell_enable_recursivedo=1 let g:haskell_enable_arrowsyntax=1 let g:haskell_enable_pattern_synonyms=1 let g:haskell_enable_typeroles=1 let g:haskell_enable_static_pointers=1 " Python {{{2 " ----------- " Fuck PEP 8, tabs are better let g:python_recommended_style = 0 " Rust {{{2 " --------- " As with Python, fuck spaces let g:rust_recommended_style = 0 setlocal textwidth=99 " Markdown {{{2 " ------------- let g:vim_markdown_conceal = 0 " CSV.vim {{{2 " ------------ " Doxygen {{{2 " ------------ nnoremap df :Dox nnoremap dl :DoxLic nnoremap da :DoxAuthor let g:DoxygenToolkit_authorName="Midgard" " FSwitch {{{2 " ------------ let b:fswitchdst = '' au! BufEnter *.cpp let b:fswitchdst = 'hpp,h' | let b:fswitchlocs = '.' au! BufEnter *.hpp let b:fswitchdst = 'cpp' | let b:fswitchlocs = '.' au! BufEnter *.c let b:fswitchdst = 'h' | let b:fswitchlocs = '.' au! BufEnter *.h let b:fswitchdst = 'c,cpp' | let b:fswitchlocs = '.' nmap :FSRight " Protodef {{{2 " ------------- nnoremap ;def :call protodef#ReturnSkeletonsFromPrototypesForCurrentBuffer({}) " ConqueGDB {{{2 " -------------- let g:ConqueGdb_Leader = ',' " Commented entries are the defaults "let g:ConqueGdb_Run = g:ConqueGdb_Leader . 'r' "let g:ConqueGdb_Continue = g:ConqueGdb_Leader . 'c' let g:ConqueGdb_Next = g:ConqueGdb_Leader . 'o' " step over let g:ConqueGdb_Step = g:ConqueGdb_Leader . 'i' " step in "let g:ConqueGdb_Print = g:ConqueGdb_Leader . 'p' "let g:ConqueGdb_ToggleBreak = g:ConqueGdb_Leader . 'b' let g:ConqueGdb_Finish = g:ConqueGdb_Leader . 'O' " step out "let g:ConqueGdb_Backtrace = g:ConqueGdb_Leader . 't' nnoremap :ConqueGdb --args build/tests --debug " Vebugger {{{2 " ------------- "let g:vebugger_leader='v' " "nnoremap :VBGstepOver "nnoremap :VBGstepIn "nnoremap :VBGstepOut "nnoremap :VBGcontinue "nnoremap :VBGstartGDB ./huffman " Auto-pairs {{{2 " --------------- " Gundo {{{2 " ---------- nnoremap :GundoToggle " NERDCommenter {{{2 " ------------------ nmap & c vmap & c " UltiSnips {{{2 " --------------- let g:UltiSnipsExpandTrigger='²' " EasyAlign {{{2 " -------------- xmap a (EasyAlign) nmap a (EasyAlign) " Move (lines) {{{2 " ----------------- " Operator user {{{2 " ------------------ " Peekaboo {{{2 " ------------- " Wildfire {{{2 " ------------- " YouCompleteMe {{{2 " ------------------ noremap g :YcmCompleter GoToImprecise let g:ycm_error_symbol='!>' let g:ycm_warning_symbol='-' let g:ycm_enable_diagnostic_highlighting=0 let g:ycm_complete_in_comments=1 let g:ycm_seed_identifiers_with_syntax=1 let g:ycm_collect_identifiers_from_tags_files=1 let g:ycm_add_preview_to_completeopt=1 let g:ycm_autoclose_preview_window_after_insertion=1 let g:ycm_server_python_interpreter='/usr/bin/python3' let g:ycm_global_ycm_extra_conf='~/.config/nvim/ycm_extra_conf.py' let g:ycm_extra_conf_globlist = ['~/Nextcloud/*', '~/Documents/*','~/development/*','~/unief/*'] " ,'!~/*' "let g:ycm_rust_src_path='/data/programming/rustc-1.7.0/src' set completeopt=menu " CtrlP {{{2 " ---------- let g:ctrlp_map='l' let g:ctrlp_user_command=['.git/', 'git --git-dir=%s/.git ls-files . -co --exclude-standard'] nnoremap s :CtrlPTag" " Ctrl-S-F {{{2 " ------------- " IndentLine {{{2 " --------------- " NERDTree {{{2 " ------------- nnoremap t :NERDTreeToggle let NERDTreeIgnore=[ \ ".*\\.class$", \ ".*\\.o$", \ ".*\\.hi$", \ ".*\\.pyc$", \ ".*\\.bak$", \ ".*\\~$" \ ] " automatically open NERDTree when opening vi "autocmd StdinReadPre * let s:std_in=1 "autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif " Tagbar {{{2 " ----------- nnoremap o :Tagbar let g:tagbar_autoclose=1 let g:tagbar_autofocus=1 let g:tagbar_sort=0 let g:tagbar_compact=1 let g:tagbar_iconchars=['▸', '▾'] let g:tagbar_type_make={ \ 'kinds': ['m:macros', 't:targets'] \ } let g:tagbar_type_rust={ \ 'ctagstype': 'rust', \ 'kinds': [ \ 'n:modules', \ 's:structs', \ 'i:interfaces', \ 'c:implementations', \ 'f:functions', \ 'g:enums', \ 't:typedefs', \ 'v:variables', \ 'M:macros', \ 'm:fields', \ 'e:enumerators', \ 'F:methods', \ ] \ } " EasyMotion {{{2 " --------------- let g:EasyMotion_do_mapping=0 let g:EasyMotion_startofline=0 map f (easymotion-s) map j (easymotion-j) map k (easymotion-k) map w (easymotion-bd-w) nmap w (easymotion-overwin-w) " GitGutter {{{2 " -------------- " Grepper {{{2 " ------------ nnoremap G :Grepper let g:grepper={ \ 'tools': ['rg', 'git', 'grep'], \ 'open': 1, \ 'jump': 0, \ } " Gutentags {{{2 " -------------- let g:gutentags_cache_dir = '~/.cache/gutentag' " Obsession {{{2 " -------------- " Powerline {{{2 " -------------- " Airline {{{2 " ------------ let g:airline_powerline_fonts=1 let g:airline_theme='bubblegum' let g:airline#extensions#ycm#enabled=1 let g:airline#extensions#tabline#enabled=1 let g:airline#extensions#ale#enabled=1 let g:ale_linters = { \ 'c': [], \ 'cpp': [], \} " Ale {{{2 " -------- let g:ale_lint_on_text_change='normal' let g:ale_lint_on_insert_leave=1 let g:ale_completion_delay='' let g:ale_lint_delay=500 " Ditto {{{2 " ---------- " Neoterm {{{2 " ------------ " Fugitive {{{2 " ------------- " TeTrIs {{{2 " ----------- " vim: set foldmethod=marker foldlevel=1 et ts=2 sw=2 ft=vim nowrap :