Last active
March 14, 2017 19:57
-
-
Save d8660091/0400199d050c3748c1d66ce5ef87535c to your computer and use it in GitHub Desktop.
vimrc
This file contains 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
" vim: fdm=marker ts=2 sts=2 sw=2 fdl=0 | |
if has('nvim') | |
let $NVIM_TUI_ENABLE_CURSOR_SHAPE=1 | |
set termguicolors | |
else | |
" True color for vim inside st | |
let &t_8f = "[38;2;%lu;%lu;%lum" | |
let &t_8b = "[48;2;%lu;%lu;%lum" | |
set termguicolors | |
endif | |
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/vendor/* | |
let mapleader = "," | |
set clipboard=unnamedplus "sync with OS clipboard | |
set noswapfile | |
set expandtab "spaces instead of tabs | |
set smarttab "use shiftwidth to enter tabs | |
set timeoutlen=500 "leader key timeout | |
set ignorecase | |
set smartcase | |
set incsearch | |
set hlsearch | |
let &tabstop=2 "number of spaces per tab for display | |
let &softtabstop=2 "number of spaces per tab in insert mode | |
let &shiftwidth=2 "number of spaces when indenting | |
set undofile "persistent undo | |
set undodir=$HOME/.vimundo | |
call plug#begin() | |
Plug 'junegunn/vim-easy-align' "{{{ | |
xmap ga <Plug>(EasyAlign) | |
nmap ga <Plug>(EasyAlign) | |
"}}} | |
Plug 'elmcast/elm-vim', { 'for': 'elm' } | |
Plug 'tpope/vim-repeat', | |
Plug 'lumiliet/vim-twig' | |
Plug 'justinmk/vim-sneak' | |
Plug 'tpope/vim-unimpaired' | |
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' "{{{ | |
let g:UltiSnipsExpandTrigger = "<tab>" | |
let g:UltiSnipsJumpForwardTrigger = "<c-f>" | |
let g:UltiSnipsJumpBackwardTrigger = "<c-b>" | |
autocmd BufRead,BufNewFile,BufEnter *Spec.php UltiSnipsAddFiletypes php-phpspec | |
"}}} | |
Plug 'airblade/vim-gitgutter' | |
Plug 'majutsushi/tagbar' "{{{ | |
nmap <F8> :TagbarToggle<CR> | |
"}}} | |
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } | |
Plug 'editorconfig/editorconfig-vim' | |
Plug 'scrooloose/nerdtree' "{{{ | |
let NERDTreeShowHidden=1 | |
let NERDTreeQuitOnOpen=0 | |
let NERDTreeShowLineNumbers=1 | |
let g:NERDTreeWinPos='right' | |
nnoremap <F2> :NERDTreeToggle<CR> | |
nnoremap <F3> :NERDTreeFind<CR> | |
"}}} | |
Plug 'tpope/vim-fugitive' | |
Plug 'godlygeek/tabular' | |
Plug 'plasticboy/vim-markdown' "{{{ | |
let g:vim_markdown_frontmatter = 1 | |
"}}} | |
Plug 'mileszs/ack.vim' "{{{ | |
let g:ackprg = "ag --vimgrep" | |
"}}} | |
Plug 'terryma/vim-multiple-cursors' | |
Plug 'pangloss/vim-javascript', { 'for': 'javascript' } | |
Plug 'mxw/vim-jsx', { 'for': 'javascript' } "{{{ | |
let g:jsx_ext_required = 0 | |
"}}} | |
Plug 'cakebaker/scss-syntax.vim', { 'for': 'scss' } | |
Plug 'mattn/emmet-vim' | |
Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } | |
Plug 'mhinz/vim-startify' "{{{ | |
nnoremap <F1> :Startify<cr> | |
let g:startify_change_to_vcs_root = 1 | |
"}}} | |
Plug 'tmhedberg/matchit' | |
Plug 'tpope/vim-surround' | |
Plug 'scrooloose/nerdcommenter' "{{{ | |
let g:NERDSpaceDelims = 1 | |
"}}} | |
Plug 'bling/vim-airline' | Plug 'vim-airline/vim-airline-themes' " {{{ | |
nmap <leader># :b#<CR> | |
nmap <leader>1 <Plug>AirlineSelectTab1 | |
nmap <leader>2 <Plug>AirlineSelectTab2 | |
nmap <leader>3 <Plug>AirlineSelectTab3 | |
nmap <leader>4 <Plug>AirlineSelectTab4 | |
nmap <leader>5 <Plug>AirlineSelectTab5 | |
nmap <leader>6 <Plug>AirlineSelectTab6 | |
nmap <leader>7 <Plug>AirlineSelectTab7 | |
nmap <leader>8 <Plug>AirlineSelectTab8 | |
nmap <leader>9 <Plug>AirlineSelectTab9 | |
let g:airline_powerline_fonts=1 | |
let g:airline#extensions#tabline#enabled = 1 | |
let g:airline#extensions#tabline#left_sep = ' ' | |
let g:airline#extensions#tabline#left_alt_sep = '¦' | |
let g:airline#extensions#tabline#buffer_idx_mode = 1 | |
let g:airline#extensions#tabline#show_splits = 0 | |
let g:airline#extensions#tabline#fnamemod = ':t' | |
let g:airline#extensions#tabline#formatter = 'unique_tail_improved' | |
" }}} | |
Plug 'coot/atp_vim' " {{{ | |
let g:atp_folding=1 | |
let g:tex_flavor='latex' | |
let b:atp_Viewer="zathura" | |
"}}} | |
Plug 'Shougo/neomru.vim' | |
Plug 'tacahiroy/ctrlp-funky' | |
Plug 'kien/ctrlp.vim' "{{{ | |
let g:ctrlp_cmd = 'CtrlPMixed' | |
"let g:ctrlp_user_command = 'git ls-files --exclude-standard %s' | |
let g:ctrlp_max_height=15 | |
let g:ctrlp_show_hidden=0 | |
let g:ctrlp_follow_symlinks=1 | |
let g:ctrlp_reuse_window='startify' | |
let g:ctrlp_extensions=['funky'] | |
let g:ctrlp_custom_ignore = { | |
\ 'dir': '\v[\/](\.(git|hg|svn|idea)$)|(node_modules)', | |
\ 'file': '\v\.DS_Store$' | |
\ } | |
nmap \ [ctrlp] | |
nnoremap [ctrlp] <nop> | |
nnoremap [ctrlp]f :FZF<cr> | |
nnoremap [ctrlp]T :CtrlPTag<cr> | |
nnoremap [ctrlp]l :CtrlPLine<cr> | |
nnoremap [ctrlp]o :CtrlPFunky<cr> | |
nnoremap [ctrlp]b :CtrlPBuffer<cr> | |
"}}} | |
Plug 'nanotech/jellybeans.vim' | |
Plug 'itchyny/vim-haskell-indent', { 'for': 'haskell' } | |
Plug 'ervandew/supertab' "{{{ | |
let g:SuperTabDefaultCompletionType = '<C-n>' | |
"}}} | |
Plug 'neomake/neomake' " {{{ | |
autocmd! BufWritePost * Neomake | |
let g:neomake_javascript_enabled_makers = ['eslint'] | |
let g:neomake_php_enabled_makers = ['php'] | |
" let g:neomake_javascript_eslint_exe = system('PATH=$(npm bin):$PATH && which eslint | tr -d "\n"') | |
" let g:neomake_typescript_enabled_makers = ['tslint'] | |
" let g:neomake_css_enabled_makers = ['stylelint'] | |
" let g:neomake_css_stylelint_exe = system('PATH=$(npm bin):$PATH && which stylelint | tr -d "\n"') | |
" "}}} | |
if has('nvim') | |
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins'} "{{{ | |
let g:deoplete#enable_at_startup = 1 | |
let g:tern_request_timeout = 1 | |
let g:tern_show_signature_in_pum = '0' | |
"}}} | |
else | |
Plug 'Valloric/YouCompleteMe' "{{{ | |
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>'] | |
let g:ycm_autoclose_preview_window_after_completion=0 | |
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>'] | |
let g:SuperTabDefaultCompletionType = '<C-n>' | |
let g:ycm_server_python_interpreter= '/usr/bin/python' | |
nnoremap <leader>gd :YcmCompleter GoToDefinition<CR> | |
nnoremap <leader>gr :YcmCompleter GoToReferences<CR> | |
"}}} | |
" Plug 'scrooloose/syntastic' " replaced by neomake {{{ | |
" set statusline+=%#warningmsg# | |
" set statusline+=%{SyntasticStatuslineFlag()} | |
" set statusline+=%* | |
" let g:syntastic_always_populate_loc_list = 1 | |
" let g:syntastic_auto_loc_list = 0 | |
" let g:syntastic_check_on_open = 0 | |
" let g:syntastic_check_on_wq = 0 | |
" let g:syntastic_haskell_checkers=[''] | |
" let g:syntastic_latex_checkers=[''] | |
" let g:syntastic_javascript_checkers = ['eslint'] | |
" "}}} | |
endif | |
call plug#end() | |
if has('nvim') | |
call deoplete#custom#set('ultisnips', 'min_pattern_length', 1) | |
endif | |
" ui configuration {{{ | |
syntax enable | |
exec 'colorscheme jellybeans' | |
set showmatch "automatically highlight matching braces/brackets/etc. | |
set matchtime=2 "tens of a second to show matching parentheses | |
set number | |
set lazyredraw | |
set laststatus=2 | |
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 "black bar | |
if has('conceal') | |
set conceallevel=0 | |
set listchars+=conceal:Δ | |
endif | |
if has('gui_running') | |
" open maximized | |
" set lines=999 columns=9999 | |
set guioptions+=t "tear off menu items | |
set guioptions-=T "toolbar icons | |
set guioptions-=L "disable scroll bar | |
set guioptions-=r "disable scroll bar | |
if has('gui_gtk') | |
set gfn=Source\ Code\ Pro\ for\ Powerline\ 12 | |
" set gfn=Ubuntu\ Mono\ 11 | |
set guioptions=ai | |
endif | |
else | |
let g:NERDTreeDirArrows=0 | |
let &t_SI = "\x1b[\x34 q" | |
let &t_EI = "\x1b[\x32 q" | |
if $COLORTERM == 'gnome-terminal' | |
set t_Co=256 "why you no tell me correct colors?!?! | |
endif | |
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 = "\x1b[\x34 q" | |
let &t_EI = "\x1b[\x32 q" | |
endif | |
endif | |
endif | |
"}}} | |
" mappings {{{ | |
nmap <space>b :CtrlPBuffer<CR> | |
nmap <leader>f$ :call StripTrailingWhitespace()<CR> | |
vmap <leader>s :sort<cr> | |
" eval vimscript by line or visual selection | |
nmap <silent> <leader>e :call Source(line('.'), line('.'))<CR> | |
vmap <silent> <leader>e :call Source(line('v'), line('.'))<CR> | |
nnoremap <leader>w :w<cr> | |
" toggle paste | |
map <F6> :set invpaste<CR>:set paste?<CR> | |
" remap arrow keys | |
nnoremap <left> :bprev<CR> | |
nnoremap <right> :bnext<CR> | |
nnoremap <up> :tabnext<CR> | |
nnoremap <down> :tabprev<CR> | |
" smash escape | |
inoremap jk <esc> | |
inoremap kj <esc> | |
" change cursor position in insert mode | |
inoremap <C-h> <left> | |
inoremap <C-l> <right> | |
inoremap <C-u> <C-g>u<C-u> | |
" 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 | |
"}}} | |
" make Y consistent with C and D. See :help Y. | |
nnoremap Y y$ | |
" window killer | |
nnoremap <silent> <C-q> :call CloseWindowOrKillBuffer()<cr> | |
nnoremap <silent> Q :bp\|bd #<cr> | |
" quick buffer open | |
nnoremap gb :ls<cr>:e # | |
" general | |
nmap <leader>l :set list! list?<cr> | |
nnoremap <BS> :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> | |
"}}} | |
"}}} | |
" functions {{{ | |
function! s:get_cache_dir(suffix) "{{{ | |
return resolve(expand(s:cache_dir . '/' . a:suffix)) | |
endfunction "}}} | |
function! Source(begin, end) "{{{ | |
let lines = getline(a:begin, a:end) | |
for line in lines | |
execute line | |
endfor | |
endfunction "}}} | |
function! StripTrailingWhitespace() "{{{ | |
call Preserve("%s/\\s\\+$//e") | |
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 "}}} | |
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 "}}} | |
"}}} | |
" auto commands {{{ | |
" Move cursor to last edited position | |
autocmd BufReadPost * | |
\ if line("'\"") > 1 && line("'\"") <= line("$") | | |
\ exe "normal! g`\"" | | |
\ endif | |
"}} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment