filetype off " required set ttyfast source vimrc.plugins.vim source vimrc.functions.vim for f in split(glob('vimrc.d/*.vim'), '\n') exe 'source' f endfor " #settings{{{ " set t_Sf=[3%p1%dm " foreground colour if &term == 'xterm-256color' set termguicolors endif syntax on colorscheme customred256 set guioptions-=mTrLb set guioptions+=c " set t_Sb=[4%p1%dm " background coloru set updatetime=100 set backupdir=~/.vimtmp set directory=~/.vimtmp set tags+=./.tags,.tags;/home/ray/ " persisitent undo file set undodir=/home/ray/.vim/undodir set undofile set clipboard=unnamedplus set ignorecase set smartcase set wildmenu set wildmode=longest:full,full set hidden set background=dark set number relativenumber set hlsearch set foldcolumn=1 set iskeyword+=- set scrolloff=10 set showcmd set incsearch set laststatus=2 set foldmethod=manual set showmode set autoindent set breakindent set showbreak=↳ set mouse=a set listchars=eol:¬,tab:->,trail:~,extends:>,precedes:<,space:· set textwidth=180 set formatoptions=cq set wrapmargin=0 "}}} " key #mappings{{{ let g:mapleader = "\" nnoremap rc :so $MYVIMRC " Focus on current fold, close the rest nnoremap zz zMzvzz " replace current word with last yanked/deleted text nnoremap rr "_diwP " replace current word with last yanked text nnoremap ry diw"0P inoremap jk nnoremap A :call CheckLineEnding() nnoremap co :!clear; nnoremap gs :!clear; echo 'git status'; git status nnoremap gd :!clear; echo 'git diff'; git diff nnoremap ga :!clear; git add %; git status nnoremap gA :!clear; git add .; git status nnoremap gc :!clear; git commit -m '' nnoremap gg :!clear; git add %; git commit -m '' nnoremap gp :!clear; echo 'git push'; git push nnoremap gl :!clear; git log " netrw nnoremap ex :Ex nnoremap ee :e . nnoremap eq :Rex " better window navigaton nnoremap h nnoremap l nnoremap k nnoremap j nnoremap j :resize -5 nnoremap k :resize +5 nnoremap l :vertical resize +5 nnoremap h :vertical resize -5 nnoremap = = "location list and quickfix mappings nnoremap ll :botright lwindow nnoremap lp :lprev nnoremap ln :lnext nnoremap lc :lclose nnoremap llh :lhistory nnoremap llp :lolder nnoremap lln :lnewer nnoremap qf :botright cwindow nnoremap qp :cprev nnoremap qn :cnext nnoremap qc :cclose nnoremap qfh :chistory nnoremap qfp :colder nnoremap qfn :cnewer nnoremap nh :noh " quick grep of visual selection vnoremap gr y:grep! -R " . " open quickfix window of TODOs nnoremap td :grep! -R '// *TODO' .:botright cwindow:echo len(getqflist()) 'TODOs' " brace/quotes completion inoremap {{ {} inoremap { {}O inoremap {; {};O inoremap }} {{}} inoremap (( () inoremap (; (); inoremap [[ [] inoremap [ []O inoremap "" "" inoremap "; ""; inoremap '' '' inoremap '; ''; inoremap ;; ; nnoremap nn :set invrelativenumber nnoremap hl :nohlsearch " devdocs mapping nnoremap dd :DD "}}} " #abbreviations{{{ iabbrev adn and iabbrev waht what iabbrev tehn then "}}} " #autocommands{{{ " persistent folds augroup AutoSaveFolds autocmd! autocmd BufWritePost *.* mkview autocmd BufWinEnter *.* silent loadview augroup END " fix higlight problems such as vertical-align etc augroup VimCSS3Syntax autocmd! autocmd FileType css setlocal iskeyword+=- augroup END " Show trailing whitepace and spaces before a tab: augroup whitespaceerrors autocmd Syntax * syn match ExtraWhitespace /\s\+$\| \+\ze\t/ containedin=ALL augroup END " automatically reload if color scheme file written augroup coloreload au! au BufWritePost customred256.vim so $MYVIMRC augroup end augroup linenumbering autocmd InsertEnter * :set norelativenumber autocmd InsertLeave * :set number relativenumber autocmd WinEnter * :set number relativenumber autocmd WinLeave * set norelativenumber augroup END augroup colorcolumns autocmd WinEnter * set colorcolumn=80 autocmd WinLeave * set colorcolumn=0 augroup END " Automatically reload .vimrc if chanaged augroup myvimrc au! au BufWritePost .vimrc,_vimrc,vimrc,.gvimrc,_gvimrc,gvimrc so $MYVIMRC | if has('gui_running') | so $MYGVIMRC | endif augroup END "}}} " #functions{{{ " TODO better name function! GetStatusFrag(condition, colorname, conditionprefix, text) abort "{{{ let l:frag='%#' . a:colorname . '#' let l:frag.=a:conditionprefix let l:frag.='%{(' . a:condition . ")?'" . a:text . "':''}" return l:frag endfunction"}}} function! CheckLineEnding() abort "{{{ :normal $ if getline('.')[col('.')-1] == ';' || getline('.')[col('.')-1] == ',' :startinsert else :startinsert! endif endfunction"}}} " get name of syntax item function! SyntaxItem() abort "{{{ return synIDattr(synID(line('.'),col('.'),1),'name') . ' -> ' . synIDattr(synIDtrans(synID(line('.'),col('.'),1)), 'name' ) endfunction nnoremap p :echom SyntaxItem()"}}} " devdocs DD " https://gist.github.com/romainl/8d3b73428b4366f75a19be2dad2f0987#file-devdocs-vim function! s:Get_env() abort "{{{ if has('win64') || has('win32') || has('win16') return 'WINDOWS' else return toupper(substitute(system('uname'), '\n', '', '')) endif endfunction " What command to use on what system let s:cmds = {'DARWIN': 'open', 'LINUX': 'qutebrowser', 'WINDOWS': 'start'} " Build the URL stub let s:stub = s:cmds[Get_env()] . " 'http://devdocs.io/?q=" command! -nargs=* DD silent! call system(len(split(, ' ')) == 0 ? \ s:stub . &ft . ' ' . expand('') . "'" : len(split(, ' ')) == 1 ? \ s:stub . &ft . ' ' . . "'" : s:stub . . "'") "}}} " use ranger as file manager if !exists('*RangerExplorer') "{{{ function RangerExplorer() abort exec 'silent !ranger --choosefile=/tmp/vim_ranger_current_file ' . expand('%:p:h') if filereadable('/tmp/vim_ranger_current_file') exec 'edit ' . system('cat /tmp/vim_ranger_current_file') call system('rm /tmp/vim_ranger_current_file') endif redraw! endfun map ra :call RangerExplorer() endif"}}} function! GetLinterStatus(key) abort "{{{ let l:linter = ale#statusline#Count(bufnr('')) return l:linter[a:key] endfunction "}}} "}}} " vim: foldmethod=marker