.vimrc

Fri, 06 Jun 2014 23:04:28 -0400

author
Meredith Howard <mhoward@roomag.org>
date
Fri, 06 Jun 2014 23:04:28 -0400
branch
mhoward-lt
changeset 24
a2483b35192d
parent 20
2f4b8d3efd1d
child 72
d1ae56d8fdc4
permissions
-rw-r--r--

Further X session setup

" vim: et sts=2 sw=2
" vim: fdm=marker

set nocompatible

let on_windows=0
if has('win32') || has('win64') 
  " vim in cygwin has win32 = 0 and win32unix = 1
  let on_windows=1
end


" Set up Vundle and plugins  {{{
  let installed_vundle=0

  if on_windows == 0
    let vundle_readme=expand('~/.vim/bundle/vundle/README.md')
  else
    let vundle_readme=expand('~/vimfiles/bundle/vundle/README.md')
  endif

  if !filereadable(vundle_readme)
    if !executable('git')
      echo "You probably want git installed and in PATH"
      quit
    endif

    let installed_vundle=1
    if on_windows == 0
      echo "Installing Vundle..."
      echo ""
      silent !mkdir -p ~/.vim/bundle
      silent !git clone https://github.com/gmarik/vundle ~/.vim/bundle/vundle
    else
      echo "Installing Vundle and Plugins..."
      " This happens in a series of minimized cmd windows rather than the cool
      " progress display we normally get.

      " Also windows is weird about args and quoting:
      silent execute '!mkdir "'. $HOME .'\vimfiles\bundle"'
      silent execute '!git clone https://github.com/gmarik/vundle "'. $HOME .'\vimfiles\bundle\vundle"'
    endif
  endif

  if on_windows == 0
    set rtp+=~/.vim/bundle/vundle/
    call vundle#rc()
  else
    set rtp+=~/vimfiles/bundle/vundle/
    call vundle#rc('~/vimfiles/bundle')
  endif

  Plugin 'gmarik/vundle'

  Plugin 'altercation/vim-colors-solarized'
  Plugin 'bling/vim-airline'

  Plugin 'Shougo/vimproc.vim'
  Plugin 'Shougo/unite.vim'
  Plugin 'Shougo/vimshell.vim'
  Plugin 'sjl/gundo.vim'
  Plugin 'majutsushi/tagbar'
  Plugin 'godlygeek/tabular'
  Plugin 'tomtom/tcomment_vim'

  Plugin 'danchoi/ri.vim'
  Plugin 'tpope/vim-fugitive'
  Plugin 'ludovicchabant/vim-lawrencium'

  if installed_vundle == 1
    echo "Installing Plugins, please ignore key map error messages"
    echo ""
    :PluginInstall
    if on_windows == 1
      " Windows build just isn't there with exec $0, so we already
      " have some odd errors and get a weird UI at the end.
      echo "Please restart vim to continue with plugins installed."
      quit
    endif
  endif
" }}}


" Key maps, mostly plugin stuff on F-keys  {{{
nmap <silent> <F1> :Unite buffer<CR>
nmap <silent> <F2> :Unite file<CR>
nmap <silent> <F3> :VimShell<CR>
map  <silent> <F4> :noh<CR>
nmap <silent> <F5> :GundoToggle<CR>
nmap <silent> <F8> :TagbarToggle<CR>

" This is supposed to get a CtrlP workalike with fuzzy match
" but i need to fix ignores and always chdir to a good place
if on_windows == 1
  nmap <silent> <S-F2> :Unite -start-insert file_rec:!<CR>
else
  nmap <silent> <S-F2> :Unite -start-insert file_rec/async:!<CR>
endif

" F-n keys call out to normal mode from insert mode
imap <F1> <C-O><F1>
imap <F2> <C-O><F2>
"imap <F3> <C-O><F3>
imap <F4> <C-O><F4>
imap <F5> <C-O><F5>
"imap <F6> <C-O><F6>
"imap <F7> <C-O><F7>
imap <F8> <C-O><F8>

" chdir to the directory of the open buffer
map <leader>cd :cd %:p:h<cr>:pwd<cr>

map <leader>pp :setlocal paste!<cr>
"}}}


" General settings  {{{
syntax on
filetype plugin indent on

set enc=utf-8

set hlsearch
set ic smartcase

set lcs=tab:→·,trail:·

set ve=block

set autoindent
set expandtab
set shiftwidth=2
set softtabstop=2

set backspace=indent,eol,start

"set nu
set scrolloff=2
set ruler
set showcmd
set wildmenu

" Ignore compiled files and repositories
set wildignore=*.o,*~,*.pyc
if on_windows == 1
    set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
else
    set wildignore+=.git\*,.hg\*,.svn\*
endif

" Don't assume to scan includes when autocompleting
set cpt-=i

" Never open with folds collapsed
set nofoldenable

set lbr
set sbr=»\ 

" Superseded by vim-airline
"set statusline=%f%m%r%h%w\ %y\ %=%l,%c\ %p%%\ %L
set laststatus=2

if on_windows == 1
  let $MYVIM=$HOME.'/vimfiles'

  if !filewritable( $MYVIM . '/var' )
    silent execute '!mkdir "'.$HOME.'\vimfiles\var"'
  endif
  if !filewritable( $MYVIM. '/var/backup' )
    silent execute '!mkdir "'.$HOME.'\vimfiles\var\backup"'
  endif
  if !filewritable( $MYVIM . '/var/tmp' )
    silent execute '!mkdir "'.$HOME.'\vimfiles\var\tmp"'
  endif
  if !filewritable( $MYVIM . '/var/undo' )
    silent execute '!mkdir "'.$HOME.'\vimfiles\var\undo"'
  endif

  set guifont=Consolas:h11
  set guioptions-=t    "just disable tearoffs
else
  let $MYVIM=$HOME.'/.vim'

  if !filewritable( $MYVIM . '/var/backup' )
    silent execute '!mkdir -p "'.$MYVIM.'/var/backup"'
  endif
  if !filewritable( $MYVIM . '/var/tmp' )
    silent execute '!mkdir "'.$MYVIM.'/var/tmp"'
  endif
  if !filewritable( $MYVIM . '/var/undo' )
    silent execute '!mkdir "'.$MYVIM.'/var/undo"'
  endif

  set guifont=Droid\ Sans\ Mono\ Slashed\ 10
  set guioptions-=T     " disable toolbar and menu
  set guioptions-=m
endif

set backupdir=$MYVIM/var/backup//,.
set directory=$MYVIM/var/tmp//,.

set backup
set autowrite

if has('persistent_undo')
  set undofile
  set undodir=$MYVIM/var/undo//,.
end
" }}}


" File type-specific settings  {{{
autocmd FileType text setlocal textwidth=78

function! PerlSettings ()
  setlocal keywordprg=perldoc\ -f
  setlocal makeprg=perl\ -c\ %\ $*
  setlocal errorformat=%m\ at\ %f\ line\ %l
endfunction

autocmd FileType perl call PerlSettings()

" preload templates into new buffers by file extension
"autocmd BuffNewFile * silent! 0r $MYVIM/templates/%:e.template

" strip trailing whitespace on save
"autocmd BufWritePre * :%s/\s+$//e

" perl fold scanning is slow
"let perl_fold = 1           
let perl_include_pod = 1
" }}}


" Plugin settings  {{{
" > Gundo
" I prefer python3 on windows if I have to use it.
if on_windows == 1
  let g:gundo_prefer_python3=1
endif

" > Tagbar
if on_windows == 1
  let g:tagbar_ctags_bin = 'C:\Users\mhoward\bin\ctags.exe'
endif

let g:tagbar_autoclose = 1
let g:tagbar_autofocus = 1
let g:tagbar_compact = 1

let g:tagbar_type_perl = {
    \ 'kinds' : [
        \ 'p:packages:1:0',
        \ 'e:extends',
        \ 'r:roles',
        \ 'c:constants:0:0',
        \ 'f:formats:0:0',
        \ 'a:attributes',
        \ 's:subroutines',
        \ 'l:labels',
    \ ],
    \ 'deffile' : '$MYVIM/ctags/perl.cnf'
\ }


" > Unite
call unite#filters#matcher_default#use(['matcher_fuzzy'])
call unite#filters#sorter_default#use(['sorter_rank'])
let g:unite_source_history_yank_enable = 1

if executable('ag')
  let g:unite_source_grep_command = 'ag'
  let g:unite_source_grep_default_opts = '--nogroup --nocolor --column'
  let g:unite_source_grep_recursive_opt = ''
endif

" > Airline
let g:airline#extensions#whitespace#enabled = 0
" }}}


" Local stuff, finish up
try
  if on_windows == 1
    source ~/_vimrc.local
  else
    source ~/.vimrc.local
  endif
catch
endtry

if has('gui_running')
  set nu
  set bg=dark

  set columns=120 lines=40

  colorscheme solarized
else
  if &t_Co == 256
    colorscheme jellybeans
  end
end

mercurial