史上最强的vim配置文件.vimrc

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Maintainer: amix the lucky stiff
"              http://amix.dk - amix@amix.dk
"
" Version: 3.6 - 25/08/10 14:40:30
"
" 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_on_Unix:
"     $ 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
"
"      > mru.vim - http: // www.vim.org / scripts / script.php ? script_id = 521
"        Plugin to manage Most Recently Used (MRU) files:
"            info -> :e ~ / .vim_runtime / plugin / mru.vim
"
"      > Command - T - http: // www.vim.org / scripts / script.php ? script_id = 3025
"        Command-T plug-in provides an extremely fast, intuitive mechanism for opening filesa:
"            info -> :help CommandT
"            screencast and web-help -> http://amix.dk/blog/post/19501
"
"
"   Revisions:
"      > 3.6: Added lots of stuff (colors, Command-T, Vim 7.3 persistent undo etc.)
"      > 3.5 : Paste mode is now shown in status line  if you are in paste mode
"      > 3.4: Added mru.vim
"      > 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=700

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

set hlsearch
" Highlight search things

set incsearch
" Make search act like search in modern browsers
set nolazyredraw
" Don't redraw while executing macros

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=
set tm=500


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

" Set font according to system
if MySys() == " mac "
  set gfn
= Menlo:h14
  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 t_Co
= 256
  set background
= dark
  colorscheme peaksea
  set nonu
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, backups and undo
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Turn backup off, since most stuff is in SVN, git anyway...
set nobackup
set nowb
set noswapfile

" Persistent undo
try
   
if MySys() == " windows "
      set undodir
= C:/Windows/Temp
   
else
      set undodir
= ~ / .vim_runtime / undodir
    endif

    set undofile
catch
endtry


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


""""""""""""""""""""""""""""""
" => 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
= / % {HasPaste()} % 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

function ! HasPaste()
   
if & paste
       
return 'PASTE MODE  '
   
else
       
return ''
    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
$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
inoremap
$t < > <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()

set guitablabel=%t


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => 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
map <leader
> o :BufExplorer<cr >


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


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


""""""""""""""""""""""""""""""
" => MRU plugin
""""""""""""""""""""""""""""""
let MRU_Max_Entries = 400
map <leader>f :MRU<CR>


""""""""""""""""""""""""""""""
" => Command - T
""""""""""""""""""""""""""""""
let g:CommandTMaxHeight
= 15
set wildignore
+=* .o, * .obj,.git, * .pyc
noremap <leader
> j :CommandT<cr >
noremap <leader
> y :CommandTFlush<cr >


""""""""""""""""""""""""""""""
" => 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 >
au BufRead,BufNewFile ~
/ buffer iab <buffer > xh1 ===========================================

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

map <leader
> bb :cd ..<cr >
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值