sawine@0: " Name: Moon Vim Configuration sawine@0: " Author: Eugen Sawin sawine@0: sawine@0: let indentspace=2 sawine@0: " mappings sawine@0: let mapleader="," sawine@2: nnoremap y "*Y sawine@2: nnoremap p "*P sawine@2: " nnoremap cc :'c,. s/^/\/\/ / sawine@0: nnoremap hg :HeaderguardAdd sawine@0: nnoremap 1 :set lines=53 columns=85o sawine@0: nnoremap 2 :set lines=53 columns=171v sawine@0: nnoremap dtr :%s/\s\+$ sawine@0: nnoremap :noh sawine@0: nnoremap / /\v sawine@0: nnoremap evim :split $MYVIMRC sawine@0: nnoremap svim :source $MYVIMRC sawine@0: nnoremap v vl sawine@0: nnoremap h sl sawine@0: nnoremap h sawine@0: nnoremap j sawine@0: nnoremap k sawine@0: nnoremap l sawine@0: inoremap ii sawine@0: vnoremap ii sawine@0: inoremap sawine@0: inoremap sawine@0: inoremap sawine@0: inoremap sawine@0: vnoremap / /\v sawine@0: sawine@0: " vim > vi sawine@0: set nocompatible sawine@0: filetype on sawine@0: filetype plugin on sawine@0: filetype indent on sawine@0: set autochdir sawine@2: set notitle sawine@0: sawine@0: " search sawine@0: set incsearch sawine@0: set ignorecase sawine@0: set smartcase sawine@0: set hlsearch sawine@0: sawine@0: " scrolling sawine@0: set scrolloff=3 sawine@0: sawine@0: " tab completion sawine@2: set wildmode=list:longest,full sawine@0: set wildmenu sawine@0: set wildignore+=.hg,.git,.svn " Version control sawine@0: set wildignore+=*.aux,*.out,*.toc " LaTeX intermediate files sawine@0: set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg " binary images sawine@0: set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest " compiled object files sawine@0: set wildignore+=*.spl " compiled spelling word lists sawine@0: set wildignore+=*.sw? " Vim swap files sawine@0: set wildignore+=*.luac " Lua byte code sawine@0: set wildignore+=migrations " Django migrations sawine@0: set wildignore+=*.pyc " Python byte code sawine@0: set wildignore+=*.orig " Merge resolution files sawine@0: " Clojure/Leiningen sawine@0: set wildignore+=classes sawine@0: set wildignore+=lib sawine@0: sawine@0: " command sawine@0: set cmdheight=1 sawine@0: set history=500 sawine@0: sawine@0: " status line sawine@0: set laststatus=2 sawine@0: set statusline=%.50F " (almost) full path to file sawine@0: set statusline+=%= " align right sawine@0: set statusline+=%l/%L " line / total lines sawine@0: sawine@0: " indenting sawine@0: let &shiftwidth=indentspace sawine@0: let &tabstop=indentspace sawine@0: set expandtab sawine@0: let &softtabstop=indentspace sawine@0: set autoindent sawine@1: set textwidth=80 sawine@1: set colorcolumn=81 sawine@0: set formatoptions=qrn1 sawine@0: set wrap sawine@0: " highlight OverLength ctermbg=red ctermfg=white guibg=#592929 sawine@0: " match OverLength /\%80v.\+/ sawine@0: sawine@0: " misc sawine@0: set showmode sawine@0: set showcmd sawine@0: set hidden sawine@0: " set visualbell sawine@0: set cursorline sawine@1: set gcr=a:blinkwait0,a:block-cursor sawine@0: set ttyfast sawine@0: set ruler sawine@0: set backspace=indent,eol,start sawine@0: " set relativenumber sawine@0: set undofile sawine@0: au FocusLost * :wa sawine@0: " folding sawine@0: " set foldmethod=indent sawine@0: set lines=53 sawine@0: set columns=85 sawine@0: " mouse sawine@0: set mouse=a sawine@0: sawine@0: " encoding sawine@0: scriptencoding utf-8 sawine@0: sawine@0: " backups sawine@0: set undodir=~/.vim/tmp/undo// sawine@0: set backupdir=~/.vim/tmp/backup// sawine@0: set directory=~/.vim/tmp/swap// sawine@0: set backup sawine@0: set noswapfile sawine@0: sawine@0: " sawine@0: " syntax and colours sawine@0: " sawine@0: set guioptions-=m sawine@0: set guioptions-=T sawine@0: set guioptions-=r sawine@0: set guioptions-=R sawine@0: set guioptions-=l sawine@0: set guioptions-=L sawine@0: set guioptions-=b sawine@0: set nonumber sawine@0: set showmatch sawine@0: " Activate scheme sawine@0: colorscheme molokai sawine@0: syntax on sawine@0: sawine@0: if exists("loaded_headerguard") sawine@0: finish sawine@0: endif sawine@0: let loaded_headerguard = 1 sawine@0: sawine@0: sawine@0: " Save 'cpoptions' and set Vim default to enable line continuations. sawine@0: let s:save_cpoptions = &cpoptions sawine@0: set cpoptions&vim sawine@0: sawine@0: if ! exists("*g:HeaderguardName") sawine@0: function! g:HeaderguardName() sawine@0: return toupper(expand('%:t:gs/[^0-9a-zA-Z_]/_/g')) sawine@0: endfunction sawine@0: endif sawine@0: sawine@0: if ! exists("*g:HeaderguardLine1") sawine@0: function! g:HeaderguardLine1() sawine@0: return "#ifndef " . g:HeaderguardName() sawine@0: endfunction sawine@0: endif sawine@0: sawine@0: if ! exists("*g:HeaderguardLine2") sawine@0: function! g:HeaderguardLine2() sawine@0: return "#define " . g:HeaderguardName() sawine@0: endfunction sawine@0: endif sawine@0: sawine@0: if ! exists("*g:HeaderguardLine3") sawine@0: function! g:HeaderguardLine3() sawine@0: return "#endif /* " . g:HeaderguardName() . " */" sawine@0: endfunction sawine@0: endif sawine@0: sawine@0: function! s:HeaderguardAdd() sawine@0: " Test for empty filename. sawine@0: if expand('%') == "" sawine@0: echoerr "Empty filename (save file and try again)." sawine@0: return sawine@0: endif sawine@0: " Locate first, second, and last pre-processor directives. sawine@0: call cursor(1, 1) sawine@0: let s:poundLine1 = search('^#', "cW") sawine@0: let s:poundLine2 = search('^#', "W") sawine@0: call cursor(line("$"), col("$")) sawine@0: let s:poundLine3 = search('^#', "b") sawine@0: sawine@0: " Locate #ifndef, #define, #endif directives. sawine@0: call cursor(1, 1) sawine@0: let s:regex1 = '^#\s*ifndef\s\+\w\+\|' sawine@0: let s:regex1 .= '^#\s*if\s\+!\s*defined(\s*\w\+\s*)' sawine@0: let s:guardLine1 = search(s:regex1, "cW") sawine@0: let s:guardLine2 = search('^#\s*define', "W") sawine@0: call cursor(line("$"), col("$")) sawine@0: let s:guardLine3 = search('^#\s*endif', "b") sawine@0: sawine@0: " Locate #define of desired guardName. sawine@0: call cursor(1, 1) sawine@0: let s:guardDefine = search('^#\s*define\s\+' . sawine@0: \ g:HeaderguardName() . '\>', "cW") sawine@0: sawine@0: " If the candidate guard lines were found in the proper sawine@0: " location (the outermost pre-processor directives), they sawine@0: " are deemed valid header guards. sawine@0: if s:guardLine1 > 0 && s:guardLine2 > 0 && s:guardLine3 > 0 && sawine@0: \ s:guardLine1 == s:poundLine1 && sawine@0: \ s:guardLine2 == s:poundLine2 && sawine@0: \ s:guardLine3 == s:poundLine3 sawine@0: " Replace existing header guard. sawine@0: call setline(s:guardLine1, g:HeaderguardLine1()) sawine@0: call setline(s:guardLine2, g:HeaderguardLine2()) sawine@0: call setline(s:guardLine3, g:HeaderguardLine3()) sawine@0: " Position at new header guard start. sawine@0: call cursor(s:guardLine1, 1) sawine@0: sawine@0: elseif s:guardDefine > 0 sawine@0: echoerr "Found '#define " . g:HeaderguardName() . sawine@0: \ "' without guard structure" sawine@0: " Position at unexpected #define. sawine@0: call cursor(s:guardDefine, 1) sawine@0: sawine@0: else sawine@0: " No header guard found. sawine@0: call append(0, [ g:HeaderguardLine1(), g:HeaderguardLine2(), "" ]) sawine@0: call append(line("$"), ["", g:HeaderguardLine3()]) sawine@0: call cursor(1, 1) sawine@0: endif sawine@0: endfunction sawine@0: command! HeaderguardAdd call s:HeaderguardAdd() sawine@0: sawine@0: " Restore saved 'cpoptions'. sawine@0: let cpoptions = s:save_cpoptions sawine@0: " vim: sts=4 sw=4 tw=80 et ai: