amix the lucky stiff(vimrc)

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"  Maintainer:  amix the lucky stiff
"             http://amix.dk - [email protected]
"
"  Version:  3.3 - 21/01/10 01:05:46
"
"  Blog_post:  
"       http://amix.dk/blog/post/19486#The-ultimate-vim-configuration-vimrc
"  Syntax_highlighted:
"       http://amix.dk/vim/vimrc.html
"  Raw_version:  
"       http://amix.dk/vim/vimrc.txt
"
"  How_to_Install:
"    $ mkdir ~/.vim_runtime
"    $ svn co svn://orangoo.com/vim ~/.vim_runtime
"    $ cat ~/.vim_runtime/install.sh
"    $ sh ~/.vim_runtime/install.sh <system>
"      <sytem> can be `mac`, `linux` or `windows`
"
"  How_to_Upgrade:
"    $ svn update ~/.vim_runtime
"
"  Sections:
"    -> General
"    -> VIM user interface
"    -> Colors and Fonts
"    -> Files and backups
"    -> Text, tab and indent related
"    -> Visual mode related
"    -> Command mode related
"    -> Moving around, tabs and buffers
"    -> Statusline
"    -> Parenthesis/bracket expanding
"    -> General Abbrevs
"    -> Editing mappings
"
"    -> Cope
"    -> Minibuffer plugin
"    -> Omni complete functions
"    -> Python section
"    -> JavaScript section
"
"  Plugins_Included:
"     > minibufexpl.vim - http://www.vim.org/scripts/script.php?script_id=159
"       Makes it easy to get an overview of buffers:
"           info -> :e ~/.vim_runtime/plugin/minibufexpl.vim
"
"     > bufexplorer - http://www.vim.org/scripts/script.php?script_id=42
"       Makes it easy to switch between buffers:
"           info -> :help bufExplorer
"
"     > yankring.vim - http://www.vim.org/scripts/script.php?script_id=1234
"       Emacs's killring, useful when using the clipboard:
"           info -> :help yankring
"
"     > surround.vim - http://www.vim.org/scripts/script.php?script_id=1697
"       Makes it easy to work with surrounding text:
"           info -> :help surround
"
"     > snipMate.vim - http://www.vim.org/scripts/script.php?script_id=2540
"       Snippets for many languages (similar to TextMate's):
"           info -> :help snipMate
"
"     > fuzzyfinder - http://www.vim.org/scripts/script.php?script_id=1984
"       Find files fast (similar to TextMate's feature):
"           info -> :help fuzzyfinder@en
"
"   Revisions:
"     > 3.3: Added syntax highlighting for Mako mako.vim
"     > 3.2: Turned on python_highlight_all for better syntax
"            highlighting for Python
"     > 3.1: Added revisions ;) and bufexplorer.vim
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => General
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Sets how many lines of history VIM has to remember
set  history =300

" Enable filetype plugin
filetype  plugin  on
filetype  indent  on

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

" With a map leader it's possible to do extra key combinations
" like <leader>w saves the current file
let  mapleader =  ","
let  g:mapleader =  ","

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

" Fast editing of the .vimrc
map  < leader > e :e! ~/.vim_runtime/vimrc< cr >

" When vimrc is edited, reload it
autocmd ! bufwritepost  vimrc source  ~/. vim_runtime/vimrc


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => VIM user interface
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Set 7 lines to the curors - when moving vertical..
set  so =7

set  wildmenu  "Turn on WiLd menu

set  ruler  "Always show current position

set  cmdheight =2 "The commandbar height

set  hid  "Change buffer - without saving

" Set backspace config
set  backspace =eol, start, indent
set  whichwrap +=< , > , h, l

set  ignorecase  "Ignore case when searching

set  hlsearch  "Highlight search things

set  incsearch  "Make search act like search in modern browsers

set  magic  "Set magic on, for regular expressions

set  showmatch  "Show matching bracets when text indicator is over them
set  mat =2 "How many tenths of a second to blink

" No sound on errors
set  noerrorbells
set  novisualbell
set  t_vb =


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Colors and Fonts
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax  enable  "Enable syntax hl

" Set font according to system
if  MySys ()  ==  "mac"
  set  gfn =Bitstream/ Vera/ Sans/ Mono: h13
  set  shell =/bin/bash
elseif  MySys ()  ==  "windows"
  set  gfn =Bitstream/ Vera/ Sans/ Mono: h10
elseif  MySys ()  ==  "linux"
  set  gfn =Monospace/ 10
  set  shell =/bin/bash
endif

if  has ( "gui_running" )
  set  guioptions -=T
  set  background =dark
  set  t_Co =256
  set  background =dark
  colorscheme  peaksea

  set  nu
else
  colorscheme  zellner
  set  background =dark
  
  set  nonu
endif

set  encoding =utf8
try
    lang  en_US
catch
endtry

set  ffs =unix, dos, mac "Default file types


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Files and backups
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Turn backup off, since most stuff is in SVN, git anyway...
set  nobackup
set  nowb
set  noswapfile


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Text, tab and indent related
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set  expandtab
set  shiftwidth =4
set  tabstop =4
set  smarttab

set  lbr
set  tw =500

set  ai  "Auto indent
set  si  "Smart indet
set  wrap  "Wrap lines

map  < leader > t2 :setlocal shiftwidth=2< cr >
map  < leader > t4 :setlocal shiftwidth=4< cr >
map  < leader > t8 :setlocal shiftwidth=4< cr >


""""""""""""""""""""""""""""""
" => Visual mode related
""""""""""""""""""""""""""""""
" Really useful!
"  In visual mode when you press * or # to search for the current selection
vnoremap  < silent >  * :call VisualSearch('f')< CR >
vnoremap  < silent >  # :call VisualSearch('b')< CR >

" When you press gv you vimgrep after the selected text
vnoremap  < silent >  gv :call VisualSearch('gv')< CR >
map  < leader > g :vimgrep // **/*.< left >< left >< left >< left >< left >< left >< left >


function ! CmdLine( str)
    exe  "menu Foo.Bar :"  .  a:str
    emenu  Foo. Bar
    unmenu  Foo
endfunction  

