1
0
Fork 0
mirror of https://github.com/notwa/rc synced 2024-06-01 15:33:07 -07:00
rc/home/vimrc

295 lines
8.8 KiB
VimL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

" make vim unusable for anyone else
" from the get-go, we assume version >= 703
set nocompatible " screw vi
" hacks {{{1
if has('multi_byte')
scriptencoding utf-8 " allow it in this script
set termencoding=utf-8 " and this terminal supports it
set encoding=utf-8 " and the default file is in it
endif
if has("win32")
" assume directory structure:
" something/anything/.vimrc " this was passed to vim by the -u switch
" something/vim/
" something/vim/after
let $MYVIMRC=expand('<sfile>')
let g:rcvim=expand('<sfile>:p:h:h').'/vim'
else
let g:rcvim=$HOME.'/.vim'
endif
let &backupdir=g:rcvim.'/backup' " stash tilde files elsewhere
" the double slash at the end dumps the path of the file for uniqueness
let &directory=g:rcvim.'/swp//' " stash swap files too
let &undodir=g:rcvim.'/undo/' " undo files are cool
try | call mkdir(&backupdir, "p") | catch /E739/ | endtry
try | call mkdir(&directory, "p") | catch /E739/ | endtry
try | call mkdir(&undodir, "p") | catch /E739/ | endtry
" force colors on anything that looks reasonable
if (&term =~ "^xterm") || (&term == "screen")
let &t_Co=256
"let &t_AF="\e[38;5;%dm"
"let &t_AB="\e[48;5;%dm"
endif
" main config {{{1
if has('syntax')
syntax enable " required for folding as well
set hlsearch " highlight search results
endif
let g:python_highlight_builtin_funcs=1
if has('gui_running')
set guioptions-=M " skip loading $VIMRUNTIME/menu.vim
set guioptions-=m " hide menu which isn't loaded anyway
set guioptions-=T " hide toolbar
set guioptions-=r " hide scrollbar
if has("gui_gtk2")
set guifont=Consolas\ 11
else
set guifont=Consolas:h9
end
set columns=84
set lines=36
cd $HOME " might not be ideal...
endif
if has('title') | set title | endif " terminal title
set history=8192 " command lines to remember
set number " lines
set ruler " write out the cursor position
set showcmd " show number of lines/etc. selected
set lazyredraw " when executing macros, untyped things
set shortmess=atI " be less verbose and shut up vim
set suffixes=.bak,~,.swp,.o,.log,.out " lower tab-completion priority
set noerrorbells visualbell t_vb= " disable bells
set scrolloff=3 " row context during scrolling
set sidescrolloff=2 " col context during scrolling
set incsearch " show first search result as we type
set ignorecase " insensitive searching
set smartcase " except when uppercase is used
set infercase " use existing case when ins-completing
set tabstop=8 shiftwidth=8 smarttab " 8 space tabs
set virtualedit=block " allow cursor anywhere in visual block
set foldmethod=marker " (performance issues with other methods)
set foldlevelstart=99 " start with everything unfolded...?
let c_syntax_for_h=1 " use C highlighting for .h files
set nowrap " word wrapping is pretty weak in vim
set nojoinspaces " don't use double-spaces for J and gq
set ffs=unix,dos " ffs indeed
set nobomb " bombs are bad ok
set undofile " remember undos across files/sessions
set diffopt+=iwhite " ignore whitespace in diff command
set ttimeoutlen=50 " make changing modes a bit snappier
set hidden " allow swapping out of unsaved buffers
if has('mksession')
set sessionoptions=blank,buffers,curdir,options,folds,tabpages,winsize,resize,winpos
end
if has('wildignore')
" a bunch of stuff that may or may not do any good
set wildignore=""
set wildignore+=.git,.svn,.hg,pkg,tmp
set wildignore+=*.bak,*.tmp,*.log,*.cache,
set wildignore+=Desktop.ini,Thumbs.db,*.lnk,.DS_Store
set wildignore+=*.zip,*.tar,*.tar.*,
set wildignore+=*.suo,*.sln,*.pch,*.pdb,*.pgc,*.pgd
set wildignore+=*.o,*.obj,*.elf,*.lib,*.a,*.dll,*.so,*.so.*,*.exe,*.out
set wildignore+=*.png,*.jpg,*.jpeg,*.gif,*.pdf
set wildignore+=__pycache__,*.pyc,*.pyo,*.pyd,*.npy,*.npz,*.pkl
set wildignore+=*.gem,.bundle
set wildignore+=CMakeCache.txt,CMakeFiles,install_manifest.txt
set wildignore+=*.h5,*.npz
endif
" autocmd {{{1
fu! TabEight()
setlocal tabstop=8 shiftwidth=8 noexpandtab softtabstop=0
endf
fu! TabFour()
setlocal tabstop=8 shiftwidth=4 expandtab softtabstop=4
endf
fu! TabTwo()
setlocal tabstop=2 shiftwidth=2 expandtab
endf
" set TabFour as default
set tabstop=8 shiftwidth=4 expandtab softtabstop=4
if has('autocmd')
augroup tabs
au!
au BufRead,BufNewFile PKGBUILD call TabTwo()
au FileType ruby call TabTwo()
au FileType nim call TabTwo()
au BufRead,BufNewFile *.bt,*.1sc call TabFour()
au BufRead,BufNewFile *.ys call TabTwo()
au FileType javascript,processing call TabTwo()
augroup END
augroup whatever
au!
au BufRead,BufNewFile *.lib setlocal ft=spice
au BufRead,BufNewFile *.bt setlocal ft=c
au BufRead,BufNewFile *.1sc setlocal ft=c
au BufRead,BufNewFile *.asm setlocal ft=lips
au BufRead,BufNewFile *.nim setlocal ft=nim
au BufRead,BufNewFile *.pde setlocal ft=processing
augroup END
augroup nocomment
au!
au FileType * setlocal fo-=c fo-=r fo-=o
augroup END
augroup nobells " good lord vim you are archaic
au!
au GUIEnter * set vb t_vb=
augroup END
fu! ResCur() " attempt to preserve cursor position
if line("'\"") > 1 && line("'\"") <= line("$")
normal! g`"
return 1
endif
endf
augroup resCur
au!
au BufWinEnter * call ResCur()
augroup END
endif
" keys/binds {{{1
set backspace=eol,start,indent " make backspace useful
" tab completion in command-line
if has('wildmenu') | set wildmenu | endif
" easy indent/unindent
nn <tab> >>
nn <s-tab> <<
" indentation without ending selection
vn <silent> <tab> >gv
vn <silent> <s-tab> <gv
" might make return useful
"nn <s-cr> J
"nn <c-cr> dd
" oh wait, terminals don't do that...
fu! Inn(q)
" bind both normal and insert modes
let args=split(a:q, '^\s*\(<[^>]\+>\s\+\)\+\zs')
exec 'nn '.args[0].' '.args[1]
exec 'ino '.args[0].' <c-o>'.args[1]
endf
com! -nargs=+ Inn call Inn(<q-args>)
Inn <F5> :w<cr>
Inn <F8> :e<cr>
Inn <F10> :bd<cr>
Inn <c-F5> :w!<cr>
Inn <c-F8> :e!<cr>
Inn <c-F10> :bd!<cr>
Inn <s-F5> :wall<cr>
" np++ habits
Inn <c-up> <c-y>
Inn <c-down> <c-e>
Inn <silent> <c-s-up> :m-2<cr>
Inn <silent> <c-s-down> :m+1<cr>
Inn <silent> <c-s-PageUp> :tabm -1<cr>
Inn <silent> <c-s-PageDown> :tabm +1<cr>
" jump to top and bottom
Inn <c-Home> gg
Inn <c-End> G
nn <Esc>[1;5H gg
nn <Esc>[1;5F G
ino <Esc>[1;5H <c-o>gg
ino <Esc>[1;5F <c-o>G
" hide search highlighting
Inn <silent> <c-]> :nohls<enter>
" rebind annoying things
" reflow text
nn Q gq
vn Q gq
" split lines (opposite of J)
nn K i<cr><esc>k$
vn K <nop>
" follow tag
nn <bar> <c-]>
" delete line
"nn D dd
" execute vim code in visual selection
vmap <space> "xy:@x<cr>
" this frees up x and X for use if you like
set <s-Del>=[3;2~
Inn <s-Del> X
" unfollow your leaders
let leader="\\"
" no-op
nn <Leader><Leader> :<cr>
"ino <c-\> <C-o><Leader> " this doesn't workkkkkkkkk
nm <Leader>i i?<Esc>r
nm <Leader>a a?<Esc>r
nn <Leader>p "0p
nn <Leader>P "0P
nn <Leader>e :e **/*
nn <Leader>b :ls<cr>:b<space>
nn <silent> <Leader>d :cd %:p:h<cr>:pwd<cr>
nn <Leader>. @:
"nn <Leader>? :exec getline(".")
nn <Leader>, :Tab /,\zs<cr>
"nn <Leader>x :system('chmod +x %') | e
" via bit101
nn <Leader>f :E<cr>
nn <Leader>F :E .<cr>
" alias :W to :w, via https://stackoverflow.com/a/3879737
cnoreabbrev <expr> W ((getcmdtype() is# ':' && getcmdline() is# 'W')?('w'):('W'))
" misc {{{1
set list listchars=tab:»·,trail,extends:…,nbsp:‗
" including this in case i'm on a _really_ bad terminal:
"set list listchars=tab:>-,trail:.,extends:>,nbsp:_
try | execute pathogen#infect() | catch /E117/ | endtry
let g:netrw_banner=0
set background=dark
try
colorscheme property16
catch /E185/
colorscheme desert
endtry
" ctrlp {{{1
map <silent> <c-n> :CtrlPBuffer<cr>
let g:ctrlp_match_window='bottom,order:btt,min:1,max:24,results:24'
" machine-specific configs {{{1
let s:hostname=hostname()
if s:hostname == "phantom-pi" || s:hostname == "wraith"
colo Tomorrow-Night
endif