vimrc
call plug#begin('~/.vim/plugged')
Plug 'bling/vim-airline' | Plug 'vim-airline/vim-airline-themes'
Plug 'chriskempson/vim-tomorrow-theme'
Plug 'erasin/vim-one'
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'majutsushi/tagbar'
Plug 'mhinz/vim-signify'
Plug 'tpope/vim-fugitive'
Plug 'scrooloose/syntastic'
Plug 'airblade/vim-gitgutter'
Plug 'mileszs/ack.vim'
Plug 'kien/ctrlp.vim' " 快速查询文件
Plug 'jiangmiao/auto-pairs' " 括号补全
Plug 'scrooloose/nerdcommenter' " 注释
Plug 'tpope/vim-surround'
Plug 'junegunn/vim-easy-align'
"Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
" Golang
Plug 'fatih/vim-go', { 'tag': '*' , 'for' : 'go' }
Plug 'nsf/gocode', { 'tag': '*' , 'for' : 'go' }
" Rust
Plug 'rust-lang/rust.vim', { 'for': 'rust' }
"Plug 'racer-rust/vim-racer',{ 'for' : 'rust' }
Plug 'mattn/webapi-vim'
Plug 'ekalinin/Dockerfile.vim', {'for' : 'Dockerfile'}
Plug 'fatih/vim-nginx' , {'for' : 'nginx'}
Plug 'toml-lang/toml',{'for': 'toml'}
Plug 'cespare/vim-toml',{'for': 'toml'}
Plug 'leafgarland/typescript-vim'
Plug 'stanangeloff/php.vim'
Plug '2072/php-indenting-for-vim'
Plug 'junegunn/goyo.vim', { 'for': 'markdown' }
" for yaovim
Plug 'rhysd/nyaovim-popup-tooltip'
call plug#end()
"=============================================
"set termguicolors
:let $NVIM_TUI_ENABLE_CURSOR_SHAPE=1 " nvim 光标处理
set nocompatible
filetype on
filetype plugin on
filetype indent on
" === 基本设定 {{{
set noerrorbells " No beeps 取消警报
set number " Show line numbers 显示行号
set backspace=indent,eol,start " Makes backspace key more powerful.
set showcmd " Show me what I'm typing 显示命令
set showmode " Show current mode. 显示模式
set ts=4 " tabstop 4 tab键长
set softtabstop=4
set shiftwidth=4 " shift>> width
set expandtab " 使用空格来替换tab
set smarttab " 开启新行时使用智能 tab 缩进
set list " 显示Tab符,
set listchars=tab:\|\ , " 使用一高亮竖线代替 把符号显示为 |
" set listchars=tab:>-,trail:-
" set listchars=tab:\|\ ,nbsp:%,trail:-
set noswapfile " Don't use swapfil 不使用临时文件
set nobackup " Don't create annoying backup files 不创建备份文件
set splitright " Split vertical windows right to the current windows
set splitbelow " Split horizontal windows below to the current windows
set encoding=utf-8 " Set default encoding to UTF-8 设定默认编码
set fileencodings=utf-8,chinese,latin-1,cp936,euc-jp " 识别编码
set fileencoding=utf-8 " 设定文件编码
set autowrite " Automatically save before :next, :make etc. 自动保存在:next :make 命令执行
set autoread " Automatically reread changed files without asking me anything 自动加载变动
set laststatus=2 " 状态栏行高为2
set hidden
set fileformats=unix,dos,mac " Prefer Unix over Windows over OS 9 formats
" 复制
set clipboard^=unnamed
set clipboard^=unnamedplus
set noshowmatch " Do not show matching brackets by flickering
set nocursorcolumn
set noshowmode " We show the mode with airlien or lightline
set incsearch " Shows the match while typing
set hlsearch " Highlight found searches 搜索高亮,其对应 :nohlsearch
set ignorecase " Search case insensitive... 搜索过滤
set smartcase " ... but not when search pattern contains upper case characters
set ttyfast
"set ttymouse=xterm2
"set ttyscroll=3
set lazyredraw " Wait to redraw "
" speed up syntax highlighting
" 设置高亮
" set cursorcolumn
set cursorline
syntax sync minlines=256
set synmaxcol=300
set re=1
"set statusline=%<%f\ %h%m%r%{fugitive#statusline()}%=%-14.(%l,%c%V%)\ %P
" open help vertically
command! -nargs=* -complete=help Help vertical belowright help <args>
autocmd FileType help wincmd L
if has("gui")
"set guifont=Consolas\ for\ Powerline:h11
"set guifont=Noto\ Sans\ Mono\ CJK\ SC:h11
set guifont=Iosevka:h11
set clipboard+=unnamed
"set vb t_vb=
set guioptions-=m "no menu
set guioptions-=T "no toolbar
set guioptions-=l
set guioptions-=L
set guioptions-=r "no scrollbar
set guioptions-=R
"set background=light
set background=dark
let g:one_allow_italics = 1
"colorscheme Tomorrow
colorscheme one
let macvim_skip_colorscheme=1
"highlight SignColumn guibg=#272822
else
syntax enable
set guifont=Consolas\ for\ Powerline\ FixedD:h12
set background=dark
"set background=light
"colorscheme Tomorrow-Night
colorscheme one
endif
" This comes first, because we have mappings that depend on leader
" With a map leader it's possible to do extra key combinations
" i.e: <leader>w saves the current file
let mapleader = ","
let g:mapleader = ","
" This trigger takes advantage of the fact that the quickfix window can be
" easily distinguished by its file-type, qf. The wincmd J command is
" equivalent to the Ctrl+W, Shift+J shortcut telling Vim to move a window to
" the very bottom (see :help :wincmd and :help ^WJ).
autocmd FileType qf wincmd J
"Dont show me any output when I build something
"Because I am using quickfix for errors
nmap <leader>m :make<CR><enter>
" Some useful quickfix shortcuts
":cc see the current error
":cn next error
":cp previous error
":clist list all errors
map <C-n> :cn<CR>
map <C-m> :cp<CR>
" simulate tab shortcuts
map gb :bnext<cr>
map gB :bprevious<cr>
nnoremap <silent> <leader>q :Sayonara<CR>
" Replace the current buffer with the given new file. That means a new file
" will be open in a buffer while the old one will be deleted
com! -nargs=1 -complete=file Breplace edit <args>| bdelete #
function! DeleteInactiveBufs()
"From tabpagebuflist() help, get a list of all buffers in all tabs
let tablist = []
for i in range(tabpagenr('$'))
call extend(tablist, tabpagebuflist(i + 1))
endfor
"Below originally inspired by Hara Krishna Dara and Keith Roberts
"http://tech.groups.yahoo.com/group/vim/message/56425
let nWipeouts = 0
for i in range(1, bufnr('$'))
if bufexists(i) && !getbufvar(i,"&mod") && index(tablist, i) == -1
"bufno exists AND isn't modified AND isn't in the list of buffers open in windows and tabs
silent exec 'bwipeout' i
let nWipeouts = nWipeouts + 1
endif
endfor
echomsg nWipeouts . ' buffer(s) wiped out'
endfunction
command! Ball :call DeleteInactiveBufs()
" Close quickfix easily
" 快速退出
nnoremap <leader>a :cclose<CR>
" 消除搜索高亮
nnoremap <leader><space> :nohlsearch<CR>
" Better split switching
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
" Fast saving
nmap <leader>w :w!<cr>
" Center the screen
nnoremap <space> zz
" Move up and down on splitted lines (on small width screens)
map <Up> gk
map <Down> gj
map k gk
map j gj
" Just go out in insert mode
imap jk <ESC>l
" Act like D and C
nnoremap Y y$
" ========== Steve Losh hacks ==========="
" Don't move on *
" I'd use a function for this but Vim clobbers the last search when you're in
" a function so fuck it, practicality beats purity.
nnoremap <silent> * :let stay_star_view = winsaveview()<cr>*:call winrestview(stay_star_view)<cr>
" iTerm2 is currently slow as balls at rendering the nice unicode lines, so for
" now I'll just use ASCII pipes. They're ugly but at least I won't want to kill
" myself when trying to move around a file.
set fillchars=diff:⣿,vert:│
set fillchars=diff:⣿,vert:\|
" Time out on key codes but not mappings.
" Basically this makes terminal Vim work sanely.
set notimeout
set ttimeout
set ttimeoutlen=10
" Better Completion
set complete=.,w,b,u,t
"set completeopt=longest,menuone
set completeopt=menu,longest
" Diffoff
nnoremap <leader>D :diffoff!<cr>
" Resize splits when the window is resized
au VimResized * :wincmd =
" }}}
" Visual Mode */# from Scrooloose {{{
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><c-o>
vnoremap # :<C-u>call <SID>VSetSearch()<CR>??<CR><c-o>
" ----------------------------------------- "
" File Type settings "
" ----------------------------------------- "
au BufNewFile,BufRead *.vim setlocal noet ts=4 sw=4 sts=4
au BufNewFile,BufRead *.txt setlocal noet ts=4 sw=4
au BufNewFile,BufRead *.md setlocal noet ts=4 sw=4
augroup filetypedetect
au BufNewFile,BufRead .tmux.conf*,tmux.conf* setf tmux
au BufNewFile,BufRead .nginx.conf*,nginx.conf* setf nginx
" au BufNewFile,BufRead .rs setf rust
augroup END
au FileType nginx setlocal noet ts=4 sw=4 sts=4
" Wildmenu completion
set wildmenu
" set wildmode=list:longest
set wildmode=list:full
set wildignore+=.hg,.git,.svn " Version control
set wildignore+=*.aux,*.out,*.toc " LaTeX intermediate files
set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg " binary images
set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest " compiled object files
set wildignore+=*.spl " compiled spelling word lists
set wildignore+=*.sw? " Vim swap files
set wildignore+=*.DS_Store " OSX bullshit
set wildignore+=*.luac " Lua byte code
set wildignore+=migrations " Django migrations
set wildignore+=go/pkg " Go static files
set wildignore+=go/bin " Go bin files
set wildignore+=go/bin-vagrant " Go bin-vagrant files
set wildignore+=*.pyc " Python byte code
set wildignore+=*.orig " Merge resolution files
" Prettify json
" comes with yajl, install: brew install yajl
" I don't use pythons json tool because it sorts the keys
com! JSONFormat %!json_reformat
" dict
autocmd FileType javascript set dictionary=~/.vim/dict/javascript.dict
autocmd FileType css set dictionary=~/.vim/dict/css.dict
autocmd FileType php set dictionary=~/.vim/dict/php_func_list.dict
"===================PLUG==========================
" ==================== NerdTree ====================
noremap <Leader>n :NERDTreeToggle<CR>
let NERDTreeWinSize = 32
let g:NERDTreeAutoDeleteBuffer = 1
let NERDTreeIgnore=['\.o$', '\.obj$', '\.py[co]$', '\~$', '\.swo$', '\.swp$', '^\.git$', '^\.hg$', '^\.svn$', '\.bzr$']
let g:nerdtree_tabs_autoclose = 1
" Auto refresh NERDTree
autocmd CursorHold,CursorHoldI * call Refresh()
" Inspired by https://github.com/Xuyuanp/nerdtree-git-plugin
function! Refresh()
if !exists('g:NERDTree') || !g:NERDTree.IsOpen()
return
endif
let winnr = winnr()
call g:NERDTree.CursorToTreeWin()
call b:NERDTree.root.refresh()
call b:NERDTree.root.refreshFlags()
call NERDTreeRender()
" Jump back
execute winnr . 'wincmd w'
"redraw
endfunction
" nerdtree-git-plugin
let g:NERDTreeIndicatorMapCustom = {
\ 'Modified' : '~',
\ "Staged" : '+',
\ 'Untracked' : '*',
\ 'Renamed' : '➜',
\ 'Unmerged' : '=',
\ 'Deleted' : '✖',
\ 'Dirty' : '~',
\ 'Clean' : '✔︎',
\ 'Unknown' : '?'
\ }
" ============= airline =================
"let g:airline_theme = 'solarized'
"let g:airline_theme = 'sol'
let g:airline_theme = 'one'
"let g:airline#extensions#tabline#enabled = 1
"let g:airline#extensions#tabline#left_sep = ' '
"let g:airline#extensions#tabline#left_alt_sep = '|'
" 显示 buffer 数字
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline_powerline_fonts=1
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
"设置顶部tabline栏符号显示"
let g:airline#extensions#tabline#left_sep = "\u2b80"
let g:airline#extensions#tabline#left_alt_sep = "\u2b81"
"设置状态栏符号显示,下面编码用双引号"
let g:Powerline_symbols="fancy"
let g:airline_symbols = {}
let g:airline_left_sep = "\u2b80"
let g:airline_left_alt_sep = "\u2b81"
let g:airline_right_sep = "\u2b82"
let g:airline_right_alt_sep = "\u2b83"
let g:airline_symbols.branch = "\u2b60"
let g:airline_symbols.readonly = "\u2b64"
let g:airline_symbols.linenr = "\u2b61"
let g:airline_extensions = ['branch', 'tabline']
" ==================== YouCompleteMe ====================
"let g:ycm_autoclose_preview_window_after_completion = 1
"let g:ycm_min_num_of_chars_for_completion = 1
"let g:ycm_server_keep_logfiles = 1
"let g:ycm_server_log_level = 'debug'
let g:ycm_python_binary_path= "/usr/local/bin/python3"
let g:ycm_rust_src_path = "/Users/erasin/Development/rust/crates/rust/src/"
let g:ycm_goto_buffer_command = 'vertical-split'
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
" ============== Shougo/neocomplete ===========
let g:neocomplete#enable_at_startup = 1
" ============ airblade/vim-gitgutter ========
let g:gitgutter_max_signs = 1000 " default value
" ==================== Vim-go ====================
let g:go_fmt_fail_silently = 0
let g:go_fmt_command = "goimports"
let g:go_autodetect_gopath = 1
" vim-go custom mappings
au FileType go nmap <leader>r <Plug>(go-run)
au FileType go nmap <leader>b <Plug>(go-build)
"au FileType go nmap <leader>t <Plug>(go-test)
au FileType go nmap <leader>c <Plug>(go-coverage)
au FileType go nmap <Leader>ds <Plug>(go-def-split)
au FileType go nmap <Leader>dv <Plug>(go-def-vertical)
au FileType go nmap <Leader>dt <Plug>(go-def-tab)
au FileType go nmap <Leader>gd <Plug>(go-doc)
au FileType go nmap <Leader>gv <Plug>(go-doc-vertical
au FileType go nmap <Leader>gb <Plug>(go-doc-browser)
au FileType go nmap <Leader>s <Plug>(go-implements)
au FileType go nmap <Leader>i <Plug>(go-info)
au FileType go nmap <Leader>e <Plug>(go-rename)
au FileType go nmap <Leader>got <Plug>(go-test)
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
let g:go_metalinter_enabled =1
let g:go_metalinter_autosave = 1
let g:go_metalinter_command = "vet"
let g:go_metalinter_autosave_enabled = ['vet', 'golint', 'test']
let g:syntastic_go_checkers = ['golint', 'govet', 'errcheck']
let g:syntastic_mode_map = { 'mode': 'active', 'passive_filetypes': ['go'] }
" ============ rust ==========================
let g:rustfmt_auto_save = 1
au FileType Rust nmap <leader>f :RustFmt<CR>
" ============ rust-racer ====================
"set hidden
let g:racer_cmd = "/Users/erasin/.cargo/bin/racer"
let $RUST_SRC_PATH="/Users/erasin/Development/rust/crates/rust/src/"
" ========== tagbar ========
" https://github.com/majutsushi/tagbar/wiki
noremap <leader>t :Tagbar<CR>
let tagbar_width = 32
" php
let g:tagbar_type_php = {
\ 'ctagstype' : 'php',
\ 'kinds' : [
\ 'f:function',
\ 'v:varliable',
\ 'c:const'
\ ],
\ "sort" : 0
\ }
" css
let g:tagbar_type_css = {
\ 'ctagstype' : 'Css',
\ 'kinds' : [
\ 'c:classes',
\ 's:selectors',
\ 'i:identities'
\ ]
\ }
" markdown
" add to ~/.ctags
" ----------------------------------------
"--langdef=markdown
"--langmap=markdown:.md
"--regex-markdown=/^(#+)[ \t]+([^#]*)/\1 \2/h,header,Markdown Headers/
"--regex-markdown=/\[([^\[]+)\]\(([^\)]+)\)/\1/l,link,Markdown Links/
"--regex-markdown=/!\[\]\(.*[\/ ](.*\.[a-z]{3})\)/\1/i,image,Markdown Image/
" ----------------------------------------
let g:tagbar_type_markdown = {
\ 'ctagstype' : 'markdown',
\ 'kinds' : [
\ 'h:headings',
\ 'l:links',
\ 'i:images'
\ ],
\ "sort" : 0
\ }
" rust
let g:tagbar_type_rust = {
\ 'ctagstype' : 'rust',
\ 'kinds' : [
\'T:types,type definitions',
\'f:functions,function definitions',
\'g:enum,enumeration names',
\'s:structure names',
\'m:modules,module names',
\'c:consts,static constants',
\'t:traits,traits',
\'i:impls,trait implementations',
\]
\}
" go get -u github.com/jstemmer/gotags
let g:tagbar_type_go = {
\ 'ctagstype' : 'go',
\ 'kinds' : [
\ 'p:package',
\ 'i:imports:1',
\ 'c:constants',
\ 'v:variables',
\ 't:types',
\ 'n:interfaces',
\ 'w:fields',
\ 'e:embedded',
\ 'm:methods',
\ 'r:constructor',
\ 'f:functions'
\ ],
\ 'sro' : '.',
\ 'kind2scope' : {
\ 't' : 'ctype',
\ 'n' : 'ntype'
\ },
\ 'scope2kind' : {
\ 'ctype' : 't',
\ 'ntype' : 'n'
\ },
\ 'ctagsbin' : 'gotags',
\ 'ctagsargs' : '-sort -silent'
\ }
" ==================== CtrlP ====================
"let g:ctrlp_cmd = 'CtrlPMRU'
"let g:ctrlp_match_func = {'match' : 'matcher#cmatch'}
"let g:ctrlp_user_command = 'ag %s -l --nocolor --hidden -g ""'
"let g:ctrlp_working_path_mode = 'ra'
"let g:ctrlp_max_height = 10 " maxiumum height of match window
"let g:ctrlp_switch_buffer = 'et' " jump to a file if it's open already
"let g:ctrlp_mruf_max=450 " number of recently opened files
"let g:ctrlp_max_files=0 " do not limit the number of searchable files
"let g:ctrlp_use_caching = 1
"let g:ctrlp_clear_cache_on_exit = 0
"let g:ctrlp_cache_dir = $HOME.'/.cache/ctrlp'
let g:ctrlp_buftag_types = {
\ 'go' : '--language-force=go --golang-types=ftv',
\ 'coffee' : '--language-force=coffee --coffee-types=cmfvf',
\ 'markdown' : '--language-force=markdown --markdown-types=hik',
\ 'objc' : '--language-force=objc --objc-types=mpci',
\ 'rc' : '--language-force=rust --rust-types=fTm'
\ }
func! MyCtrlPTag()
let g:ctrlp_prompt_mappings = {
\ 'AcceptSelection("e")': ['<cr>', '<2-LeftMouse>'],
\ 'AcceptSelection("t")': ['<c-t>'],
\ }
CtrlPBufTag
endfunc
command! MyCtrlPTag call MyCtrlPTag()
nmap <C-f> :CtrlPCurWD<cr>
imap <C-f> <esc>:CtrlPCurWD<cr>
nmap <C-b> :CtrlPBuffer<cr>
imap <C-b> <esc>:CtrlPBuffer<cr>
" ================ vim room ===================
let g:vimroom_background = "light"
" ================ syntastic ==================
let g:syntatic_php_checkers = ['phpcs', 'php']
let g:syntastic_php_phpcs_args='--tab-width=0'
", 'phpcs']
"let g:syntastic_php_args = []
" ================== deoplete =================
let g:deoplete#enable_at_startup = 1