" From an idea by Michael Naumann
function ! VisualSearch( direction)  range
    let  l:saved_reg =  @"
    execute  "normal! vgvy"

    let  l:pattern =  escape ( @" , '///.*$^~[]' )
    let  l:pattern =  substitute ( l:pattern, "/n$" , "" , "" )

    if  a:direction  ==  'b'
        execute  "normal ?"  .  l:pattern .  "^M"
    elseif  a:direction  ==  'gv'
        call  CmdLine ( "vimgrep "  .  '/' .  l:pattern .  '/'  .  ' **/*.' )
    elseif  a:direction  ==  'f'
        execute  "normal /"  .  l:pattern .  "^M"
    endif

    let  @/ =  l :pattern
    let  @"  =  l :saved_reg
endfunction



"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Command mode related
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Smart mappings on the command line
cno  $h e ~/
cno  $d e ~/Desktop/
cno  $j e ./
cno  $c e < C- /> eCurrentFileDir("e")< cr >

" $q is super useful when browsing on the command line
cno  $q < C- /> eDeleteTillSlash()< cr >

" Bash like keys for the command line
cnoremap  < C-A >       < Home >
cnoremap  < C-E >       < End >
cnoremap  < C-K >       < C-U >

cnoremap  < C-P >  < Up >
cnoremap  < C-N >  < Down >

" Useful on some European keyboards
map  ½ $
imap  ½ $
vmap  ½ $
cmap  ½ $


func ! Cwd()
  let  cwd =  getcwd ()
  return  "e  " . cwd
endfunc

func ! DeleteTillSlash()
  let  g:cmd =  getcmdline ()
  if  MySys ()  ==  "linux"  ||  MySys ()  ==  "mac"
    let  g:cmd_edited =  substitute ( g:cmd, " // (.*/[//] // ).*" , " // 1" , "" )
  else
    let  g:cmd_edited =  substitute ( g:cmd, " // (.*/[ //// ] // ).*" , " // 1" , "" )
  endif
  if  g:cmd ==  g:cmd_edited
    if  MySys ()  ==  "linux"  ||  MySys ()  ==  "mac"
      let  g:cmd_edited =  substitute ( g:cmd, " // (.*/[//] // ).*/" , " // 1" , "" )
    else
      let  g:cmd_edited =  substitute ( g:cmd, " // (.*/[ //// /] // ).*/[ //// /]" , " // 1" , "" )
    endif
  endif   
  return  g:cmd_edited
endfunc

func ! CurrentFileDir( cmd)
  return  a:cmd  .  " "  .  expand ( "%:p:h" )  .  "/"
endfunc


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Moving around, tabs and buffers
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Map space to / (search) and c-space to ? (backgwards search)
map  < space >  /
map  < c-space >  ?
map  < silent >  < leader > < cr >  :noh< cr >

" Smart way to move btw. 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

" Close the current buffer
map  < leader > bd :Bclose< cr >

" Close all the buffers
map  < leader > ba :1,300 bd!< cr >

" Use the arrows to something usefull
map  < right >  :bn< cr >
map  < left >  :bp< cr >

" Tab configuration
map  < leader > tn :tabnew %< cr >
map  < leader > te :tabedit
map  < leader > tc :tabclose< cr >
map  < leader > tm :tabmove

" When pressing <leader>cd switch to the directory of the open buffer
map  < leader > cd :cd %:p:h< cr >


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

" Specify the behavior when switching between buffers
try
  set  switchbuf =usetab
  set  stal =2
catch
endtry


""""""""""""""""""""""""""""""
" => Statusline
""""""""""""""""""""""""""""""
" Always hide the statusline
set  laststatus =2

" Format the statusline
set  statusline =/ %F%m%r%h/ %w/ / CWD: / %r%{CurDir()}%h/ / / Line: / %l/%L: %c


function ! CurDir()
    let  curdir =  substitute ( getcwd() , '/Users/amir/' , "~/" , "g" )
    return  curdir
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  $e < esc > `>a"< esc > `<i"< esc >

" Map auto complete of (, ", ', [
inoremap  $1 ()< esc > i
inoremap  $2 []< esc > i
inoremap  $3 {}< esc > i
inoremap  $4 {< esc > o}< esc > O
inoremap  $q ''< esc > i
inoremap  $e ""< esc > i


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => General Abbrevs
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
iab  xdate < c-r > =strftime("%d/%m/%y %H:%M:%S")< cr >


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Editing mappings
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Remap VIM 0
map  0 ^

"Move a line of text using ALT+[jk] or Comamnd+[jk] on mac
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

if  MySys ()  ==  "mac"
  nmap  < D-j >  < M-j >
  nmap  < D-k >  < M-k >
  vmap  < D-j >  < M-j >
  vmap  < D-k >  < M-k >
endif

"Delete trailing white space, useful for Python ;)
func ! DeleteTrailingWS()
  exe  "normal mz"
  % s / /s/+$// ge
  exe  "normal `z"
endfunc
autocmd  BufWrite  *.py :call  DeleteTrailingWS ()


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Cope
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Do :help cope if you are unsure what cope is. It's super useful!
map  < leader > cc :botright cope< cr >
map  < leader > n :cn< cr >
map  < leader > p :cp< cr >


""""""""""""""""""""""""""""""
" => bufExplorer plugin
""""""""""""""""""""""""""""""
let  g:bufExplorerDefaultHelp= 0
let  g:bufExplorerShowRelativePath= 1


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

let  g:bufExplorerSortBy =  "name"

autocmd  BufRead ,BufNew  :call UMiniBufExplorer

map  < leader > u :TMiniBufExplorer< cr > :TMiniBufExplorer< cr >


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Omni complete functions
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd  FileType  css set  omnifunc =csscomplete#CompleteCSS


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Spell checking
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Pressing ,ss will toggle and untoggle spell checking
map  < leader > ss :setlocal spell!< cr >

"Shortcuts using <leader>
map  < leader > sn ]s
map  < leader > sp [s
map  < leader > sa zg
map  < leader > s? z=


""""""""""""""""""""""""""""""
" => Python section
""""""""""""""""""""""""""""""
au  FileType  python set  nocindent
let  python_highlight_all =  1
au  FileType  python syn  keyword  pythonDecorator True None False self

au  BufNewFile ,BufRead  *.jinja set  syntax =htmljinja
au  BufNewFile ,BufRead  *.mako set  ft =mako

au  FileType  python inoremap  < buffer >  $r return
au  FileType  python inoremap  < buffer >  $i import
au  FileType  python inoremap  < buffer >  $p print
au  FileType  python inoremap  < buffer >  $f #--- PH ----------------------------------------------< esc > FP2xi
au  FileType  python map  < buffer >  < leader > 1 /class
au  FileType  python map  < buffer >  < leader > 2 /def
au  FileType  python map  < buffer >  < leader > C ?class
au  FileType  python map  < buffer >  < leader > D ?def


""""""""""""""""""""""""""""""
" => JavaScript section
"""""""""""""""""""""""""""""""
au  FileType  javascript call  JavaScriptFold ()
au  FileType  javascript setl  fen
au  FileType  javascript setl  nocindent

au  FileType  javascript imap  < c-t >  AJS.log();< esc > hi
au  FileType  javascript imap  < c-a >  alert();< esc > hi

au  FileType  javascript inoremap  < buffer >  $r return
au  FileType  javascript inoremap  < buffer >  $f //--- PH ----------------------------------------------< esc > FP2xi

function ! JavaScriptFold()  
    setl  foldmethod =syntax
    setl  foldlevelstart =1
    syn region foldBraces start = /{ / end= /} / transparent fold  keepend extend

    function ! FoldText()
    return  substitute ( getline( v:foldstart) , '{.*' , '{...}' , '' )
    endfunction
    setl  foldtext =FoldText()
endfunction


""""""""""""""""""""""""""""""
" => Fuzzy finder
""""""""""""""""""""""""""""""
try
    call  fuf#defineLaunchCommand ( 'FufCWD' , 'file' , 'fnamemodify(getcwd(), ''%:p:h'')' )
    map  < leader > t :FufCWD **/< CR >
catch
endtry


""""""""""""""""""""""""""""""
" => Vim grep
""""""""""""""""""""""""""""""
let  Grep_Skip_Dirs =  'RCS CVS SCCS .svn generated'
set  grepprg =/bin/grep/ -nH


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => MISC
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Remove the Windows ^M - when the encodings gets messed up
noremap  < Leader > m mmHmt:%s/< C-V >< cr > //ge< cr > 'tzt'm

"Quickly open a buffer for scripbble
map  < leader > q :e ~/buffer< cr >

你可能感兴趣的:(amix the lucky stiff(vimrc))