s90198123 / vimfiles

vim modern ide for web dev: command-t, easymotion, matchit, neocomplcache, snipmate, surround, yankring, nerdtree, bufexplorer, autojump, minibufexpl, fugitive, tagbar, rails, play! framework
8 stars 0 forks source link

[better vimrc] merge janus and vgod's vimrc #11

Open s90198123 opened 12 years ago

s90198123 commented 12 years ago

https://github.com/carlhuda/janus

https://github.com/vgod/vimrc

s90198123 commented 12 years ago
"call pathogen#runtime_append_all_bundles() 

"call pathogen#helptags()

" General Settings

set nocompatible    " not compatible with the old-fashion vi mode

set history=50      " keep 50 lines of command line history
set wrap linebreak nolist
set linespace=4         " add some line space for easy reading
set ruler       " show the cursor position all the time
set autoread        " auto read when file is changed from outside
set number              " add line numbers
set showbreak=...
set guioptions-=T       " turn off needless toolbar on gvim/mvim

set backspace=indent,eol,start

set scrolloff=3
set sidescrolloff=7
set sidescroll=1

set hidden " hide buffers when not displayed

set ttymouse=xterm2 " some stuff to get the mouse going in term

syntax on
set hlsearch

filetype on
filetype indent on
filetype plugin on    " Enable filetype-specific plugins

" Color scheme, term color and font setting
set t_Co=256
colorscheme candycode
set cursorline 

if has("gui_running")
   set guitablabel=%M%t
   set lines=40
   set columns=115

   if has("gui_gnome")
      set term=gnome-256color
      set guifont=Monospace\ Bold\ 10
   endif

   if has("gui_mac") || has("gui_macvim")
      set guifont=Menlo:h14
   endif

   if has("gui_win32") || has("gui_win32s")
      set guifont=Consolas:h12
      set enc=utf-8
   endif
else
   "dont load csapprox if there is no gui support - silences an annoying warning
   let g:CSApprox_loaded = 1

   "set railscasts colorscheme when running vim in gnome terminal
   "if $COLORTERM == 'gnome-terminal'
   " set term=gnome-256color
   " colorscheme railscasts
   "else
   " colorscheme default
   "endif
endif

set clipboard=unnamed   " yank to the system register '(*)' by default
set showmatch       " Cursor shows matching ')' and '}'
set showcmd     "show incomplete cmds down the bottom
set showmode        " Show current mode

"folding settings
set foldmethod=indent   "fold based on indent
set foldnestmax=3       "deepest fold is 3 levels
set nofoldenable        "dont fold by default

set wildchar=<TAB>  " start wild expansion in the command line using <TAB>
set wildmenu            " wild char completion menu

" ignore these files while expanding wild chars
set wildignore=*.o,*.class,*.pyc,*.obj,*~

set autoindent      " auto indentation
set incsearch       " incremental search
set nobackup        " no *~ backup files
set copyindent      " copy the previous indentation on autoindenting
set ignorecase      " ignore case when searching
set smartcase       " ignore case if search pattern is all lowercase,case-sensitive otherwise
set smarttab        " insert tabs on the start of a line according to context

" disable sound on errors
set noerrorbells
set novisualbell
""set t_vb=
set tm=500

" TAB setting{
set expandtab        "replace <TAB> with spaces
set softtabstop=3
set shiftwidth=3

au FileType Makefile set noexpandtab
"}

"define :HighlightLongLines command to highlight the offending parts of
"lines that are longer than the specified length (defaulting to 80)
command! -nargs=? HighlightLongLines call s:HighlightLongLines('<args>')
function! s:HighlightLongLines(width)
   let targetWidth = a:width != '' ? a:width : 79
   if targetWidth > 0
      exec 'match Todo /\%>' . (targetWidth) . 'v/'
   else
      echomsg "Usage: HighlightLongLines [natural number]"
   endif
endfunction

function! s:VSetSearch()
   let temp = @@
   norm! gvy
   let @/ = '\V' . substitute(escape(@@, '\'), '\n', '\\n', 'g')
   let @@ = temp
endfunction

vnoremap * :<C-u>call <SID>VSetSearch()<CR>//<CR>
vnoremap # :<C-u>call <SID>VSetSearch()<CR>??<CR>

" C/C++ specific settings
autocmd FileType c,cpp,cc  set cindent comments=sr:/*,mb:*,el:*/,:// cino=>s,e0,n0,f0,{0,}0,^-1s,:0,=s,g0,h1s,p2,t0,+2,(2,)20,*30

"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

   "---------------------------------------------------------------------------
   " Tip #382: Search for <cword> and replace with input() in all open buffers
   "---------------------------------------------------------------------------
   fun! Replace()
      let s:word = input("Replace " . expand('<cword>') . " with:")
      :exe 'bufdo! %s/\<' . expand('<cword>') . '\>/' . s:word . '/ge'
      :unlet! s:word
   endfun

   "---------------------------------------------------------------------------
   " USEFUL SHORTCUTS
   "---------------------------------------------------------------------------
   " set leader to ,
   let mapleader=","
   let g:mapleader=","

   "replace the current word in all opened buffers
   map <leader>r :call Replace()<CR>

   " open the error console
   map <leader>cc :botright cope<CR>
   " move to next error
   map <leader>] :cn<CR>
   " move to the prev error
   map <leader>[ :cp<CR>

   nmap <Down> gj
   nmap <Up> gk
   set fo=l

   " map Q to something useful
   noremap Q gq

   "make Y consistent with C and D
   nnoremap Y y$

   " --- move around splits {
   " move to and maximize the below split
   " map <C-J> <C-W>j<C-W>_
   " move to and maximize the above split
   " map <C-K> <C-W>k<C-W>_
   " move to and maximize the left split
   " nmap <c-h> <c-w>h<c-w><bar>
   " move to and maximize the right split
   " nmap <c-l> <c-w>l<c-w><bar>
   set wmw=0                     " set the min width of a window to 0 so we can maximize others
   set wmh=0                     " set the min height of a window to 0 so we can maximize others
   " }

   " key mapping for vimgrep result navigation
   map <A-o> :copen<CR>
   map <A-q> :cclose<CR>
   map <A-j> :cnext<CR>
   map <A-k> :cprevious<CR>

   "key mapping for window navigation
   map <C-h> <C-w>h
   map <C-j> <C-w>j
   map <C-k> <C-w>k
   map <C-l> <C-w>l

   " auto completion
   inoremap <C-]>             <C-X><C-]>
   inoremap <C-F>             <C-X><C-F>
   inoremap <C-D>             <C-X><C-D>
   inoremap <C-L>             <C-X><C-L>
   inoremap <C-O>             <C-X><C-O>

   "key mapping for saving file
   nmap <C-s> :w<CR>

   " move around tabs. conflict with the original screen top/bottom
   " comment them out if you want the original H/L
   " go to prev tab
   " map <S-H> gT
   " go to next tab
   " map <S-L> gt

   "key mapping for tab navigation
   nmap <Tab> gt
   nmap <S-Tab> gT

   " new tab
   map <C-t><C-t> :tabnew<CR>
   " close tab
   map <C-t><C-w> :tabclose<CR>

   " ,/ turn off search highlighting
   nmap <leader>/ :nohl<CR>

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

   " ,p toggles paste mode
   nmap <leader>p :set paste!<BAR>set paste?<CR>

   " allow multiple indentation/deindentation in visual mode
   vnoremap < <gv
   vnoremap > >gv

   " :cd. change working directory to that of the current file
   cmap cd. lcd %:p:h

   " Writing Restructured Text (Sphinx Documentation) {
   " Ctrl-u 1:    underline Parts w/ #'s
   noremap  <C-u>1 yyPVr#yyjp
   inoremap <C-u>1 <esc>yyPVr#yyjpA
   " Ctrl-u 2:    underline Chapters w/ *'s
   noremap  <C-u>2 yyPVr*yyjp
   inoremap <C-u>2 <esc>yyPVr*yyjpA
   " Ctrl-u 3:    underline Section Level 1 w/ ='s
   noremap  <C-u>3 yypVr=
   inoremap <C-u>3 <esc>yypVr=A
   " Ctrl-u 4:    underline Section Level 2 w/ -'s
   noremap  <C-u>4 yypVr-
   inoremap <C-u>4 <esc>yypVr-A
   " Ctrl-u 5:    underline Section Level 3 w/ ^'s
   noremap  <C-u>5 yypVr^
   inoremap <C-u>5 <esc>yypVr^A
   "}

   "---------------------------------------------------------------------------
   " PROGRAMMING SHORTCUTS
   "---------------------------------------------------------------------------

   " Ctrl-[ jump out of the tag stack (undo Ctrl-])
   map <C-[> <ESC>:po<CR>

   " ,g generates the header guard
   map <leader>g :call IncludeGuard()<CR>
   fun! IncludeGuard()
      let basename = substitute(bufname(""), '.*/', '', '')
      let guard = '_' . substitute(toupper(basename), '\.', '_', "H")
      call append(0, "#ifndef " . guard)
      call append(1, "#define " . guard)
      call append( line("$"), "#endif // for #ifndef " . guard)
   endfun

   " Enable omni completion. (Ctrl-X Ctrl-O)
   autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
   autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
   autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
   autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
   autocmd FileType css set omnifunc=csscomplete#CompleteCSS
   autocmd FileType c set omnifunc=ccomplete#Complete
   autocmd FileType java set omnifunc=javacomplete#Complete

   " use syntax complete if nothing else available
   ""if has("autocmd") && exists("+omnifunc")
   ""  autocmd Filetype *
   ""              \    if &omnifunc == "" |
   ""              \        setlocal omnifunc=syntaxcomplete#Complete |
   ""              \    endif
   ""endif

   " make CSS omnicompletion work for SASS and SCSS
   autocmd BufNewFile,BufRead *.scss             set ft=scss.css
   autocmd BufNewFile,BufRead *.sass             set ft=sass.css

   "---------------------------------------------------------------------------
   " ENCODING SETTINGS
   "---------------------------------------------------------------------------
   set encoding=utf-8
   set termencoding=utf-8
   set fileencoding=utf-8
   set fileencodings=ucs-bom,utf-8,big5,gb2312,latin1

   fun! ViewUTF8()
      set encoding=utf-8
      set termencoding=big5
   endfun

   fun! UTF8()
      set encoding=utf-8
      set termencoding=big5
      set fileencoding=utf-8
      set fileencodings=ucs-bom,big5,utf-8,latin1
   endfun

   fun! Big5()
      set encoding=big5
      set fileencoding=big5
   endfun

   "---------------------------------------------------------------------------
   " PLUGIN SETTINGS
   "---------------------------------------------------------------------------

   " ------- vim-latex - many latex shortcuts and snippets {

   " IMPORTANT: win32 users will need to have 'shellslash' set so that latex
   " can be called correctly.
   set shellslash
   set grepprg=grep\ -nH\ $*
   " OPTIONAL: Starting with Vim 7, the filetype of empty .tex files defaults to
   " 'plaintex' instead of 'tex', which results in vim-latex not being loaded.
   " The following changes the default filetype back to 'tex':
   let g:tex_flavor='latex'

   "}

   " --- Bufexplorer
   ""nnoremap <silent> <F6> :BufExplorerHorizontalSplit<cr>
   map <silent> <F7> :bn<cr>
   map <silent> <F8> :bp<cr>
   ""nnoremap <silent> <F6> :BufExplorer<cr>
   ""nnoremap <silent> <F7> :BufExplorerHorizontalSplit<cr>
   ""nnoremap <silent> <F8> :BufExplorerVerticalSplit<cr>

   " --- Command-T
   "let g:CommandTMaxHeight = 15

   " --- Gundo
   nnoremap <F4> :GundoToggle<CR>

   " --- NERDTree
   nnoremap <silent> <F5> :NERDTreeToggle<CR>
   "silent! nmap <silent> <Leader>p :NERDTreeToggle<CR>
   "nnoremap <silent> <C-f> :call FindInNERDTree()<CR>

   " --- Syntastic: mark syntax errors with :signs
   let g:syntastic_enable_signs=1

   " --- SuperTab
   ""let g:SuperTabRetainCompletionType = 2
   ""let g:SuperTabDefaultCompletionType = "<C-X><C-O>"
   let g:SuperTabDefaultCompletionType = "context"

   " --- EasyMotion
   "let g:EasyMotion_leader_key = '<Leader>m' " default is <Leader>w
   hi link EasyMotionTarget ErrorMsg
   hi link EasyMotionShade  Comment

   " --- Ragtag
   inoremap <M-o>       <Esc>o
   inoremap <C-j>       <Down>
   let g:ragtag_global_maps = 1

   " --- YankRing
   nnoremap <silent> <F9> :YRShow<cr>
   nnoremap <silent> <F10> :YRSearch<cr>

   " --- Zencoding
   let g:user_zen_settings = {
            \  'php' : {
            \    'extends' : 'html',
         \    'filters' : 'c',
         \  },
            \  'xml' : {
            \    'extends' : 'html',
            \  },
            \  'haml' : {
         \    'extends' : 'html',
         \  },
            \  'erb' : {
            \    'extends' : 'html',
            \  },
            \}

   " --- TagBar
   " toggle TagBar with F7
   nnoremap <silent> <F7> :TagbarToggle<CR>
   " set focus to TagBar when opening it
   let g:tagbar_autofocus = 1

   " --- Snipmate
   try
      source ~/.vim/snippets/support_functions.vim
   catch
      source ~/vimfiles/snippets/support_functions.vim
   endtry
   autocmd vimenter * call s:SetupSnippets()
   function! s:SetupSnippets()

      "if we're in a rails env then read in the rails snippets
      if filereadable("./config/environment.rb")
         try
            call ExtractSnips("~/.vim/snippets/ruby-rails", "ruby")
            call ExtractSnips("~/.vim/snippets/eruby-rails", "eruby")
         catch
            call ExtractSnips("~/vimfiles/snippets/ruby-rails", "ruby")
            call ExtractSnips("~/vimfiles/snippets/eruby-rails", "eruby")
         endtry
      endif

      try
         call ExtractSnips("~/.vim/snippets/html", "eruby")
         call ExtractSnips("~/.vim/snippets/html", "xhtml")
         call ExtractSnips("~/.vim/snippets/html", "php")
      catch
         call ExtractSnips("~/vimfiles/snippets/html", "eruby")
         call ExtractSnips("~/vimfiles/snippets/html", "xhtml")
         call ExtractSnips("~/vimfiles/snippets/html", "php")
      endtry
   endfunction

   " -- Neocomplcache
   "let g:neocomplcache_snippets_disable_runtime_snippets = 0

   " Disable AutoComplPop.
   "let g:acp_enableAtStartup = 0
   " Use neocomplcache.
   "let g:neocomplcache_enable_at_startup = 1
   " Use smartcase.
   "let g:neocomplcache_enable_smart_case = 1
   " Use camel case completion.
   "let g:neocomplcache_enable_camel_case_completion = 1
   " Use underbar completion.
   "let g:neocomplcache_enable_underbar_completion = 1
   " Set minimum syntax keyword length.
   "let g:neocomplcache_min_syntax_length = 3
   "let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
   "
   " Define dictionary.
   "letu g:neocomplcache_dictionary_filetype_lists = {
   "  \ 'default' : '',
   "  \ 'vimshell' : $HOME.'/.vimshell_hist',
   "  \ 'scheme' : $HOME.'/.gosh_completions'
   "      \ }
   "
   " Define keyword.
   "if !exists('g:neocomplcache_keyword_patterns')
   "  A
   "  let g:neocomplcache_keyword_patterns = }
   "endif
   "let g:neocomplcache_keyword_patterns['default'] = '\h\w*'
   "
   " Plugin key-mappings.
   "imap <C-k>     <Plug>(neocomplcache_snippets_expand)
   "smap <C-k>     <Plug>(neocomplcache_snippets_expand)
   "imap <Leader>     <Plug>(neocomplcache_snippets_expand)
   "smap <Leader>     <Plug>(neocomplcache_snippets_expand)
   "imap <cr>     <Plug>(neocomplcache_snippets_expand)
   "smap <cr>     <Plug>(neocomplcache_snippets_expand)
   "inoremap <expr><C-g>     neocomplcache#undo_completion()
   "inoremap <expr><C-l>     neocomplcache#complete_common_string()
   "
   " SuperTab like snippets behavior.
   "imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "\<C-n>" : "\<TAB>"
   "
   " Recommended key-mappings.
   " <CR>: close popup and save indent.
   "inoremap <expr><CR>  neocomplcache#smart_close_popup() . "\<CR>"
   " <TAB>: completion.
   "inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
   " <C-h>, <BS>: close popup and delete backword char.
   "inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
   "inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
   "inoremap <expr><C-y>  neocomplcache#close_popup()
   "inoremap <expr><C-e>  neocomplcache#cancel_popup()
   "
   " For cursor moving in insert mode(Not recommended)
   "inoremap <expr><Left>  neocomplcache#close_popup() . "\<Left>"
   "inoremap <expr><Right> neocomplcache#close_popup() . "\<Right>"
   "inoremap <expr><Up>    neocomplcache#close_popup() . "\<Up>"
   "inoremap <expr><Down>  neocomplcache#close_popup() . "\<Down>"
   "
   " AutoComplPop like behavior.
   "let g:neocomplcache_enable_auto_select = 1
   "
   " Shell like behavior(not recommended).
   "set completeopt+=longest
   "let g:neocomplcache_enable_auto_select = 1
   "let g:neocomplcache_disable_auto_complete = 1
   "inoremap <expr><TAB>  pumvisible() ? "\<Down>" : "\<C-x>\<C-u>"
   "inoremap <expr><CR>  neocomplcache#smart_close_popup() . "\<CR>"
   "
   " Enable omni completion.
   "autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
   "autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
   "autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
   "autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
   "autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
   "
   " Enable heavy omni completion.
   "if !exists('g:neocomplcache_omni_patterns')
   "    let g:neocomplcache_omni_patterns = {}
  "endif
   "let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\h\w*\|\h\w*::'
   "autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete
   "let g:neocomplcache_omni_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
   "let g:neocomplcache_omni_patterns.c = '\%(\.\|->\)\h\w*'
   "let g:neocomplcache_omni_patterns.cpp = '\h\w*\%(\.\|->\)\h\w*\|\h\w*::'