The ultimate Vim configuration

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Maintainer: "       Amir Salihefendic"       http://amix.dk - [email protected]"" Version: "       5.0 - 29/05/12 15:43:36"" Blog_post: "       http://amix.dk/blog/post/19691#The-ultimate-Vim-configuration-on-Github"" Awesome_version:"       Get this config, nice color schemes and lots of plugins!""       Install the awesome version from:""           https://github.com/amix/vimrc"" Syntax_highlighted:"       http://amix.dk/vim/vimrc.html"" Raw_version: "       http://amix.dk/vim/vimrc.txt"" Sections:"    -> General"    -> VIM user interface"    -> Colors and Fonts"    -> Files and backups"    -> Text, tab and indent related"    -> Visual mode related"    -> Moving around, tabs and buffers"    -> Status line"    -> Editing mappings"    -> vimgrep searching and cope displaying"    -> Spell checking"    -> Misc"    -> Helper functions"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => General"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Sets how many lines of history VIM has to rememberset history=700" Enable filetype pluginsfiletype plugin onfiletype indent on" Set to auto read when a file is changed from the outsideset autoread" With a map leader it's possible to do extra key combinations" like <leader>w saves the current filelet mapleader = ","let g:mapleader = ","" Fast savingnmap <leader>w :w!<cr>"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => VIM user interface"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Set 7 lines to the cursor - when moving vertically using j/kset so=7" Turn on the WiLd menuset wildmenu" Ignore compiled filesset wildignore=*.o,*~,*.pyc"Always show current positionset ruler" Height of the command barset cmdheight=2" A buffer becomes hidden when it is abandonedset hid" Configure backspace so it acts as it should actset backspace=eol,start,indentset whichwrap+=<,>,h,l" Ignore case when searchingset ignorecase" When searching try to be smart about cases set smartcase" Highlight search resultsset hlsearch" Makes search act like search in modern browsersset incsearch" Don't redraw while executing macros (good performance config)set lazyredraw" For regular expressions turn magic onset magic" Show matching brackets when text indicator is over themset showmatch" How many tenths of a second to blink when matching bracketsset mat=2" No annoying sound on errorsset noerrorbellsset novisualbellset t_vb=set tm=500"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => Colors and Fonts"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Enable syntax highlightingsyntax enablecolorscheme desertset background=dark" Set extra options when running in GUI modeif has("gui_running")
    set guioptions-=T    set guioptions+=e    set t_Co=256    set guitablabel=%M\ %tendif" Set utf8 as standard encoding and en_US as the standard languageset encoding=utf8" Use Unix as the standard file typeset ffs=unix,dos,mac"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => Files, backups and undo"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Turn backup off, since most stuff is in SVN, git et.c anyway...set nobackupset nowbset noswapfile"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => Text, tab and indent related"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Use spaces instead of tabsset expandtab" Be smart when using tabs ;)set smarttab" 1 tab == 4 spacesset shiftwidth=4set tabstop=4" Linebreak on 500 charactersset lbrset tw=500set ai "Auto indentset si "Smart indentset wrap "Wrap lines""""""""""""""""""""""""""""""" => Visual mode related""""""""""""""""""""""""""""""" Visual mode pressing * or # searches for the current selection" Super useful! From an idea by Michael Naumannvnoremap <silent> * :call VisualSelection('f')<CR>vnoremap <silent> # :call VisualSelection('b')<CR>"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => Moving around, tabs, windows and buffers"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Treat long lines as break lines (useful when moving around in them)map j gjmap k gk" Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search)map <space> /map <c-space> ?" Disable highlight when <leader><cr> is pressedmap <silent> <leader><cr> :noh<cr>" Smart way to move between windowsmap <C-j> <C-W>jmap <C-k> <C-W>kmap <C-h> <C-W>hmap <C-l> <C-W>l" Close the current buffermap <leader>bd :Bclose<cr>" Close all the buffersmap <leader>ba :1,1000 bd!<cr>" Useful mappings for managing tabsmap <leader>tn :tabnew<cr>map <leader>to :tabonly<cr>map <leader>tc :tabclose<cr>map <leader>tm :tabmove" Opens a new tab with the current buffer's path" Super useful when editing files in the same directorymap <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/" Switch CWD to the directory of the open buffermap <leader>cd :cd %:p:h<cr>:pwd<cr>" Specify the behavior when switching between buffers try
  set switchbuf=useopen,usetab,newtab  set stal=2catchendtry" Return to last edit position when opening files (You want this!)autocmd BufReadPost *     \ if line("'\"") > 0 && line("'\"") <= line("$") |     \   exe "normal! g`\"" |     \ endif" Remember info about open buffers on closeset viminfo^=%""""""""""""""""""""""""""""""" => Status line""""""""""""""""""""""""""""""" Always show the status lineset laststatus=2" Format the status lineset statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => Editing mappings"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Remap VIM 0 to first non-blank charactermap 0 ^" Move a line of text using ALT+[jk] or Comamnd+[jk] on macnmap <M-j> mz:m+<cr>`znmap <M-k> mz:m-2<cr>`zvmap <M-j> :m'>+<cr>`<my`>mzgv`yo`zvmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`zif has("mac") || has("macunix")
  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 on save, useful for Python and CoffeeScript ;)func! DeleteTrailingWS()
  exe "normal mz"
  %s/\s\+$//ge
  exe "normal `z"endfuncautocmd BufWrite *.py :call DeleteTrailingWS()autocmd BufWrite *.coffee :call DeleteTrailingWS()"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => vimgrep searching and cope displaying"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" When you press gv you vimgrep after the selected textvnoremap <silent> gv :call VisualSelection('gv')<CR>" Open vimgrep and put the cursor in the right positionmap <leader>g :vimgrep // **/*.<left><left><left><left><left><left><left>" Vimgreps in the current filemap <leader><space> :vimgrep // <C-R>%<C-A><right><right><right><right><right><right><right><right><right>" When you press <leader>r you can search and replace the selected textvnoremap <silent> <leader>r :call VisualSelection('replace')<CR>" Do :help cope if you are unsure what cope is. It's super useful!"" When you search with vimgrep, display your results in cope by doing:"   <leader>cc"" To go to the next search result do:"   <leader>n"" To go to the previous search results do:"   <leader>p"map <leader>cc :botright cope<cr>map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pggmap <leader>n :cn<cr>map <leader>p :cp<cr>"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => Spell checking"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Pressing ,ss will toggle and untoggle spell checkingmap <leader>ss :setlocal spell!<cr>" Shortcuts using <leader>map <leader>sn ]smap <leader>sp [smap <leader>sa zgmap <leader>s? z="""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => Misc"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Remove the Windows ^M - when the encodings gets messed upnoremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm" Quickly open a buffer for scripbblemap <leader>q :e ~/buffer<cr>" Toggle paste mode on and offmap <leader>pp :setlocal paste!<cr>"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => Helper functions"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""function! CmdLine(str)
    exe "menu Foo.Bar :" . a:str
    emenu Foo.Bar    unmenu Fooendfunctionfunction! VisualSelection(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 == 'replace'
        call CmdLine("%s" . '/'. l:pattern . '/')
    elseif a:direction == 'f'
        execute "normal /" . l:pattern . "^M"
    endif

    let @/ = l:pattern    let @" = l:saved_regendfunction" Returns true if paste mode is enabledfunction! HasPaste()
    if &paste        return 'PASTE MODE  '
    en
    return ''endfunction" Don't close window, when deleting a buffercommand! 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)
   endifendfunction


http://amix.dk/vim/vimrc.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章