From 468a789dbc4b1928c035d8590895efc533520a27 Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Wed, 24 Feb 2021 17:07:33 +0100 Subject: Updated file tree to match XDG base directory specification --- config/vim/vimrc | 315 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 315 insertions(+) create mode 100644 config/vim/vimrc (limited to 'config/vim/vimrc') diff --git a/config/vim/vimrc b/config/vim/vimrc new file mode 100644 index 0000000..6b1bcc2 --- /dev/null +++ b/config/vim/vimrc @@ -0,0 +1,315 @@ +"""""""""" +" vimrc " +"""""""""" + +" xdg {{{ +set runtimepath^=$XDG_CONFIG_HOME/vim +set runtimepath+=$XDG_DATA_HOME/vim +set runtimepath+=$XDG_CONFIG_HOME/vim/after + +set packpath^=$XDG_DATA_HOME/vim,$XDG_CONFIG_HOME/vim +set packpath+=$XDG_CONFIG_HOME/vim/after,$XDG_DATA_HOME/vim/after + +let g:netrw_home = $XDG_DATA_HOME . "/vim" +call mkdir($XDG_DATA_HOME."/vim/spell", 'p') +set viewdir=$XDG_DATA_HOME/vim/view | call mkdir(&viewdir, 'p') + +set backupdir=$XDG_CACHE_HOME/vim/backup | call mkdir(&backupdir, 'p') +set directory=$XDG_CACHE_HOME/vim/swap | call mkdir(&directory, 'p') +set undodir=$XDG_CACHE_HOME/vim/undo | call mkdir(&undodir, 'p') +" }}} + +source pluggins.vim " load pluggins + +" 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 = 1 +" let g:dracula_italic = 1 +" 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': 'solarized', + \ '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, +" }}} + +" 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 +function! QuickfixToggle() + if g:quickfix_is_open + cclose + let g:quickfix_is_open = 0 + else + copen + let g:quickfix_is_open = 1 + endif +endfunction +" }}} + +function! 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 CountScopeLines() + +" 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 +let g:c_syntax_for_h = 1 " filetype=c in header files instead of filetype=cpp +autocmd Filetype c setlocal noexpandtab +" std::cout << ... << std::endl; shortcut +autocmd Filetype cpp nnoremap cout istd::cout << << std::endl;2Fp :CtrlPTag +" }}} + +" quick-scope {{{ +" let g:qs_highlight_on_keys = ['f', 'F', 't', 'T'] +" }}} + +" man-plugin {{{ +" runtime! ftplugin/man.vim +" let g:ft_man_open_mode = 'vert' " open in a vertical split +" let g:ft_man_no_sect_fallback = 2 " if page specified fallback to page 2 (syscall pages) +" autocmd Filetype man unmap q: hmmmm?? +" }}} + +" ctrlp-funky {{{ +" let g:ctrlp_funky_syntax_highlight = 1 +" nnoremap :CtrlPFunky +" }}} + +" eazy-align {{{ +xmap ga (EasyAlign) +nmap ga (EasyAlign) +" }}} + +vnoremap c y:call system("xclip -selection clipboard", getreg("\"")) +nnoremap v :call setreg("\"", system("xclip -selection clipboard -o"))p + +let g:c_formatter_42_format_on_save = 0 + +let g:gutentags_ctags_exclude = ['doc/*', 'Makefile'] +" let g:gutentags_ctags_exclude_wildignore = 1 + +let g:goyo_height = 90 -- cgit