Created
September 7, 2013 22:48
-
-
Save medvid/6480085 to your computer and use it in GitHub Desktop.
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
" detect OS {{{ | |
let s:is_windows = has('win32') || has('win64') | |
let s:is_cygwin = has('win32unix') | |
let s:is_macvim = has('gui_macvim') | |
"}}} | |
" dotvim settings {{{ | |
if !exists('g:dotvim_settings') | |
let g:dotvim_settings = {} | |
endif | |
" initialize default settings | |
let s:settings = {} | |
let s:settings.default_indent = 4 | |
let s:settings.max_column = 80 | |
let s:settings.autocomplete_method = 'neocomplcache' | |
let s:settings.enable_cursorcolumn = 1 | |
if has('patch885') && has('lua') | |
let s:settings.autocomplete_method = 'neocomplete' | |
elseif has('patch584') && filereadable(expand("~/.vim/bundle/YouCompleteMe/python/ycm_core.*")) | |
let s:settings.autocomplete_method = 'ycm' | |
endif | |
let s:settings.plugin_groups = [] | |
call add(s:settings.plugin_groups, 'core') | |
call add(s:settings.plugin_groups, 'web') | |
"call add(s:settings.plugin_groups, 'javascript') | |
"call add(s:settings.plugin_groups, 'ruby') | |
call add(s:settings.plugin_groups, 'python') | |
"call add(s:settings.plugin_groups, 'go') | |
call add(s:settings.plugin_groups, 'scm') | |
call add(s:settings.plugin_groups, 'editing') | |
call add(s:settings.plugin_groups, 'visual') | |
call add(s:settings.plugin_groups, 'indents') | |
call add(s:settings.plugin_groups, 'navigation') | |
call add(s:settings.plugin_groups, 'unite') | |
call add(s:settings.plugin_groups, 'autocomplete') | |
call add(s:settings.plugin_groups, 'misc') | |
if s:is_windows | |
call add(s:settings.plugin_groups, 'windows') | |
endif | |
if exists('g:dotvim_settings.plugin_groups_exclude') | |
for group in g:dotvim_settings.plugin_groups_exclude | |
let i = index(s:settings.plugin_groups, group) | |
if i != -1 | |
call remove(s:settings.plugin_groups, i) | |
endif | |
endfor | |
endif | |
for key in keys(s:settings) | |
if has_key(g:dotvim_settings, key) | |
let s:settings[key] = g:dotvim_settings[key] | |
endif | |
endfor | |
"}}} | |
" setup & neobundle {{{ | |
set nocompatible | |
if s:is_windows | |
set rtp+=~/.vim | |
endif | |
set rtp+=~/.vim/bundle/neobundle.vim | |
call neobundle#rc(expand('~/.vim/bundle/')) | |
NeoBundleFetch 'Shougo/neobundle.vim' | |
"}}} | |
" functions {{{ | |
function! Preserve(command) "{{{ | |
" preparation: save last search, and cursor position. | |
let _s=@/ | |
let l = line(".") | |
let c = col(".") | |
" do the business: | |
execute a:command | |
" clean up: restore previous search history, and cursor position | |
let @/=_s | |
call cursor(l, c) | |
endfunction "}}} | |
function! StripTrailingWhitespace() "{{{ | |
call Preserve("%s/\\s\\+$//e") | |
endfunction "}}} | |
function! EnsureExists(path) "{{{ | |
if !isdirectory(expand(a:path)) | |
call mkdir(expand(a:path)) | |
endif | |
endfunction "}}} | |
function! CloseWindowOrKillBuffer() "{{{ | |
let number_of_windows_to_this_buffer = len(filter(range(1, winnr('$')), "winbufnr(v:val) == bufnr('%')")) | |
" never bdelete a nerd tree | |
if matchstr(expand("%"), 'NERD') == 'NERD' | |
wincmd c | |
return | |
endif | |
if number_of_windows_to_this_buffer > 1 | |
wincmd c | |
else | |
bdelete | |
endif | |
endfunction "}}} | |
"}}} | |
" base configuration {{{ | |
set langmenu=en_US.utf-8 | |
language messages en_US.utf-8 | |
set timeoutlen=300 "mapping timeout | |
set ttimeoutlen=50 "keycode timeout | |
set mouse=a "enable mouse | |
set mousehide "hide when characters are typed | |
set history=1000 "number of command lines to remember | |
set ttyfast "assume fast terminal connection | |
set viewoptions=folds,options,cursor,unix,slash "unix/windows compatibility | |
set encoding=utf-8 "set encoding for text | |
set fileencoding=utf-8 | |
set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1 | |
if exists('$TMUX') | |
set clipboard= | |
else | |
set clipboard=unnamed "sync with OS clipboard | |
endif | |
set hidden "allow buffer switching without saving | |
set autoread "auto reload if file saved externally | |
set fileformats+=mac "add mac to auto-detection of file format line endings | |
set nrformats-=octal "always assume decimal numbers | |
set showcmd | |
set tags=tags;/ | |
set showfulltag | |
set keywordprg=":help" "remap K to vim help | |
set modeline | |
set modelines=5 | |
if s:is_windows && !s:is_cygwin | |
" ensure correct shell in gvim | |
set shell=c:\windows\system32\cmd.exe | |
endif | |
" whitespace | |
set backspace=indent,eol,start "allow backspacing everything in insert mode | |
set autoindent "automatically indent to match adjacent lines | |
set smartindent "smart indenting for additional languages | |
set expandtab "spaces instead of tabs | |
set smarttab "use shiftwidth to enter tabs | |
let &tabstop=s:settings.default_indent "number of spaces per tab for display | |
let &softtabstop=s:settings.default_indent "number of spaces per tab in insert mode | |
let &shiftwidth=s:settings.default_indent "number of spaces when indenting | |
set list "highlight whitespace | |
set listchars=tab:▷- | |
" Only shown when not in insert mode so I don't go insane. | |
augroup trailing | |
au! | |
au InsertEnter * :set listchars-=trail:• | |
au InsertLeave * :set listchars+=trail:• | |
augroup END | |
"Avoid save trailing whitespace. | |
autocmd BufWritePre * :%s/\s\+$//e | |
set shiftround | |
set linebreak | |
set scrolloff=1 "always show content after scroll | |
set scrolljump=5 "minimum number of lines to scroll | |
set display+=lastline | |
set wildmenu "show list for autocomplete | |
set wildmode=list:longest:full "priority for tab completion | |
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.idea/*,*/.DS_Store | |
set splitbelow | |
set splitright | |
" disable sounds | |
set noerrorbells | |
set novisualbell | |
set t_vb= | |
" searching | |
set hlsearch "highlight searches | |
set incsearch "incremental searching | |
set ignorecase "ignore case for searching | |
set smartcase "do case-sensitive if there's a capital letter | |
set gdefault | |
" clear search matching | |
noremap <leader><space> :noh<cr>:call clearmatches()<cr> | |
if executable('ack') | |
set grepprg=ack\ --nogroup\ --column\ --smart-case\ --nocolor\ --follow\ $* | |
set grepformat=%f:%l:%c:%m | |
endif | |
if executable('ag') | |
set grepprg=ag\ --nogroup\ --column\ --smart-case\ --nocolor\ --follow | |
set grepformat=%f:%l:%c:%m | |
endif | |
" vim file/folder management {{{ | |
" persistent undo | |
if exists('+undofile') | |
set undofile | |
set undodir=~/.vim/.cache/undo | |
endif | |
" backups | |
set backup | |
set backupdir=~/.vim/.cache/backup | |
" swap files | |
set directory=~/.vim/.cache/swap | |
set noswapfile | |
call EnsureExists('~/.vim/.cache') | |
call EnsureExists(&undodir) | |
call EnsureExists(&backupdir) | |
call EnsureExists(&directory) | |
"}}} | |
let mapleader = "," | |
let g:mapleader = "," | |
"}}} | |
" ui configuration {{{ | |
set showmatch "automatically highlight matching braces/brackets/etc. | |
set matchtime=2 "tens of a second to show matching parentheses | |
set laststatus=2 | |
set lazyredraw | |
set noshowmode | |
set foldenable "enable folds by default | |
set foldmethod=syntax "fold via syntax of files | |
set foldlevelstart=99 "open all folds by default | |
let g:xml_syntax_folding=1 "enable xml folding | |
set cursorline | |
autocmd WinLeave * setlocal nocursorline | |
autocmd WinEnter * setlocal cursorline | |
let &colorcolumn=s:settings.max_column | |
if s:settings.enable_cursorcolumn | |
set cursorcolumn | |
autocmd WinLeave * setlocal nocursorcolumn | |
autocmd WinEnter * setlocal cursorcolumn | |
endif | |
if has('conceal') | |
set conceallevel=1 | |
set listchars+=conceal:Δ | |
endif | |
if has('gui_running') | |
set lines=999 columns=999 "open maximized | |
winpos 300 200 | |
"au GUIEnter * simalt ~x | |
set guioptions+=t "tear off menu items | |
set guioptions-=T "toolbar icons | |
if s:is_macvim | |
set guifont=Source_Code_Pro_for_Powerline:h14 | |
set gfw=Yahei_Monaco:h13:cGB2312 | |
set transparency=2 | |
endif | |
if s:is_windows | |
set guifont=Source_Code_Pro_for_Powerline:h14 | |
"set guifont=PragmataPro:h14 | |
set gfw=Yahei_Monaco:h13:cGB2312 | |
endif | |
if has('gui_gtk') | |
set guifont=Source_Code_Pro_for_Powerline:h14 | |
set gfw=Yahei_Monaco:h13:cGB2312 | |
endif | |
else | |
set t_Co=256 | |
if $TERM_PROGRAM == 'iTerm.app' | |
" different cursors for insert vs normal mode | |
if exists('$TMUX') | |
let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\" | |
let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\" | |
else | |
let &t_SI = "\<Esc>]50;CursorShape=1\x7" | |
let &t_EI = "\<Esc>]50;CursorShape=0\x7" | |
endif | |
endif | |
endif | |
"}}} | |
" plugin/mapping configuration {{{ | |
if count(s:settings.plugin_groups, 'core') "{{{ | |
NeoBundle 'matchit.zip' | |
NeoBundle 'tpope/vim-surround' | |
NeoBundle 'tpope/vim-repeat' | |
NeoBundle 'tpope/vim-dispatch' | |
NeoBundle 'tpope/vim-eunuch' | |
NeoBundle 'tpope/vim-unimpaired' "{{{ | |
nmap <c-up> [e | |
nmap <c-down> ]e | |
vmap <c-up> [egv | |
vmap <c-down> ]egv | |
"}}} | |
NeoBundleDepends 'Shougo/vimproc.vim', { | |
\ 'build': { | |
\ 'mac': 'make -f make_mac.mak', | |
\ 'unix': 'make -f make_unix.mak', | |
\ 'cygwin': 'make -f make_cygwin.mak', | |
\ 'windows': '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\nmake.exe" make_msvc32.mak', | |
\ }, | |
\ } | |
endif "}}} | |
if count(s:settings.plugin_groups, 'web') "{{{ | |
NeoBundleLazy 'groenewege/vim-less', {'autoload':{'filetypes':['less']}} | |
NeoBundleLazy 'cakebaker/scss-syntax.vim', {'autoload':{'filetypes':['scss','sass']}} | |
NeoBundleLazy 'hail2u/vim-css3-syntax', {'autoload':{'filetypes':['css','scss','sass']}} | |
NeoBundleLazy 'ap/vim-css-color', {'autoload':{'filetypes':['css','scss','sass','less','styl']}} | |
NeoBundleLazy 'othree/html5.vim', {'autoload':{'filetypes':['html']}} | |
NeoBundleLazy 'wavded/vim-stylus', {'autoload':{'filetypes':['styl']}} | |
NeoBundleLazy 'digitaltoad/vim-jade', {'autoload':{'filetypes':['jade']}} | |
NeoBundleLazy 'juvenn/mustache.vim', {'autoload':{'filetypes':['mustache']}} | |
NeoBundleLazy 'gregsexton/MatchTag', {'autoload':{'filetypes':['html','xml']}} | |
NeoBundleLazy 'mattn/zencoding-vim', {'autoload':{'filetypes':['html','xml','xsl','xslt','xsd','css','sass','scss','less','mustache']}} "{{{ | |
autocmd FileType html,xml,xsl,xslt,xsd,css,sass,scss,less,mustache inoremap <tab> <c-g>u<esc>:call zencoding#expandAbbr(0,"")<cr>a | |
"}}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'javascript') "{{{ | |
NeoBundleLazy 'teramako/jscomplete-vim', {'autoload':{'filetypes':['javascript']}} "{{{ | |
autocmd FileType javascript setlocal omnifunc=jscomplete#CompleteJS | |
"}}} | |
NeoBundleLazy 'pangloss/vim-javascript', {'autoload':{'filetypes':['javascript']}} | |
NeoBundleLazy 'maksimr/vim-jsbeautify', {'autoload':{'filetypes':['javascript']}} "{{{ | |
nnoremap <leader>fjs :call JsBeautify()<cr> | |
"}}} | |
NeoBundleLazy 'leafgarland/typescript-vim', {'autoload':{'filetypes':['typescript']}} | |
NeoBundleLazy 'kchmck/vim-coffee-script', {'autoload':{'filetypes':['coffee']}} | |
NeoBundleLazy 'mmalecki/vim-node.js', {'autoload':{'filetypes':['javascript']}} | |
NeoBundleLazy 'leshill/vim-json', {'autoload':{'filetypes':['javascript','json']}} | |
NeoBundleLazy 'othree/javascript-libraries-syntax.vim', {'autoload':{'filetypes':['javascript','coffee','ls','typescript']}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'ruby') "{{{ | |
NeoBundle 'tpope/vim-rails' | |
NeoBundle 'tpope/vim-bundler' | |
endif "}}} | |
if count(s:settings.plugin_groups, 'python') "{{{ | |
NeoBundleLazy 'klen/python-mode', {'autoload':{'filetypes':['python']}} "{{{ | |
let g:pymode_rope=0 | |
"}}} | |
NeoBundleLazy 'davidhalter/jedi-vim', {'autoload':{'filetypes':['python']}} "{{{ | |
let g:jedi#popup_on_dot=0 | |
"}}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'go') "{{{ | |
NeoBundleLazy 'jnwhiteh/vim-golang', {'autoload':{'filetypes':['go']}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'scm') "{{{ | |
" NeoBundle 'sjl/splice.vim' | |
NeoBundle 'mhinz/vim-signify' "{{{ | |
let g:signify_update_on_bufenter=0 | |
"}}} | |
NeoBundle 'tpope/vim-fugitive' "{{{ | |
nnoremap <silent> <leader>gs :Gstatus<CR> | |
nnoremap <silent> <leader>gd :Gdiff<CR> | |
nnoremap <silent> <leader>gc :Gcommit<CR> | |
nnoremap <silent> <leader>gb :Gblame<CR> | |
nnoremap <silent> <leader>gl :Glog<CR> | |
nnoremap <silent> <leader>gp :Git push<CR> | |
nnoremap <silent> <leader>gw :Gwrite<CR> | |
nnoremap <silent> <leader>gr :Gremove<CR> | |
autocmd FileType gitcommit nmap <buffer> U :Git checkout -- <C-r><C-g><CR> | |
autocmd BufReadPost fugitive://* set bufhidden=delete | |
"}}} | |
NeoBundleLazy 'gregsexton/gitv', {'depends':['tpope/vim-fugitive'], 'autoload':{'commands':'Gitv'}} "{{{ | |
nnoremap <silent> <leader>gv :Gitv<CR> | |
nnoremap <silent> <leader>gV :Gitv!<CR> | |
"}}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'autocomplete') "{{{ | |
NeoBundle 'honza/vim-snippets' | |
if s:settings.autocomplete_method == 'ycm' "{{{ | |
NeoBundle 'Valloric/YouCompleteMe' "{{{ | |
let g:ycm_complete_in_comments_and_strings=1 | |
let g:ycm_key_list_select_completion=['<C-n>', '<Down>'] | |
let g:ycm_key_list_previous_completion=['<C-p>', '<Up>'] | |
let g:ycm_filetype_blacklist={'unite': 1} | |
"}}} | |
NeoBundle 'SirVer/ultisnips' "{{{ | |
let g:UltiSnipsExpandTrigger="<tab>" | |
let g:UltiSnipsJumpForwardTrigger="<tab>" | |
let g:UltiSnipsJumpBackwardTrigger="<s-tab>" | |
let g:UltiSnipsSnippetsDir='~/.vim/snippets' | |
"}}} | |
else | |
NeoBundle 'Shougo/neosnippet.vim' "{{{ | |
let g:neosnippet#snippets_directory='~/.vim/bundle/vim-snippets/snippets,~/.vim/snippets' | |
let g:neosnippet#enable_snipmate_compatibility=1 | |
" Plugin key-mappings. | |
imap <C-k> <Plug>(neosnippet_expand_or_jump) | |
smap <C-k> <Plug>(neosnippet_expand_or_jump) | |
xmap <C-k> <Plug>(neosnippet_expand_target) | |
" SuperTab like snippets behavior. | |
imap <expr><TAB> neosnippet#expandable() <Bar><bar> neosnippet#jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "\<C-n>" : "\<TAB>" | |
smap <expr><TAB> neosnippet#expandable() <Bar><bar> neosnippet#jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>" | |
"}}} | |
endif "}}} | |
if s:settings.autocomplete_method == 'neocomplete' "{{{ | |
NeoBundleLazy 'Shougo/neocomplete.vim', {'autoload':{'insert':1}} "{{{ | |
let g:neocomplete#enable_at_startup=1 | |
" Use smartcase. | |
let g:neocomplete#enable_smart_case = 1 | |
" Set minimum syntax keyword length. | |
let g:neocomplete#sources#syntax#min_keyword_length = 3 | |
let g:neocomplete#lock_buffer_name_pattern = '\*ku\*' | |
let g:neocomplete#data_directory='~/.vim/.cache/neocomplete' | |
let g:neocomplete#enable_auto_delimiter=1 | |
" Plugin key-mappings. | |
inoremap <expr><C-g> neocomplete#undo_completion() | |
inoremap <expr><C-l> neocomplete#complete_common_string() | |
" Recommended key-mappings. | |
" <CR>: close popup and save indent. | |
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR> | |
function! s:my_cr_function() | |
return neocomplete#smart_close_popup() . "\<CR>" | |
" For no inserting <CR> key. | |
"return pumvisible() ? neocomplete#close_popup() : "\<CR>" | |
endfunction | |
" <TAB>: completion. | |
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>" | |
" <C-h>, <BS>: close popup and delete backword char. | |
inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>" | |
inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>" | |
inoremap <expr><C-y> neocomplete#close_popup() | |
inoremap <expr><C-e> neocomplete#cancel_popup() | |
" 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 | |
"}}} | |
endif "}}} | |
if s:settings.autocomplete_method == 'neocomplcache' "{{{ | |
NeoBundleLazy 'Shougo/neocomplcache.vim', {'autoload':{'insert':1}} "{{{ | |
let g:neocomplcache_enable_at_startup=1 | |
let g:neocomplcache_enable_auto_delimiter=1 | |
" let g:neocomplcache_force_overwrite_completefunc=1 | |
" let g:neocomplcache_auto_completion_start_length=1 | |
let g:neocomplcache_max_list=10 | |
let g:neocomplcache_temporary_dir='~/.vim/.cache/neocon' | |
" let g:neocomplcache_enable_auto_select=1 | |
" let g:neocomplcache_enable_cursor_hold_i=1 | |
" let g:neocomplcache_cursor_hold_i_time=300 | |
let g:neocomplcache_enable_fuzzy_completion=1 | |
if !exists('g:neocomplcache_omni_functions') | |
let g:neocomplcache_omni_functions = {} | |
endif | |
" enable general omni completion | |
let g:neocomplcache_omni_functions.css = 'csscomplete#CompleteCSS' | |
let g:neocomplcache_omni_functions.html = 'htmlcomplete#CompleteTags' | |
let g:neocomplcache_omni_functions.markdown = 'htmlcomplete#CompleteTags' | |
let g:neocomplcache_omni_functions.python = 'pythoncomplete#Complete' | |
let g:neocomplcache_omni_functions.xml = 'xmlcomplete#CompleteTags' | |
let g:neocomplcache_omni_functions.ruby = 'rubycomplete#Complete' | |
"}}} | |
endif "}}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'editing') "{{{ | |
NeoBundleLazy 'editorconfig/editorconfig-vim', {'autoload':{'insert':1}} | |
NeoBundle 'tpope/vim-speeddating' | |
NeoBundle 'tpope/vim-endwise' | |
NeoBundle 'tomtom/tcomment_vim' | |
NeoBundle 'terryma/vim-expand-region' | |
NeoBundle 'terryma/vim-multiple-cursors' | |
NeoBundle 'chrisbra/NrrwRgn' | |
NeoBundle 'dahu/vim-fanfingtastic' | |
NeoBundleLazy 'godlygeek/tabular', {'autoload':{'commands':'Tabularize'}} "{{{ | |
nmap <Leader>a& :Tabularize /&<CR> | |
vmap <Leader>a& :Tabularize /&<CR> | |
nmap <Leader>a= :Tabularize /=<CR> | |
vmap <Leader>a= :Tabularize /=<CR> | |
nmap <Leader>a: :Tabularize /:<CR> | |
vmap <Leader>a: :Tabularize /:<CR> | |
nmap <Leader>a:: :Tabularize /:\zs<CR> | |
vmap <Leader>a:: :Tabularize /:\zs<CR> | |
nmap <Leader>a, :Tabularize /,<CR> | |
vmap <Leader>a, :Tabularize /,<CR> | |
nmap <Leader>a<Bar> :Tabularize /<Bar><CR> | |
vmap <Leader>a<Bar> :Tabularize /<Bar><CR> | |
"}}} | |
NeoBundle 'Raimondi/delimitMate' "{{{ | |
let delimitMate_expand_cr=1 | |
autocmd FileType markdown,vim let b:loaded_delimitMate=1 | |
"}}} | |
NeoBundle 'skwp/vim-easymotion' "{{{ | |
" NeoBundle 'Lokaltog/vim-easymotion' | |
let g:EasyMotion_keys = 'asdfghjklqwertyuiopzxcvbnm' | |
autocmd ColorScheme * highlight EasyMotionTarget ctermfg=32 guifg=#0087df | |
autocmd ColorScheme * highlight EasyMotionShade ctermfg=237 guifg=#3a3a3a | |
"}}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'navigation') "{{{ | |
NeoBundleLazy 'mbbill/undotree', {'autoload':{'commands':'UndotreeToggle'}} "{{{ | |
let g:undotree_SplitLocation='botright' | |
let g:undotree_SetFocusWhenToggle=1 | |
nnoremap <silent> <F5> :UndotreeToggle<CR> | |
"}}} | |
NeoBundleLazy 'EasyGrep', {'autoload':{'commands':'GrepOptions'}} "{{{ | |
let g:EasyGrepRecursive=1 | |
let g:EasyGrepAllOptionsInExplorer=1 | |
let g:EasyGrepCommand=1 | |
nnoremap <leader>vo :GrepOptions<cr> | |
"}}} | |
NeoBundle 'kien/ctrlp.vim', { 'depends': 'tacahiroy/ctrlp-funky' } "{{{ | |
let g:ctrlp_clear_cache_on_exit=1 | |
let g:ctrlp_max_height=40 | |
let g:ctrlp_show_hidden=0 | |
let g:ctrlp_follow_symlinks=1 | |
let g:ctrlp_working_path_mode=0 | |
let g:ctrlp_max_files=20000 | |
let g:ctrlp_cache_dir='~/.vim/.cache/ctrlp' | |
let g:ctrlp_extensions=['funky'] | |
nmap \ [ctrlp] | |
nnoremap [ctrlp] <nop> | |
nnoremap [ctrlp]t :CtrlPBufTag<cr> | |
nnoremap [ctrlp]T :CtrlPTag<cr> | |
nnoremap [ctrlp]l :CtrlPLine<cr> | |
nnoremap [ctrlp]o :CtrlPFunky<cr> | |
nnoremap [ctrlp]b :CtrlPBuffer<cr> | |
"}}} | |
" NeoBundle 'Shougo/vimfiler.vim' "{{{ | |
" let g:vimfiler_as_default_explorer=1 | |
" let g:vimfiler_data_directory='~/.vim/.cache/vimfiler' | |
" nnoremap <F2> :VimFilerExplorer<CR> | |
" nnoremap <F3> :VimFilerBufferDir --explorer<CR> | |
" "}}} | |
NeoBundleLazy 'scrooloose/nerdtree', {'autoload':{'commands':['NERDTreeToggle','NERDTreeFind']}} "{{{ | |
let NERDTreeShowHidden=1 | |
let NERDTreeQuitOnOpen=0 | |
let NERDTreeShowLineNumbers=1 | |
let NERDTreeChDirMode=0 | |
let NERDTreeShowBookmarks=1 | |
let NERDTreeIgnore=['\.git','\.hg'] | |
let NERDTreeBookmarksFile='~/.vim/.cache/NERDTreeBookmarks' | |
nnoremap <F2> :NERDTreeToggle<CR> | |
nnoremap <F3> :NERDTreeFind<CR> | |
"}}} | |
NeoBundleLazy 'majutsushi/tagbar', {'autoload':{'commands':'TagbarToggle'}} "{{{ | |
nnoremap <silent> <F9> :TagbarToggle<CR> | |
"}}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'unite') "{{{ | |
NeoBundleLazy 'Shougo/unite.vim', {'autoload':{'commands':'Unite'}} "{{{ | |
let bundle = neobundle#get('unite.vim') | |
function! bundle.hooks.on_source(bundle) | |
call unite#filters#matcher_default#use(['matcher_fuzzy']) | |
call unite#filters#sorter_default#use(['sorter_rank']) | |
call unite#set_profile('files', 'smartcase', 1) | |
call unite#custom#source('line,outline','matchers','matcher_fuzzy') | |
endfunction | |
let g:unite_data_directory='~/.vim/.cache/unite' | |
let g:unite_enable_start_insert=1 | |
let g:unite_source_history_yank_enable=1 | |
let g:unite_source_rec_max_cache_files=5000 | |
let g:unite_prompt='» ' | |
if executable('ag') | |
let g:unite_source_grep_command='ag' | |
let g:unite_source_grep_default_opts='--nocolor --nogroup --hidden' | |
let g:unite_source_grep_recursive_opt='' | |
elseif executable('ack') | |
let g:unite_source_grep_command='ack' | |
let g:unite_source_grep_default_opts='--no-heading --no-color -a' | |
let g:unite_source_grep_recursive_opt='' | |
endif | |
function! s:unite_settings() | |
nmap <buffer> Q <plug>(unite_exit) | |
nmap <buffer> <esc> <plug>(unite_exit) | |
imap <buffer> <esc> <plug>(unite_exit) | |
endfunction | |
autocmd FileType unite call s:unite_settings() | |
nmap <space> [unite] | |
nnoremap [unite] <nop> | |
if s:is_windows | |
nnoremap <silent> [unite]<space> :<C-u>Unite -toggle -auto-resize -buffer-name=mixed file_rec buffer file_mru bookmark<cr><c-u> | |
nnoremap <silent> [unite]f :<C-u>Unite -toggle -auto-resize -buffer-name=files file_rec<cr><c-u> | |
else | |
nnoremap <silent> [unite]<space> :<C-u>Unite -toggle -auto-resize -buffer-name=mixed file_rec/async buffer file_mru bookmark<cr><c-u> | |
nnoremap <silent> [unite]f :<C-u>Unite -toggle -auto-resize -buffer-name=files file_rec/async<cr><c-u> | |
endif | |
nnoremap <silent> [unite]y :<C-u>Unite -buffer-name=yanks history/yank<cr> | |
nnoremap <silent> [unite]l :<C-u>Unite -auto-resize -buffer-name=line line<cr> | |
nnoremap <silent> [unite]b :<C-u>Unite -auto-resize -buffer-name=buffers buffer<cr> | |
nnoremap <silent> [unite]/ :<C-u>Unite -no-quit -buffer-name=search grep:.<cr> | |
nnoremap <silent> [unite]m :<C-u>Unite -auto-resize -buffer-name=mappings mapping<cr> | |
nnoremap <silent> [unite]s :<C-u>Unite -quick-match buffer<cr> | |
"}}} | |
NeoBundleLazy 'tsukkee/unite-tag', {'autoload':{'unite_sources':['tag','tag/file']}} "{{{ | |
nnoremap <silent> [unite]t :<C-u>Unite -auto-resize -buffer-name=tags tags tags/file<cr> | |
"}}} | |
NeoBundleLazy 'Shougo/unite-outline', {'autoload':{'unite_sources':'outline'}} "{{{ | |
nnoremap <silent> [unite]o :<C-u>Unite -auto-resize -buffer-name=outline outline<cr> | |
"}}} | |
NeoBundleLazy 'Shougo/junkfile.vim', {'autoload':{'commands':'JunkfileOpen','unite_sources':['junkfile','junkfile/new']}} "{{{ | |
let g:junkfile#directory=expand("~/.vim/.cache/junk") | |
nnoremap <silent> [unite]j :<C-u>Unite -auto-resize -buffer-name=junk junkfile junkfile/new<cr> | |
"}}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'visual') "{{{ | |
NeoBundle 'bling/vim-bufferline' "{{{ | |
let g:bufferline_echo=0 | |
let g:bufferline_rotate=1 | |
"}}} | |
NeoBundle 'Lokaltog/vim-powerline' "{{{ | |
let g:Powerline_symbols = 'fancy' | |
"}}} | |
" NeoBundle 'Lokaltog/powerline', { 'rtp': 'powerline/bindings/vim' } | |
" NeoBundle 'zhaocai/linepower.vim' | |
NeoBundle 'myusuf3/numbers.vim', { 'gui': 1 } | |
NeoBundle 'kshenoy/vim-signature' | |
NeoBundleLazy 'zhaocai/GoldenView.Vim', {'autoload':{'mappings':['<Plug>ToggleGoldenViewAutoResize']}} "{{{ | |
let g:goldenview__enable_default_mapping=0 | |
nmap <F4> <Plug>ToggleGoldenViewAutoResize | |
"}}} | |
" NeoBundleLazy 'roman/golden-ratio', {'autoload':{'commands':'GoldenRatioToggle'}} "{{{ | |
" let g:golden_ratio_autocommand=0 | |
" let g:golden_ratio_wrap_ignored=0 | |
" nnoremap <F4> :GoldenRatioToggle<cr> | |
" "}}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'indents') "{{{ | |
NeoBundle 'nathanaelkane/vim-indent-guides' "{{{ | |
let g:indent_guides_start_level=1 | |
let g:indent_guides_guide_size=1 | |
let g:indent_guides_enable_on_vim_startup=1 | |
let g:indent_guides_color_change_percent=3 | |
if !has('gui_running') | |
let g:indent_guides_auto_colors=0 | |
function! s:indent_set_console_colors() | |
hi IndentGuidesOdd ctermbg=235 | |
hi IndentGuidesEven ctermbg=236 | |
endfunction | |
autocmd VimEnter,Colorscheme * call s:indent_set_console_colors() | |
endif | |
"}}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'misc') "{{{ | |
NeoBundleLazy 'tpope/vim-markdown', {'autoload':{'filetypes':['markdown']}} | |
if executable('redcarpet') && executable('instant-markdown-d') | |
NeoBundleLazy 'suan/vim-instant-markdown', {'autoload':{'filetypes':['markdown']}} | |
endif | |
NeoBundleLazy 'guns/xterm-color-table.vim', {'autoload':{'commands':'XtermColorTable'}} | |
NeoBundle 'vimwiki' | |
NeoBundle 'bufkill.vim' | |
NeoBundle 'mhinz/vim-startify' "{{{ | |
let g:startify_session_dir = '~/.vim/.cache/sessions' | |
let g:startify_show_sessions = 1 | |
nnoremap <F1> :Startify<cr> | |
"}}} | |
NeoBundle 'scrooloose/syntastic' "{{{ | |
let g:syntastic_error_symbol = '✗' | |
let g:syntastic_style_error_symbol = '✠' | |
let g:syntastic_warning_symbol = '∆' | |
let g:syntastic_style_warning_symbol = '≈' | |
"}}} | |
NeoBundleLazy 'mattn/gist-vim', { 'depends': 'mattn/webapi-vim', 'autoload': { 'commands': 'Gist' } } "{{{ | |
let g:gist_post_private=1 | |
let g:gist_show_privates=1 | |
"}}} | |
NeoBundleLazy 'Shougo/vimshell.vim', {'autoload':{'commands':'VimShell'}} "{{{ | |
if s:is_macvim | |
let g:vimshell_editor_command='mvim' | |
else | |
let g:vimshell_editor_command='vim' | |
endif | |
let g:vimshell_right_prompt='getcwd()' | |
let g:vimshell_temporary_directory='~/.vim/.cache/vimshell' | |
let g:vimshell_vimshrc_path='~/.vim/vimshrc' | |
nnoremap <leader>c :VimShell -split<cr> | |
"}}} | |
endif "}}} | |
if count(s:settings.plugin_groups, 'windows') "{{{ | |
NeoBundleLazy 'PProvost/vim-ps1', {'autoload':{'filetypes':['ps1']}} "{{{ | |
autocmd BufNewFile,BufRead *.ps1,*.psd1,*.psm1 setlocal ft=ps1 | |
"}}} | |
NeoBundleLazy 'OrangeT/vim-csharp', {'autoload':{'filetypes':['cs']}} | |
endif "}}} | |
nnoremap <leader>nbu :Unite neobundle/update -no-start-insert<cr> | |
"}}} | |
" mappings {{{ | |
" formatting shortcuts | |
nmap <leader>fef :call Preserve("normal gg=G")<CR> | |
nmap <leader>f$ :call StripTrailingWhitespace()<CR> | |
vmap <leader>s :sort<cr> | |
" toggle paste | |
map <F6> :set invpaste<CR>:set paste?<CR> | |
" remap arrow keys | |
nnoremap <down> :bprev<CR> | |
nnoremap <up> :bnext<CR> | |
nnoremap <left> :tabnext<CR> | |
nnoremap <right> :tabprev<CR> | |
" change cursor position in insert mode | |
inoremap <C-h> <left> | |
inoremap <C-l> <right> | |
if mapcheck('<space>/') == '' | |
nnoremap <space>/ :vimgrep //gj **/*<left><left><left><left><left><left><left><left> | |
endif | |
" sane regex {{{ | |
nnoremap / /\v | |
vnoremap / /\v | |
nnoremap ? ?\v | |
vnoremap ? ?\v | |
cnoremap s/ s/\v | |
"}}} | |
" folds {{{ | |
nnoremap zr zr:echo &foldlevel<cr> | |
nnoremap zm zm:echo &foldlevel<cr> | |
nnoremap zR zR:echo &foldlevel<cr> | |
nnoremap zM zM:echo &foldlevel<cr> | |
" }}} | |
" screen line scroll | |
nnoremap <silent> j gj | |
nnoremap <silent> k gk | |
" auto center {{{ | |
nnoremap <silent> n nzz | |
nnoremap <silent> N Nzz | |
nnoremap <silent> * *zz | |
nnoremap <silent> # #zz | |
nnoremap <silent> g* g*zz | |
nnoremap <silent> g# g#zz | |
nnoremap <silent> <C-o> <C-o>zz | |
nnoremap <silent> <C-i> <C-i>zz | |
"}}} | |
" reselect visual block after indent | |
vnoremap < <gv | |
vnoremap > >gv | |
" reselect last paste | |
nnoremap <expr> gp '`[' . strpart(getregtype(), 0, 1) . '`]' | |
" find current word in quickfix | |
nnoremap <leader>fw :execute "vimgrep ".expand("<cword>")." %"<cr>:copen<cr> | |
" find last search in quickfix | |
nnoremap <leader>ff :execute 'vimgrep /'.@/.'/g %'<cr>:copen<cr> | |
" shortcuts for windows {{{ | |
nnoremap <leader>v <C-w>v<C-w>l | |
nnoremap <leader>s <C-w>s | |
nnoremap <leader>vsa :vert sba<cr> | |
nnoremap <C-h> <C-w>h | |
nnoremap <C-j> <C-w>j | |
nnoremap <C-k> <C-w>k | |
nnoremap <C-l> <C-w>l | |
"}}} | |
" tab shortcuts | |
map <leader>tn :tabnew<CR> | |
map <leader>tc :tabclose<CR> | |
" make Y consistent with C and D. See :help Y. | |
nnoremap Y y$ | |
" hide annoying quit message | |
nnoremap <C-c> <C-c>:echo<cr> | |
" window killer | |
nnoremap <silent> Q :call CloseWindowOrKillBuffer()<cr> | |
" quick buffer open | |
nnoremap gb :ls<cr>:e # | |
if neobundle#is_sourced('vim-dispatch') | |
nnoremap <leader>tag :Dispatch ctags -R<cr> | |
endif | |
" general | |
nmap <leader>l :set list! list?<cr> | |
noremap <cr> :set hlsearch! hlsearch?<cr> | |
map <F10> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' | |
\ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" | |
\ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR> | |
" helpers for profiling {{{ | |
nnoremap <silent> <leader>DD :exe ":profile start profile.log"<cr>:exe ":profile func *"<cr>:exe ":profile file *"<cr> | |
nnoremap <silent> <leader>DP :exe ":profile pause"<cr> | |
nnoremap <silent> <leader>DC :exe ":profile continue"<cr> | |
nnoremap <silent> <leader>DQ :exe ":profile pause"<cr>:noautocmd qall!<cr> | |
"}}} | |
"}}} | |
" autocmd {{{ | |
" go back to previous position of cursor if any | |
autocmd BufReadPost * | |
\ if line("'\"") > 0 && line("'\"") <= line("$") | | |
\ exe 'normal! g`"zvzz' | | |
\ endif | |
autocmd FileType js,scss,css autocmd BufWritePre <buffer> call StripTrailingWhitespace() | |
autocmd FileType css,scss setlocal foldmethod=marker foldmarker={,} | |
autocmd FileType css,scss nnoremap <silent> <leader>S vi{:sort<CR> | |
autocmd FileType python setlocal foldmethod=indent | |
autocmd FileType markdown setlocal nolist | |
"}}} | |
" vundle rtp load sequence requires the filetypes to be loaded after all bundles are loaded | |
filetype off | |
filetype plugin indent on | |
syntax enable | |
" color schemes {{{ | |
NeoBundle 'altercation/vim-colors-solarized' | |
NeoBundle 'nanotech/jellybeans.vim' | |
NeoBundle 'tomasr/molokai' | |
NeoBundle 'chriskempson/vim-tomorrow-theme' | |
NeoBundle 'w0ng/vim-hybrid' | |
NeoBundle 'sjl/badwolf' | |
NeoBundle 'jelera/vim-gummybears-colorscheme' | |
NeoBundle 'zeis/vim-kolor' "{{{ | |
let g:kolor_underlined=1 | |
"}}} | |
"colorscheme jellybeans | |
colorscheme molokai | |
"}}} | |
if filereadable(expand("~/.vimrc.local")) | |
echom "Sourcing ~/.vimrc.local is deprecated. Please consult the README on how to create a shim." | |
source ~/.vimrc.local | |
endif | |
NeoBundleCheck |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment