.vimrc

Wed, 27 Nov 2019 13:40:23 -0600

author
Meredith Howard <mhoward@roomag.org>
date
Wed, 27 Nov 2019 13:40:23 -0600
branch
mhoward-lt
changeset 834
fc9b092f10f7
parent 167
efbe6857dc96
child 178
47bbb9255d78
permissions
-rw-r--r--

Close

" 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."
      if on_windows == 1
        echo " http://chocolatey.org "
      endif
      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 'bling/vim-bufferline'

  Plugin 'editorconfig/editorconfig-vim'

  Plugin 'Shougo/vimproc.vim'
  Plugin 'Shougo/unite.vim'
  Plugin 'Shougo/vimshell.vim'
  Plugin 'Shougo/vimfiler.vim'
  Plugin 'sjl/gundo.vim'
  Plugin 'majutsushi/tagbar'
  Plugin 'godlygeek/tabular'
  Plugin 'tomtom/tcomment_vim'
  Plugin 'tpope/vim-unimpaired'
  Plugin 'tpope/vim-endwise'

  Plugin 'Shougo/neocomplcache.vim'
  Plugin 'c9s/perlomni.vim'
  Plugin 'rking/ag.vim'

  Plugin 'tpope/vim-fugitive'
  Plugin 'ludovicchabant/vim-lawrencium'
  Plugin 'mhinz/vim-signify'

  Plugin 'danchoi/ri.vim'
  Plugin 'vim-ruby/vim-ruby'
  Plugin 'vim-perl/vim-perl'
  Plugin 'yko/mojo.vim'


  try
    if on_windows == 1
      source ~/_vimrc.local-pre
    else
      source ~/.vimrc.local-pre
    endif
  catch
  endtry

  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 -auto-resize -here buffer<CR>
nmap <silent> <S-F1> :Unite -winheight=5 -quick-match -short-source-names window tab:no-current<CR>
nmap <silent> <F2> :VimFilerExplorer<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
" only :noh seems smart to do.
"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>

" faster window nav
nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l
"}}}


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

set encoding=utf-8

set hlsearch
set ignorecase
set smartcase

if has('gui_running') || $LANG =~ 'UTF-8'
  set listchars=tab:⇥·,trail:·
  " eol:↩   not as useful as trail i think
  set fillchars=fold:∷,vert:│
endif

if exists('&breakindent')
  set bri
  set briopt+=sbr
endif

set virtualedit=block

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

set backspace=indent,eol,start

" set number
set scrolloff=4
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

" Enable enhanced % matching in ruby
runtime macros/matchit.vim

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

" Never open with folds collapsed
set nofoldenable

set linebreak
set showbreak=»\ 

" 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

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

endif

if on_windows == 1
  set guifont=DejaVu_Sans_Mono:h10:cDEFAULT
  set linespace=0
else
  set guifont=DejaVu\ Sans\ Mono\ 10
endif

set guioptions-=T    "disable toolbar and menu
set guioptions-=m
set guioptions-=t    "disable tearoffs

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
" }}}


" Autocmds  {{{
augroup vimrc
  autocmd!

  " you have to go out of your way to make this stick
  autocmd BufNewFile,BufRead * setlocal formatoptions-=ro

  autocmd FileType text setlocal textwidth=78
  autocmd FileType perl call PerlSettings()

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

  " simple strip trailing whitespace on save
  "autocmd BufWritePre *.pl,*.rb,*.js,*.css,*.md :%s/\s+$//e

augroup END
"}}}


" Perl type-specific settings  {{{

function! PerlSettings ()
  compiler perl
  " even with g:perl_compiler_force_warnings = 0, perl -w is used and
  " that's just noisy with intentional no-warnings blocks out there

  setlocal makeprg=perl\ -c\ %\ $*
endfunction

" perl fold scanning is slow
"let perl_fold = 1           
let perl_include_pod = 1
" workaround for experimental signatures
let perl_no_subprototype_error = 1

" }}}


" Plugin settings  {{{

">> Gundo
" I prefer python3 on windows if I have to use it. Needs a dll in path.
if on_windows == 1
  let g:gundo_prefer_python3=1
endif


">> Tagbar
if on_windows == 1
  if executable('ctags') == 0
    " if i haven't installed from chocolatey...
    let g:tagbar_ctags_bin = 'C:\Users\mhoward\bin\ctags.exe'
  endif
endif

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

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


">> vimfiler
let g:vimfiler_as_default_explorer = 1
" double-click to edit
autocmd FileType vimfiler nmap <buffer> <2-LeftMouse> <Plug>(vimfiler_edit_file)


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

"keep bufferline from writing into the command line
let g:bufferline_echo = 0


">> Signify
let g:signify_disable_by_default = 1
let g:signify_vcs_list = [ 'git', 'hg' ]

let g:signify_mapping_next_hunk = '<leader>gj'
let g:signify_mapping_prev_hunk = '<leader>gk'
let g:signify_mapping_toggle = '<leader>gt'


">> neocomplcache
" Disable AutoComplPop.
let g:acp_enableAtStartup = 0

" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1
let g:neocomplcache_enable_smart_case = 1
let g:neocomplcache_min_syntax_length = 3

if !exists('g:neocomplcache_omni_patterns')
  let g:neocomplcache_omni_patterns = {}
endif

"Required to get ruby omni
let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
"Enabling the below allows module completion from CPAN, jeez
" let g:neocomplcache_omni_patterns.perl = '\h\w*->\h\w*\|\h\w*::'

" }}}


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

if has('gui_running')
  set number
  set background=dark

  set guicursor+=a:blinkwait1000-blinkon1200-blinkoff250

  if on_windows == 1
    " generally have a tiling wm on linux
    set columns=120 lines=40
  end

  colorscheme jellybeans
else

  if $TERM =~ 'screen'
    if $TERM == 'screen-bce'
      "if i'm not screen-bce, i'm not sure i have a good .screenrc in place
      set t_Co=256
    endif

    set mouse=a
  endif

  if $TERM =~ 'rxvt-unicode'
    set ttymouse=urxvt
    set mouse=a
    map <Esc>[7~ <Home>
    map <Esc>[8~ <End>
  endif

  if &t_Co == 256
    colorscheme jellybeans
  end

end

mercurial