Skip to content

Instantly share code, notes, and snippets.

@adong
Created December 8, 2018 00:46
Show Gist options
  • Save adong/e685aa292cffad77d915b6e52de46a23 to your computer and use it in GitHub Desktop.
Save adong/e685aa292cffad77d915b6e52de46a23 to your computer and use it in GitHub Desktop.
" ==============================================================================
" Author: Alan Dong
" Version: 0.3.4
" README: TODO
" Last Modified Date: 12/07/2018
" Description: My Vim Configuration file
" ==============================================================================
" set shell for bash as default
set shell=/bin/bash
" leader
let mapleader = ','
let g:mapleader = ','
" syntax
syntax on
" manually load syntax highlighter
":set syn=syntax-type
"i.e. :set syn=python
" history : how many lines of history VIM has to remember
set history=10000
" filetype
filetype on
" Enable filetype plugins
filetype plugin on
filetype indent on
" base
set nocompatible " don't bother with vi compatibility
set autoread " reload files when changed on disk, i.e. via `git checkout`
set shortmess=atI
set magic " For regular expressions turn magic on
set title " change the terminal's title
set nobackup " do not keep a backup file
set novisualbell " turn off visual bell
set noerrorbells " don't beep
set visualbell t_vb= " turn off error beep/flash
set t_vb=
set tm=500
" always show report messages
set report=0
" show location
set cursorcolumn
set cursorline
" movement
set scrolloff=7 " keep 3 lines when scrolling
nnoremap k gk
nnoremap gk k
nnoremap j gj
nnoremap gj j
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
cnoremap <C-j> <t_kd>
cnoremap <C-k> <t_ku>
" show
set ruler " show the current row and column
set number " show line numbers
set nowrap
set showcmd " display incomplete commands
set showmode " display current modes
set showmatch " jump to matches when entering parentheses
set matchtime=2 " tenths of a second to show the matching parenthesis
" search
set hlsearch " highlight searches
set incsearch " do incremental searching, search as you type
set smartcase " no ignorecase if Uppercase char present
"set ignorecase " ignore case when searching"
" cancel highlight search
noremap <silent><leader>/ :nohls<CR>
noremap <leade<leader>>hl :set hlsearch! hlsearch?<CR>
" tab
set expandtab " expand tabs to spaces
set smarttab
set shiftround
" indent
set autoindent
set smartindent
set shiftwidth=2
set tabstop=2
set softtabstop=2 " insert mode tab and backspace use 2 spaces
vnoremap < <gv
vnoremap > >gv
" NOT SUPPORT
" set foldenable
" set foldmethod=indent
" set foldlevel=99
" encoding
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set termencoding=utf-8
set ffs=unix,dos,mac
set formatoptions+=m
" spell check
set spell
set spelllang=en_us
set formatoptions+=B
" select & complete
set selection=inclusive
set selectmode=mouse,key
set completeopt=longest,menu
set wildmenu " show a navigable menu for tab completion"
set wildmode=longest,list,full
set wildignore=*.o,*~,*.pyc,*.class
" if this not work ,make sure .viminfo is writable for you
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
" NOT SUPPORT
" Enable basic mouse behavior such as resizing buffers.
" set mouse=a
hi! link SignColumn LineNr
hi! link ShowMarksHLl DiffAdd
hi! link ShowMarksHLu DiffChange
" status line
set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P
set laststatus=2 " Always show the status line - use 2 lines for the status bar
" specific language
augroup myfiletypes
" Clear old autocmds in group
autocmd!
autocmd BufNewFile *.sh,*.py exec ":call AutoSetFileHead()"
autocmd FileType c,python set tabstop=4 shiftwidth=4 expandtab ai
autocmd FileType ruby,eruby,yaml,makrdown set tabstop=2 shiftwidth=2 softtabstop=2 expandtab ai
autocmd FileType c,cpp,java,go,php,javascript,puppet,python,rust,twig,xml,yml,perl autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()
autocmd FileType javascript,js,html set tabstop=2 shiftwidth=2 softtabstop=2 expandtab ai
autocmd BufRead,BufNewFile *.es6 setfiletype javascript
autocmd BufRead,BufNewFile *.js setfiletype javascript
" autocmd BufNewFile,BufRead *.jsx set filetype=javascript.jsx
autocmd FileType javascript setlocal omnifunc=tern#Complete
autocmd FileType javascript.jsx setlocal omnifunc=tern#Complete
" Folding for css
" autocmd BufRead,BufNewFile *.css,*.scss,*.less setlocal foldmethod=marker foldmarker={,}
" autocmd BufNewFile,BufRead *.xml,*.htm,*.html so XMLFolding
" Customized for zmanage to use 4 space indentation
let currDir = getcwd()
let targetSourcePath ="zmanage/web/js"
" let g:z = 1
" using echom g:z
if currDir =~ targetSourcePath
autocmd FileType javascript,js,html,handlebars,hbs set tabstop=4 shiftwidth=4 softtabstop=4 expandtab ai
endif
augroup END
function! AutoSetFileHead()
" .sh
if &filetype == 'sh'
call setline(1, "\#!/bin/bash")
endif
" python
if &filetype == 'python'
call setline(1, "\#!/usr/bin/env python")
call append(1, "\# encoding: utf-8")
endif
normal G
normal o
normal o
endfunc
" others
set backspace=indent,eol,start " make that backspace key work the way it should
set whichwrap+=<,>,h,l
" https://github.com/vim/vim/issues/3117 suppress python3 warnings
if has('python3')
silent! python3 1
endif
" Allow saving of files as sudo when I forgot to start vim using sudo.
cmap w!! w !sudo tee >/dev/null %
" F5 paste toggle
set pastetoggle=<F5>
au InsertLeave * set nopaste
" :r! cat and then paste ( shift + insert ) the content, and CTRL+D.
fun! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
" no ex mode
nnoremap Q <nop>
" remap vim
command! WQ wq
command! Wq wq
command! W w
command! Q q
command! Q1 q!
" Q map to q, to quit vim
command! -bar -bang Q quit<bang>
" update vim on the fly
nmap <leader>v :tabedit $MYVIMRC<CR>
nmap <leader>V :tabedit $MYVIMRC<CR>
autocmd! bufwritepost _vimrc source % " vimrc文件修改之后自动加载。 windows。
autocmd! bufwritepost .vimrc source % " vimrc文件修改之后自动加载。 linux。
" insert date in the following format
iab <expr> dd strftime("%a %b %_d %H:%M:%S %Z %Y")
" resize
nnoremap <leader><left> :vertical resize -5<cr>
nnoremap <leader><down> :resize +5<cr>
nnoremap <leader><up> :resize -5<cr>
nnoremap <leader><right> :vertical resize +5<cr>
" Wrap text
command! -nargs=* Wrap set wrap linebreak nolist
" Set spell check
command! -nargs=* Spell set spell!
" Make <leader>' switch between ' and "
nnoremap <leader>' ""yls<c-r>={'"': "'", "'": '"'}[@"]<cr><esc>
" map <silent> <leader>y :<C-u>silent '<,'>w !pbcopy<CR>
" avoid and recover from accidental Ctrl-U
inoremap <c-u> <c-g>u<c-u>
inoremap <c-w> <c-g>u<c-w>
inoremap <silent> <C-W> <C-\><C-O>db
inoremap <silent> <C-U> <C-\><C-O>d0
inoremap <silent> <C-Y> <C-R>"
" ==============================================================================
" Vundle
" ==============================================================================
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" Essentials
Plugin 'gmarik/Vundle.vim'
Plugin 'L9'
Plugin 'vim-ruby/vim-ruby'
Plugin 'tpope/vim-rails'
Plugin 'tpope/vim-fugitive'
Plugin 'tpope/vim-repeat'
Plugin 'tpope/vim-surround'
Plugin 'tpope/vim-ragtag'
" SVN
Plugin 'juneedahamed/svnj.vim'
" Airline
Plugin 'bling/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
" Make Vim play nicely
Plugin 'sjl/vitality.vim'
Plugin 'guns/vim-sexp.git'
Plugin 'tpope/vim-sensible'
Plugin 'tpope/vim-speeddating'
Plugin 'tpope/vim-abolish'
Plugin 'tpope/vim-unimpaired'
Plugin 'tpope/vim-eunuch'
Plugin 'tpope/vim-sexp-mappings-for-regular-people'
" File explorer
Plugin 'scrooloose/nerdtree'
" Errors, open error list
" lclose, location close
Plugin 'scrooloose/syntastic'
" show corresponding file
Plugin 'vim-scripts/a.vim'
" syntax highlight
Plugin 'othree/html5.vim'
" Plugin 'othree/vim-coffee-script'
" Plugin 'lukaszkorecki/CoffeeTags'
Plugin 'mustache/vim-mustache-handlebars'
Plugin 'othree/javascript-libraries-syntax.vim'
Plugin 'cakebaker/scss-syntax.vim'
Plugin 'groenewege/vim-less'
" Plugin 'briancollins/vim-jst'
Plugin 'autowitch/hive.vim'
Plugin 'motus/pig.vim'
" ES6 ES2015
Plugin 'othree/yajs.vim'
Plugin 'isRuslan/vim-es6'
" JSX, deprecated
Plugin 'mxw/vim-jsx'
" json
Plugin 'elzr/vim-json'
" TODO list
Plugin 'vim-scripts/TaskList.vim'
" Markdown
Plugin 'plasticboy/vim-markdown'
" Plugin 'mzlogin/vim-markdown-toc'
"python highlight
" Plugin 'hdima/python-syntax'
" Plugin 'derekwyatt/vim-scala'
Plugin 'Konfekt/FastFold'
" JavaScript
Plugin 'vim-scripts/SyntaxComplete'
Plugin 'pangloss/vim-javascript'
" Plugin 'jelera/vim-javascript-syntax'
" Plugin 'burnettk/vim-angular'
" Plugin 'mattn/jscomplete-vim'
Plugin 'marijnh/tern_for_vim'
" JS beautifier, formatting javascript
" require nodejs and npm -g install js-beautify
" Plugin 'einars/js-beautify'
" Plugin 'maksimr/vim-jsbeautify'
" auto complete
" Plugin 'ervandew/supertab'
" Plugin 'Shougo/neocomplcache.vim'
Plugin 'Shougo/neocomplete.vim'
" Plugin 'othree/vim-autocomplpop'
" Plugin 'valloric/YouCompleteMe'
" Plugin 'ldong/vim_youcompleteme'
" Unite, CtrlP
Plugin 'Shougo/vimproc.vim'
Plugin 'Shougo/unite.vim'
" MRU
Plugin 'yegappan/mru'
" eol
Plugin 'vim-scripts/PreserveNoEOL'
" regex ,/ toggle
Plugin 'othree/eregex.vim'
" remove trailing whitespace by :FixWhitespace
Plugin 'bronson/vim-trailing-whitespace'
" comments
Plugin 'tomtom/tcomment_vim'
" ctags
Plugin 'majutsushi/tagbar'
Plugin 'ramitos/jsctags'
Plugin 'xolox/vim-misc'
Plugin 'xolox/vim-easytags'
" Align
Plugin 'godlygeek/tabular'
" Pairs
Plugin 'vim-scripts/matchit.zip'
Plugin 'jiangmiao/auto-pairs'
" parentheses
Plugin 'kien/rainbow_parentheses.vim'
" Gundo vim undo tree
Plugin 'sjl/gundo.vim'
" Jumps ctrl-i ctrl-o zp zP gf
Plugin 'justinmk/vim-sneak'
Plugin 'Lokaltog/vim-easymotion'
Plugin 'tommcdo/vim-kangaroo'
" mark
Plugin 'kshenoy/vim-signature'
" Calendar plugin
Plugin 'mattn/calendar-vim'
" Zen coding
Plugin 'mattn/emmet-vim'
" CSS coloring
Plugin 'gorodinskiy/vim-coloresque'
Plugin 'guns/xterm-color-table.vim'
" auto save, auto-save
Plugin '907th/vim-auto-save'
" Track the engine.
Plugin 'SirVer/ultisnips'
" Snippets are separated from the engine. Add this if you want them:
Plugin 'honza/vim-snippets'
" previewing markdown in browser <Leader>P
Plugin 'greyblake/vim-preview'
" Goyo, distraction free
" Plugin 'junegunn/goyo.vim'
" Plugin 'junegunn/limelight.vim'
" Scratch, :Scratch :Sscratch
Plugin 'duff/vim-scratch'
" multiple cursor, Ctrl-p for prev, Ctrl-n for next, Ctrl-x to skip
Plugin 'terryma/vim-multiple-cursors'
" select regions, Press + to expand the visual selection and _ to shrink it.
Plugin 'terryma/vim-expand-region'
" increment
" Plugin 'vim-scripts/BlockWork'
" Plugin 'qwertologe/nextval.vim'
Plugin 'vim-scripts/VisIncr'
" \as to activate autonumbering
" Plugin 'vim-scripts/autonumbering-in-vim'
"Insert line numbers: http://vim.wikia.com/wiki/Insert_line_numbers
" draw it
" <leader>di to start DrawIt and
" <leader>ds to stop DrawIt.
" uses keboard it overwrites ,v
" Plugin 'vim-scripts/DrawIt'
Plugin 'vim-scripts/sketch.vim' " uses mouse
" Window management
Plugin 'wesQ3/vim-windowswap'
" Latex
" Plugin 'LaTeX-Box-Team/LaTeX-Box'
" Auto detect CJK and Unicode file encodings
Plugin 'mbbill/fencview'
" rst
" Plugin 'rykka/os.vim'
" Plugin 'Rykka/clickable.vim'
" Plugin 'Rykka/clickable-things'
" Plugin 'Rykka/riv.vim'
" Plugin 'nvie/vim-rst-tables'
" Gist
Plugin 'mattn/webapi-vim'
Plugin 'mattn/gist-vim'
" Intent Guides
Plugin 'nathanaelkane/vim-indent-guides'
" colorscheme
Plugin 'altercation/vim-colors-solarized'
Plugin 'sickill/vim-monokai'
Plugin 'tomasr/molokai'
Plugin 'nanotech/jellybeans.vim'
Plugin 'benjaminwhite/Benokai'
Plugin 'romainl/flattened'
" Mini Buffer
" Plugin 'techlivezheng/vim-plugin-minibufexpl'
" using vim as slides
" Plugin 'ingydotnet/vroom-pm'
" split vim into two pane
" Plugin 'vim-voom/VOoM'
" Plugin 'vim-voom/VOoM_extras'
" Split and Join
Plugin 'AndrewRadev/splitjoin.vim'
" ldong
Plugin 'ldong/vim_bclose'
Plugin 'ldong/vim_autohighlight'
Plugin 'ldong/vim_copy_paste'
Plugin 'ldong/vim-listify'
Plugin 'ldong/file-line'
" Games
" Plugin 'ldong/battleship'
" <Leader>te
" Game tetris
" Plugin 'vim-scripts/TeTrIs.vim'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" install Vundle bundles
if filereadable(expand("~/.vimrc.bundles"))
source ~/.vimrc.bundles
endif
" ==============================================================================
" NeoComplete
" ==============================================================================
"Note: This option must set it in .vimrc(_vimrc). NOT IN .gvimrc(_gvimrc)!
" Disable AutoComplPop.
let g:acp_enableAtStartup = 0
" Use neocomplete.
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\*'
" Define dictionary.
let g:neocomplete#sources#dictionary#dictionaries = {
\ 'default' : '',
\ 'vimshell' : $HOME.'/.vimshell_hist',
\ 'scheme' : $HOME.'/.gosh_completions'
\ }
" Define keyword.
if !exists('g:neocomplete#keyword_patterns')
let g:neocomplete#keyword_patterns = {}
endif
let g:neocomplete#keyword_patterns['default'] = '\h\w*'
" 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 (pumvisible() ? "\<C-y>" : "" ) . "\<CR>"
" For no inserting <CR> key.
"return pumvisible() ? "\<C-y>" : "\<CR>"
endfunction
" <TAB>: completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ neocomplete#start_manual_complete()
function! s:check_back_space() "{{{
let col = col('.') - 1
return !col || getline('.')[col - 1] =~ '\s'
endfunction"}}}
inoremap <expr><Down> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr><Up> pumvisible() ? "\<C-p>" : "\<Up>"
" <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>"
" Close popup by <Space>.
"inoremap <expr><Space> pumvisible() ? "\<C-y>" : "\<Space>"
" AutoComplPop like behavior.
"let g:neocomplete#enable_auto_select = 1
" Shell like behavior(not recommended).
"set completeopt+=longest
"let g:neocomplete#enable_auto_select = 1
"let g:neocomplete#disable_auto_complete = 1
"inoremap <expr><TAB> pumvisible() ? "\<Down>" : "\<C-x>\<C-u>"
" 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:neocomplete#sources#omni#input_patterns')
let g:neocomplete#sources#omni#input_patterns = {}
endif
"let g:neocomplete#sources#omni#input_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
"let g:neocomplete#sources#omni#input_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)'
"let g:neocomplete#sources#omni#input_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::'
" For perlomni.vim setting.
" https://github.com/c9s/perlomni.vim
let g:neocomplete#sources#omni#input_patterns.perl = '\h\w*->\h\w*\|\h\w*::'
" ==============================================================================
" Plugins Configuration
" ==============================================================================
" ,nt to open nerdTree
let NERDTreeIgnore=['\~$', '\.swp$', '\.git', '\.hg', '\.svn', '\.bzr']
" <leader><leader>r rename
nmap <silent> <leader>nt :NERDTreeToggle<CR>
" ,tb to open tagbar
nmap <silent> <leader>tb :TagbarToggle<CR>
" Ctags, check the parent directories for tags, too.
set tags=./.tags;,./tags
let g:easytags_dynamic_files = 1
let g:easytags_file = '~/.vim/tags'
let g:easytags_updatetime_min=12000
let g:easytags_async = 1
" ctags
let g:tagbar_type_javascript = {
\ 'ctagsbin' : '/usr/local/bin/jsctags'
\ }
" fix whitespace
command! F FixWhitespace
" redfine emmet shortcut: ,e,
let g:user_emmet_install_global = 1
let g:user_emmet_leader_key = '<leader>e'
" let g:user_emmet_install_global = 0
" autocmd FileType html,css,eruby,markdown,handlebars,hbs,php EmmetInstall
" Gundo toggle
nnoremap <leader>h :GundoToggle<CR>
" MiniBufExplorer
" let g:miniBufExplCycleArround = 1
" map <Leader>b :MBEToggle<cr>
" map <Leader>p :MBEbn<cr>
" map <leader>P :MBEbp<cr>
" change from tabs
" nnoremap <C-Tab> :tabn<CR>
" nnoremap <C-S-Tab> :tabp<CR>
" change from buffers
" nnoremap <C-Tab> :bn<CR>
" nnoremap <C-S-Tab> :bp<CR>
" Airline
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
" use powerline font if installed
" let g:airline_powerline_fonts = 1
" let g:airline#extensions#tabline#enabled = 1
let g:airline_theme = 'powerlineish'
let g:airline#extensions#branch#enable = 1
let g:airline#extensions#syntastic#enabled = 1
let g:airline#extensions#bufferline#enabled= 1
" vim-powerline symbols
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '»'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '«'
let g:airline_symbols.branch = '⤴' "➔, ➥, ⎇
let g:airline_symbols.readonly = '⊘'
let g:airline_symbols.linenr = '¶'
let g:airline_symbols.paste = 'ρ'
let g:airline_symbols.whitespace = 'Ξ'
let g:airline_section_b = '%{getcwd()}'
" vim-session autosave
let g:auto_save = 1
let g:auto_save_in_insert_mode = 0
let g:session_autoload = 'no'
let g:session_autosave = 'yes'
let g:session_autosave_periodic = 3
" auto save
autocmd BufLeave,CursorHold,CursorHoldI,FocusLost * silent! wa
" enable indent guides
nmap <silent> <Leader>ig <Plug>IndentGuidesToggle
let g:indent_guides_auto_colors = 0
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd guibg=red ctermbg=3
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=green ctermbg=4
hi IndentGuidesOdd ctermbg=black
hi IndentGuidesEven ctermbg=darkgrey
" eregex regex
let g:eregex_default_enable = 0
nnoremap <leader>r :call eregex#toggle()<CR>
" => UltiSnips
let g:UltiSnipsExpandTrigger="k"
let g:UltiSnipsExpandTrigger="<c-e>"
let g:UltiSnipsListSnippets="<c-l>"
" enable always save with eol at the end of file
let b:PreserveNoEOL = 1
" easy motion
" leader leader w
" leader leader gE
" leader leader t
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Unite
" <C-x> <C-v> open file in horizontal and vertical split
" <C-t> open file in new tab
" <esc> exit unite window
" <C-j> <C-k> Navigation, keep hands on home row
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nnoremap <C-p> :Unite file_rec/async<cr>
nnoremap <Leader>b :Unite buffer<cr>
nnoremap <space>/ :Unite grep:.<cr>
let g:unite_source_history_yank_enable = 1
nnoremap <space>y :Unite history/yank<cr>
nnoremap <space>s :Unite -quick-match buffer<cr>
nnoremap <C-P> :<C-u>Unite -buffer-name=files -start-insert buffer file_rec/async:!<cr>
autocmd FileType unite call s:unite_settings()
function! s:unite_settings()
let b:SuperTabDisabled = 1
imap <buffer> <C-j> <Plug>(unite_select_next_line)
imap <buffer> <C-k> <Plug>(unite_select_previous_line)
imap <silent><buffer><expr> <C-x> unite#do_action('split')
imap <silent><buffer><expr> <C-v> unite#do_action('vsplit')
imap <silent><buffer><expr> <C-t> unite#do_action('tabopen')
nmap <buffer> <ESC> <Plug>(unite_exit)
endfunction
let g:SuperTabCrMapping = 0
let g:unite_enable_start_insert = 1
let g:unite_split_rule = "botright"
let g:unite_force_overwrite_statusline = 0
let g:unite_source_rec_max_cache_files = 0
let g:ctrlp_max_files = 0
let g:CommandTMaxFiles = 200000
let g:CommandTFileScanner = 'find'
let g:unite_winheight = 10
call unite#filters#sorter_default#use(['sorter_rank'])
call unite#filters#matcher_default#use(['matcher_fuzzy'])
call unite#custom_source('file_rec/async,file_mru,file,buffer,grep',
\ 'ignore_pattern', join([
\ '\.git/',
\ '\.svn/',
\ 'node_modules/',
\ ], '\|'))
call unite#custom_source('file_rec/async', 'converters', [])
call unite#custom_source('file_rec/async', 'sorters', ['sorter_length'])
call unite#custom_source('file_rec/async', 'max_candidates', 1000)
call unite#custom_source('file_rec/async,file_rec/git', 'ignore_globs', [])
call unite#custom#profile('files', 'filters', 'sorter_rank')
" https://github.com/tony/vim-config/blob/master/settings/unite.vim#L78
if executable('ag')
let g:unite_source_grep_command = 'ag'
let g:unite_source_grep_default_opts = '--nocolor --nogroup -S -C4'
let g:unite_source_grep_recursive_opt = ''
elseif executable('ack-grep')
let g:unite_source_grep_command = 'ack-grep'
let g:unite_source_grep_default_opts = '--no-heading --no-color -a -H'
"let g:unite_source_grep_default_opts = '--no-heading --no-color -a -w'
let g:unite_source_grep_default_opts .= '--exclude ''\.(git|svn|hg|bzr)'''
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 -C4'
let g:unite_source_grep_recursive_opt = ''
endif
" Appropriately close the buffer without closing the window
cnoremap <expr> bd (getcmdtype() == ':' ? 'Bclose' : 'bd')
" => Syntastic
" Update Error List, enable lnext, lprev to go back and forth
let g:syntastic_always_populate_loc_list = 1
" :SyntasticInfo
let g:syntastic_java_javac_config_file_enabled = 1
" let g:syntastic_python_checkers = ['pylint', 'flake8', 'python']
let g:syntastic_python_checkers = ['pylint', 'python']
let g:syntastic_python_pylint_args='--ignore=E501'
" let g:syntastic_python_pylint_args='--ignore=W0511,C0321'
" general
"let g:syntastic_check_on_open = 1
"let g:syntastic_quiet_warnings = 0
"let g:syntastic_enable_signs = 1
"let g:syntastic_enable_highlighting = 0
"let g:syntastic_python_checker_args='--ignore=E501,E302,E231,E261,E201,W402,W293'
" highlight python
" let python_highlight_all = 1
" javascript style guide lint checker
let g:syntastic_javascript_checkers = ['eslint']
" let g:syntastic_javascript_checkers = ['jsxhint', 'jscs']
" let g:syntastic_javascript_checkers = []
" let g:syntastic_scss_checkers = ['scss_lint']
let g:syntastic_scss_checkers = []
" Preview latex after compliation
" " \ll compile; \lv view
" let g:LatexBox_viewer = "open /Applications/Preview.app"
" vim_json settings
let g:vim_json_syntax_conceal = 0
" let g:vim_json_warnings=1
" fugitive shortcuts
noremap \gs :Gstatus<cr>
noremap \gc :Gcommit<cr>
noremap \ga :Gwrite<cr>
noremap \gl :Glog<cr>
noremap \gd :Gdiff<cr>
noremap \gb :Gblame<cr>
"surrounding, shortcuts: ds, cs, yss
"ysiw}
"ds{
nmap <Leader>as ysiw
nmap <Leader>ds ds
" 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,, :Tabularize /,\zs<CR>
vmap <Leader>a,, :Tabularize /,\zs<CR>
nmap <Leader>a<Bar> :Tabularize /<Bar><CR>
vmap <Leader>a<Bar> :Tabularize /<Bar><CR>
" draw ascii using mouse
" map <leader>d :call ToggleSketch()<CR>
" define Goyo shortcut
" nnoremap <Leader>G :Goyo<CR>
" MRU
let MRU_Max_Entries = 20
let MRU_Exclude_Files = '^/tmp/.*\|^/var/tmp/.*'
let MRU_Window_Height = 5
let MRU_Auto_Close = 1
" SVNJ
" SVN Cache location is $HOME/.cache
let g:svnj_browse_cache_all = 1
" Customized Abbreviation
abbr rq require("");<esc>2
" Java Abbreviation
abbr psvm public static void main(String[] args){<CR>}<esc>O
abbr sysout System.out.println("");<esc>2hi
abbr syserr System.err.println("");<esc>2hi
abbr fori for (int i = 0; i < ; i++) {<esc>7hi
abbr tryb try {<CR>} catch (Exception ex) {<CR> ex.printStackTrace();<CR>}<esc>hx3ko
abbr ctm System.currentTimeMillis()
" Vim preview markdown
autocmd BufNewFile,BufRead \*.{md,mdwn,mkd,mkdn,mark\*} set filetype=markdown
" ,hp = html preview
map <silent> <leader>hp :!open -a Safari %<CR><CR>
" windowswap
"1. Navigate to the window you'd like to move
"2. Press <leader>ww
"3. Navigate to the window you'd like to swap with
"4. Press <leader>ww again
" ==============================================================================
" Mappings
" ==============================================================================
" Use single quote as additional range key
noremap ' `
" Rerun previous :command
noremap \' @:
" Underline a line with hyphens (<h2> in Markdown documents)
noremap \- yypVr-
" Underline a line with equals (<h1> in Markdown documents)
noremap \= yypVr=
" Remove white space turds from the ends of lines
noremap \W :FixWhitespace<cr>
" Delete ALL THE BUFFERS!
noremap \bd :1,999bd<cr>:NERDTree<cr>:NERDTree<cr>
" cd current window to parent directory of file
noremap \cd :lcd %:h<cr>:pwd<cr>
" Copy path of current file to clipboard
noremap \cf :let @+ = expand("%")<cr>
" Copy full path of current file to clipboard
noremap \cp :let @+ = expand("%:p")<cr>
" copy current filename into system clipboard - mnemonic: (c)urrent(f)ilename
" this is helpful to paste someone the path you're looking at
nnoremap <silent> ,cf :let @* = expand("%:~")<CR>
nnoremap <silent> ,cr :let @* = expand("%")<CR>
nnoremap <silent> ,cn :let @* = expand("%:t")<CR>" Generate ctags and cscope
"(v)im (c)ommand - execute current line as a vim command
nmap <silent> <leader>vc yy:<C-f>p<C-c><CR>
"(v)im (r)eload
nmap <silent> <leader>vr :so %<CR>
" "ctags -R
" "cscope -Rbq
noremap \ct :!ctags -R .<cr><cr>
" Sort selection
noremap \s :sort<cr>
" selec the whole line
noremap \v ^v$
" selec the whole line without leading space
noremap \vv 0v$
" Put contents of parentheses on their own newline and reindent (must position
" cursor inside parentheses in normal mode first).
nmap \( ci(<cr><esc>Pa<cr><esc>Vkk=
" Break a comma-delimited list onto new lines
vmap \, :s/,/,\r/g<cr>)
" copy filename and filepath
nmap <leader>cn :let @*=expand("%")<CR>
nmap <leader>cp :let @*=expand("%:p")<CR>
" Error List
noremap <leader>ln :lnext<cr>
noremap <leader>lp :lprev<cr>
" redent
map <leader>= :delmarks z<CR>mzgg=G`zmzk<CR>
" reverse lines
" :g/^/m0
" :100,150g/^/m99
" :%!tac
" :100,150!tac
" Reverse selection
" \rh: mirror image the lines (reverse horizontally)
vnoremap ;rh c<C-O>:set revins<CR><C-R>"<Esc>:set norevins<CR>
" \rv: reverse the order of lines (reverse vertically)
nmap ;rv :set lz<CR>o<Esc>mz'aO<Esc>ma:'a+1,'z-1g/^/m 'a<CR>'addma'zdd:set nolz<CR>
" replace current word select
nnoremap <Leader>s :%s/\<<C-r><C-w>\>/
" pretty print json
nnoremap <leader>J :%!python -m json.tool<CR>
" tidy html
nnoremap <leader>T :%!tidy -qicbn -asxhtml<CR>
" Use numbers to pick the tab you want (like iTerm)
map <silent> <D-1> :tabn 1<cr>
map <silent> <D-2> :tabn 2<cr>
map <silent> <D-3> :tabn 3<cr>
map <silent> <D-4> :tabn 4<cr>
map <silent> <D-5> :tabn 5<cr>
map <silent> <D-6> :tabn 6<cr>
map <silent> <D-7> :tabn 7<cr>
map <silent> <D-8> :tabn 8<cr>
map <silent> <D-9> :tabn 9<cr>
" config backup directory
set backup
set backupdir=~/.vimswap
set backupskip=~/.vimswap/*
set directory=~/.vimswap
set writebackup
" config swap file
set swapfile
set dir=~/.vimswap
" count occurrence of WORD
" %s/pattern-here//gn
" ==============================================================================
" Color Theme
" ==============================================================================
try " Solarized
if has('gui_running')
colorscheme solarized
let g:solarized_termcolors= 256
let g:solarized_termtrans = 0
let g:solarized_degrade = 0
let g:solarized_bold = 1
let g:solarized_underline = 1
let g:solarized_italic = 1
let g:solarized_visibility= "normal"
let g:solarized_contrast = "low"
" set background=light
set guifont=Menlo:h15
set transparency=3
set background=dark
else
" set t_Co=256
" let g:solarized_termcolors = 256
let g:solarized_termcolors = 16
let g:solarized_visibility = "high"
let g:solarized_contrast = "high"
colorscheme solarized
set background=dark
endif
catch /^Vim\%((\a\+)\)\=:E185/
let g:molokai_original = 1
let g:rehash256 = 1
set background=dark
for scheme in [ 'molokai', 'monokai', 'Benokai' 'desert' ]
try
execute 'colorscheme '.scheme
break
catch
continue
endtry
endfor
endtry
" let g:jellybeans_use_lowcolor_black = 0
" colorscheme jellybeans
hi clear SpellBad
hi SpellBad cterm=undercurl,bold
" hi SpellBad cterm=undercurl,bold ctermfg=blue
" set highlight color after 80 regardless of the version of VIM
if exists('+colorcolumn')
" let &colorcolumn="80,".join(range(120,999),",")
let &colorcolumn="80"
highlight ColorColumn ctermbg=9 guibg=#df0000
else
" fallback for Vim < v7.3
au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
endif
" Vim Cheat Sheets
" Folding commands
" fold: zf, zo, zc, za
" zf#j creates a fold from the cursor down # lines.
" zf/string creates a fold from the cursor to string .
" zj moves the cursor to the next fold.
" zk moves the cursor to the previous fold.
" zo opens a fold at the cursor.
" zc closes a fold at the cursor.
" zO opens all folds at the cursor.
" zm increases the foldlevel by one.
" zM closes all open folds.
" zr decreases the foldlevel by one.
" zR decreases the foldlevel to zero -- all folds will be open.
" zd deletes the fold at the cursor.
" zE deletes all folds.
" [z move to start of open fold.
" ]z move to end of open fold.
" fold folding, http://goo.gl/jBYmdU
" set foldcolumn=3
" set foldmethod=syntax
" set foldlevelstart=3
" let javaScript_fold=1 " JavaScript
" let perl_fold=1 " Perl
" let php_folding=1 " PHP
" let r_syntax_folding=1 " R
" let ruby_fold=1 " Ruby
" let sh_fold_enabled=1 " sh
" let vimsyn_folding='af' " Vim script
" let xml_syntax_folding=1 " XML
" HIVE
" for .hql files
au BufNewFile,BufRead *.hql set filetype=hive expandtab
" for .q files
au BufNewFile,BufRead *.q set filetype=hive expandtab
" ================ Completion =======================
set wildmode=list:longest
set wildmenu "enable ctrl-n and ctrl-p to scroll thru matches
set wildignore=*.o,*.obj,*~ "stuff to ignore when tab completing
set wildignore+=*vim/backups*
set wildignore+=*sass-cache*
set wildignore+=*DS_Store*
set wildignore+=vendor/rails/**
set wildignore+=vendor/cache/**
set wildignore+=*.gem
set wildignore+=log/**
set wildignore+=tmp/**
set wildignore+=*.png,*.jpg,*.gif
"Go to last edit location with ,.
nnoremap ,. '.
"Move back and forth through previous and next buffers
"with ,z and ,x
nnoremap <silent> ,z :bp<CR>
nnoremap <silent> ,x :bn<CR>
" Create window splits easier. The default
" way is Ctrl-w,v and Ctrl-w,s. I remap
" this to vv and ss
nnoremap <silent> vv <C-w>v
nnoremap <silent> ss <C-w>s
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment