~ piggybox /.vimrc

syntax on
set nocompatible
set history=400


"display trailing whitespace and tabs
highlight SpecialKey ctermfg=DarkGray
set list listchars=tab:\|_,trail:.

filetype plugin on
filetype indent on

"auto-change directory to current file
set autochdir

""Set to auto read when a file is changed from the outside
set autoread

let mapleader = ","

"fast editing vimrc
map <leader>s :source ~/.vimrc<cr>
map <leader>v :e! ~/.vimrc<cr>

"Fast saving
nmap <leader>w :w!<cr>

""color and font
colorscheme delek
set gfn=Monospace\ 11
set encoding=utf-8

"set cursorline
hi cursorline guibg=#333333 
hi CursorColumn guibg=#333333

autocmd BufEnter * :syntax sync fromstart

"omni menu color
hi Pmenu guibg=#333333
hi PmenuSel guibg=$555555 guifg=#ffffff

set encoding=utf-8

""pattern match color
hi MatchParen guifg=#000000 guibg=#D0D090

"Set 7 lines to the curors - when moving vertical..
set so=7
""show ruler
set ruler
"show line number
set nu
""dont redraw
set lz
"change buffer without saving
set hid

set backspace=eol,start,indent
"Bbackspace and cursor keys wrap to
set whichwrap+=<,>,h,l
set wrap

set magic
set mat=2

""highlight search results
set hlsearch
set incsearch

map ve :Vexplore<cr>
map te :VSTreeExplorer<cr>

"smart to move windows
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l

"buffer close
map <leader>bc :Bclose<cr>

""smart tab
map <right> :tabnext<cr>
map <left> :tabprev<cr>
map tn :tabnew %<cr>
map tc :tabclose<cr>
map tm :tabmove

"Use tab for opened buffer
set switchbuf=usetab
set stal=2

""Moving fast to front, back and 2 sides ;)
imap <m-$> <esc>$a
imap <m-0> <esc>0i
imap <D-$> <esc>$a
imap <D-0> <esc>0i

"Move a line of text using alt
nmap <M-j> mz:m+<cr>`z
nmap <M-k> mz:m-2<cr>`z
vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z
vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z

""Comfortable back indentation
inoremap <S-Tab> <C-D>

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Buffer realted
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Fast open a buffer by search for a name
map <c-q> :sb 

"Open a dummy buffer for paste
map <leader>q :e ~/buffer<cr>

"Restore cursor to file position in previous editing session
set viminfo='10,\"100,:20,%,n~/.viminfo
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif

" Buffer - reverse everything ... :)
map <F9> ggVGg?

" Don't close window, when deleting a buffer
command! Bclose call <SID>BufcloseCloseIt()

function! <SID>BufcloseCloseIt()
    let l:currentBufNum = bufnr("%")
    let l:alternateBufNum = bufnr("#")

    if buflisted(l:alternateBufNum)
        buffer #
    else
        bnext
    endif

    if bufnr("%") == l:currentBufNum
        new
    endif

    if buflisted(l:currentBufNum)
        execute("bdelete! ".l:currentBufNum)
    endif
endfunction

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Parenthesis/bracket expanding
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
vnoremap $1 <esc>`>a)<esc>`<i(<esc>
vnoremap $2 <esc>`>a]<esc>`<i[<esc>
vnoremap $3 <esc>`>a}<esc>`<i{<esc>
vnoremap $$ <esc>`>a"<esc>`<i"<esc>
vnoremap $q <esc>`>a'<esc>`<i'<esc>
vnoremap $w <esc>`>a"<esc>`<i"<esc>

"Map auto complete of (, ", ', [
inoremap $1 ()<esc>:let leavechar=")"<cr>i
inoremap $2 []<esc>:let leavechar="]"<cr>i
inoremap $4 {<esc>o}<esc>:let leavechar="}"<cr>O
inoremap $3 {}<esc>:let leavechar="}"<cr>i
inoremap $q ''<esc>:let leavechar="'"<cr>i
inoremap $w ""<esc>:let leavechar='"'<cr>i
au BufNewFile,BufRead *.\(vim\)\@! inoremap " ""<esc>:let leavechar='"'<cr>i
au BufNewFile,BufRead *.\(txt\)\@! inoremap ' ''<esc>:let leavechar="'"<cr>i

imap <m-l> <esc>:exec "normal f" . leavechar<cr>a
imap <d-l> <esc>:exec "normal f" . leavechar<cr>a

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Text options
" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set expandtab
set shiftwidth=4
"set foldmethod=indent
set softtabstop=4
set tabstop=4
"set backspace=4
set smarttab
set lbr
set tw=500
"smart indent
set si

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Plugin configuration
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""
" => Yank Ring
""""""""""""""""""""""""""""""
map <leader>y :YRShow<cr>

""""""""""""""""""""""""""""""
" => File explorer
""""""""""""""""""""""""""""""
"Split vertically
let g:explVertical=1

"Window size
let g:explWinSize=35

let g:explSplitLeft=1
let g:explSplitBelow=1

"Hide some files
let g:explHideFiles='^\.,.*\.class$,.*\.swp$,.*\.pyc$,.*\.swo$,\.DS_Store$'

"Hide the help thing..
let g:explDetailedHelp=0

""""""""""""""""""""""""""""""
" => Minibuffer
""""""""""""""""""""""""""""""
let g:miniBufExplModSelTarget = 0
let g:miniBufExplorerMoreThanOne = 0
let g:miniBufExplModSelTarget = 0
let g:miniBufExplUseSingleClick = 1
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplVSplit = 0
let g:miniBufExplSplitBelow=0

"WindowZ
map <c-w><c-t> :WMToggle<cr>

let g:bufExplorerSortBy = "name"


""""""""""""""""""""""""""""""
" => Tag list (ctags) 
""""""""""""""""""""""""""""""
"let Tlist_Ctags_Cmd = "/"
"let Tlist_Sort_Type = "name"
let Tlist_Show_Menu = 1
let Tlist_Use_Right_Window = 1
let Tlist_Auto_Open = 0 
let Tlist_Exit_OnlyWindow = 1
let Tlist_Use_SingleClick = 1
let Tlist_File_Fold_Auto_Close = 1
map <leader>t :Tlist<cr>

" Buffer explorer
map <leader>b :BufExplorer<cr>

" Rproject
map <leader>r :Rproject<cr>

" File explorer
map <leader>f :NERDTree<cr>

" Haskell syntax highlight
"let hs_highlight_boolean = 1
let hs_highlight_types = 1
let hs_highlight_more_types = 1
let hs_highlight_debug = 1
let hs_highlight_delimiters = 1


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Cope
" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" "Turn off search highlight
 map <silent> <leader><cr> :noh<cr>


 "Remove the Windows ^M
 noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm

 "Paste toggle - when pasting something in, don't indent.
 set pastetoggle=<F3>

 "Remove indenting on empty lines
 map <F2> :%s/\s*$//g<cr>:noh<cr>''

 "Super paste
 inoremap <C-v> <esc>:set paste<cr>mui<C-R>+<esc>mv'uV'v=:set nopaste<cr>

""Nice statusbar
set laststatus=2
set statusline=
set statusline+=%2*%-3.3n%0*\ " buffer number
set statusline+=%f\ " file name
set statusline+=%h%1*%m%r%w%0* " flag
set statusline+=[
if v:version >= 600
    set statusline+=%{strlen(&ft)?&ft:'none'}, " filetype
    set statusline+=%{&encoding}, " encoding
endif
set statusline+=%{&fileformat}] " file format
if filereadable(expand("$VIM/vimfiles/plugin/vimbuddy.vim"))
    set statusline+=\ %{VimBuddy()} " vim buddy
endif
set statusline+=%= " right align
"set statusline+=%2*0x%-8B\ " current char
""set statusline+=0x%-8B\ " current char
set statusline+=%-14.(%l,%c%V%)\ %<%P " offset

"HAML syntax color
au BufNewFile,BufRead *.haml set ft=ruby
"Nginx config syntax color
au BufRead,BufNewFile /etc/nginx/*.conf set ft=nginx