"""""""""" " vimrc " """""""""" " load pluggins {{{ source $DOTDIR/.pluggins.vim " }}} """"""""""" " options " """"""""""" " common {{{ let mapleader = ' ' " set leader key to space let maplocalleader = '-' " set file local leader key to backslash set nocompatible " not compatible with vi set number " line number " set relativenumber " line number relative to cursor set numberwidth=1 " line numbers gutter autowidth set cursorline " highlight current line set noshowmatch " dont jump to pair bracket set autoread " reload files when changes happen outside vim set autowrite " auto write buf on certain events set hidden " keep change in buffer when quitting window set noswapfile " disable swap files set scrolloff=2 " line padding when scrolling set textwidth=0 " when line wrap occurs set wrapmargin=0 " disable auto line wrapping set encoding=utf-8 " utf-8 encoding set formatoptions-=t " do not auto break line > 89 character filetype plugin indent on " allow to add specific rules for certain type of file " set mouse=a " mouse scrolling (heretic) " }}} " browse list with tab {{{ set wildmode=longest,list,full set wildmenu " tab to cycle through completion options set path+=** " recursive :find "}}} " intuitif split opening {{{ set splitbelow set splitright set fcs+=vert:│ " split separator " }}} " tab {{{ set expandtab " tab to space set tabstop=4 " tab size set shiftwidth=4 set smarttab set autoindent set smartindent " }}} " file search {{{ set ignorecase " case insensitive set smartcase set hlsearch " match highlight set incsearch " }}} " status {{{ set laststatus=2 " always a statusline (all window) set showcmd " show current partial command in the bottom right set noshowmode " dont show current mode (i.e --INSERT--) " }}} " fold {{{ set foldmethod=indent " create fold based on the text indent set nofoldenable " not folded by default " }}} """"""""""""""" " colorscheme " """"""""""""""" " one {{{ " let g:onedark_terminal_italics=1 " colorscheme onedark " }}} " dracula {{{ let g:dracula_bold = 0 let g:dracula_italic = 0 let g:dracula_colorterm = 0 colorscheme dracula " }}} " solarized {{{ " set t_Co=16 " let g:solarized_termcolors=16 " let g:solarized_visibility='low' " visibility of invisible chars with set list " set background=dark " colorscheme solarized " }}} " lightline {{{ let g:lightline = {} " let g:lightline.colorscheme = 'solarized' " lightline theme to solarized " let g:lightline.colorscheme = 'jellybeans' " lightline theme to onedark let g:lightline = { \ 'colorscheme': 'dracula', \ 'active': { \ 'left': [ [ 'mode', 'paste' ], \ [ 'gitbranch', 'readonly', 'filename', 'modified' ] ] \ }, \ 'component_function': { \ 'gitbranch': 'FugitiveHead' \ }, \ } " }}} """""""""""" " mappings " """""""""""" " split navigation {{{ nnoremap nnoremap nnoremap nnoremap " nnoremap " nnoremap " nnoremap " nnoremap nnoremap s= = " }}} " common {{{ " 'Y' yank to the end of the line noremap Y y$ " solves annoying delay went exiting insert mode inoremap " kj to exit insert mode inoremap kj " remove visual mode keybinding noremap Q " remove command line window keybinding noremap q: " search with very magic nnoremap / /\v nnoremap ? ?\v " move line up and down nnoremap _ ddkP nnoremap + ddp " long move up/down nnoremap ( 10k nnoremap ) 10j " tag nagigation nnoremap ] nnoremap t " common change until nnoremap cu ct_ nnoremap cp ct) nnoremap c, ct, " write shortcut that doesn't involve " (macos paste clipboard on enter for some reason) nnoremap ZZ :w " }}} " buffer navigation {{{ nnoremap bn :bn nnoremap bp :bp nnoremap :b# nnoremap bl :ls " }}} " vimrc {{{ nnoremap rc :vsplit $DOTDIR/.vimrc nnoremap sc :source $MYVIMRC " }}} " c {{{ " create c function body from prototype nnoremap gcf A{}j " initialise a school header file function! PutHeaderBoilerPlate() let l:filename = join(split(toupper(expand('%:t')), '\.'), "_") " echom l:filename call append(12, "#ifndef " . l:filename) call append(13, "# define " . l:filename) call append(15, "#endif") endfunction nnoremap gch :Stdheader:call PutHeaderBoilerPlate() " put semicolon at the end of line nnoremap ; mqA;`q " doxygen format comments autocmd Filetype c setlocal comments=s:/**,m:**,e:*/,s:/*,m:**,e:*/ autocmd Filetype cpp setlocal comments=s:/**,m:**,e:*/,s:/*,m:**,e:*/ " }}} " cpp {{{ " Put Coplien Form boilerplate class function! PutCoplienFormFunc(name) let l:default_constructor = a:name . "();\n" let l:copy_constructor = a:name . "(const " . a:name . "& other);\n" let l:copy_operator = a:name . "& operator=(const " . a:name . "& other);\n" let l:destructor = "~" . a:name . "();\n" execute "normal iclass " . a:name . "\n{\npublic:\n" . l:default_constructor . l:copy_constructor . l:copy_operator . l:destructor . "\nprivate:\n};\n" execute "normal <2{" endfunction " Put Coplien Form boilerplate according to filename command! PutCoplienFormFile call PutCoplienFormFunc(split(expand('%:t'), '\.')[0]) command! -nargs=1 PutCoplienForm call PutCoplienFormFunc("") " }}} " quickfix window toggle {{{ nnoremap q :call QuickfixToggle() nnoremap n :cnext nnoremap p :cprevious let g:quickfix_is_open = 0 if !exists('*QuickfixToggle') function QuickfixToggle() if g:quickfix_is_open cclose let g:quickfix_is_open = 0 else copen let g:quickfix_is_open = 1 endif endfunction endif " }}} " make {{{ nnoremap m :make all " }}} " hook {{{ " remove trailing white space on save autocmd BufWritePre * %s/\s\+$//e " dirty hack to disable this feature on markdown (autocmd! wouldn't work) autocmd BufReadPre *.md autocmd! BufWritePre " }}} " filetype {{{ " real tab in c file for school projects autocmd BufReadPre,BufNewFile *.h,*.c set filetype=c autocmd Filetype c setlocal noexpandtab " std::cout << ... << std::endl; shortcut autocmd Filetype cpp nnoremap cout istd::cout << << std::endl;2F q: hmmmm?? " }}} " ctrlp-funky {{{ " let g:ctrlp_funky_syntax_highlight = 1 " nnoremap :CtrlPFunky " }}} " eazy-align {{{ xmap ga (EasyAlign) nmap ga (EasyAlign) " }}} " c_formatter_42 {{{ let g:c_formatter_42_set_equalprg=0 let g:c_formatter_42_format_on_save=0 " }}} function! s:CountScopeLines() normal! mq execute '/^}' let l:end_brace = line('.') execute '?^{' let l:start_brace = line('.') normal! k let l:scope_len = l:end_brace - l:start_brace - 1 let l:scope_name = substitute(getline('.'), '\t', ' ', 'g') echom l:scope_len . ' lines in |' . l:scope_name . '|' normal! `q endfunction command! CountScopeLines call s:CountScopeLines() " disable paste on enter " (need to be at the end or overwritted by something) " nnoremap j " copy/paste with system {{{ vnoremap c y:call system("pbcopy", getreg("\"")) nnoremap v :call setreg("\"",system("pbpaste"))p " }}} inoremap command! TagsUpdate :call system('ctags $(find . -type f -name "*.c" -o -name "*.h")')