Created
August 31, 2016 06:00
-
-
Save machuiwen/93cd81220b3524a494c5a2d390b2b194 to your computer and use it in GitHub Desktop.
Vim configuration file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
| " Maintainer: amix the lucky stiff | |
| " http://amix.dk - [email protected] | |
| " | |
| " 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 "搜索时忽略大小写 | |
| set smartcase | |
| set hlsearch "开启搜索高亮 | |
| set incsearch "输入搜索字符串的同时进行搜索 | |
| 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 "开启代码高亮 | |
| func! MySys() | |
| return "mac" | |
| endfunc | |
| " Set font according to system | |
| if MySys() == "mac" | |
| set gfn=SimSun:h16 | |
| 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 | |
| colorscheme laphp | |
| endif | |
| set number | |
| set encoding=utf-8 | |
| set fileencodings=utf-8,chinese,latin-1 | |
| source $VIMRUNTIME/delmenu.vim | |
| source $VIMRUNTIME/menu.vim | |
| 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{1}quot;, "", "") | |
| 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 | |
| """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
| " => short Tab Label | |
| """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
| set guitablabel=%{ShortTabLabel()} | |
| function ShortTabLabel () | |
| let bufnrlist = tabpagebuflist (v:lnum) | |
| let label = bufname (bufnrlist[tabpagewinnr (v:lnum) -1]) | |
| let filename = fnamemodify (label, ':t') | |
| return filename | |
| endfunction | |
| """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
| " => 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> | |
| """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
| " => tag list | |
| """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
| let Tlist_Ctags_Cmd="/usr/local/bin/ctags" | |
| let Tlist_Use_Right_Window=1 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment