From 5e96ea0563c181e190876a97291af7e77b78bd51 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 15 Jul 2020 15:55:35 +0800 Subject: [PATCH] add vimrc --- .vimrc | 317 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 317 insertions(+) create mode 100644 .vimrc diff --git a/.vimrc b/.vimrc new file mode 100644 index 0000000..967bee9 --- /dev/null +++ b/.vimrc @@ -0,0 +1,317 @@ +filetype off +call plug#begin('~/.vim/Plugged') + +Plug 'prabirshrestha/async.vim' +Plug 'prabirshrestha/vim-lsp' +Plug 'prabirshrestha/asyncomplete.vim' +Plug 'prabirshrestha/asyncomplete-lsp.vim' + +" autocompleter +Plug 'prabirshrestha/asyncomplete-gocode.vim' +Plug 'runoshun/tscompletejob' +Plug 'prabirshrestha/asyncomplete-tscompletejob.vim' + +Plug 'tomasr/molokai' +Plug 'scrooloose/nerdcommenter' +Plug 'vim-scripts/DrawIt' +Plug 'scrooloose/nerdtree' +Plug 'easymotion/vim-easymotion' +Plug 'mattn/emmet-vim' +Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } +Plug 'pangloss/vim-javascript' +" tagbar +" golang install go get -u github.com/jstemmer/gotags +Plug 'majutsushi/tagbar' +Plug 'w0rp/ale' +Plug 'connorholyday/vim-snazzy' +Plug 'hzchirs/vim-material' +Plug 'kadekillary/Turtles' +Plug 'phanviet/vim-monokai-pro' +Plug 'sickill/vim-monokai' +Plug 'godlygeek/tabular' +Plug 'plasticboy/vim-markdown' +Plug 'ctrlpvim/ctrlp.vim' + +" LSP +" JS/TS require +" npm install -g typescript typescript-language-server +Plug 'ryanolsonx/vim-lsp-javascript' +Plug 'ryanolsonx/vim-lsp-typescript' + +Plug 'vim-airline/vim-airline' +Plug 'kien/tabman.vim' + +" for git +Plug 'tpope/vim-fugitive' +Plug 'christoomey/vim-conflicted' + +" for mark +Plug 'inkarkat/vim-ingo-library' +Plug 'inkarkat/vim-mark' + +Plug 'rking/ag.vim' +Plug 'terryma/vim-multiple-cursors' + +" temp plugin +Plug 'tpope/vim-surround' +Plug 'buoto/gotests-vim' +Plug 'chr4/nginx.vim' +Plug 'cespare/vim-toml' +Plug 'zah/nim.vim' +Plug 'rust-lang/rust.vim' +Plug 'danilo-augusto/vim-afterglow' +Plug 'vim-scripts/TaskList.vim' + +call plug#end() + +syntax on +set number +set tabstop=2 +set shiftwidth=2 +set expandtab +set nofoldenable + +set pastetoggle= +" always show status +set laststatus=2 +" show cursor position +set ruler +set cursorline +set cursorcolumn +set hlsearch +" no wrap line +set nowrap +" enable backspace +set backspace=indent,eol,start + + +set background=dark +" colorscheme turtles +colorscheme afterglow + +" define leader key +let mapleader=";" +filetype indent on +" 開啟檔案類型偵測 +filetype on +" 根據檔案類型載入plugin +filetype plugin on + +autocmd BufWritePost $MYVIMRC source $MYVIMRC + +" split window +nmap sw +nmap sww k +nmap sws j +nmap swa h +nmap swd l + +nmap aa gT +nmap dd gt + +" nerdtree key map +nmap :NERDTreeToggle +nmap me :NERDTreeToggle +" show hidden file +let NERDTreeShowHidden=1 +" delete auto remove buffer +let NERDTreeAutoDeleteBuffer=1 + +" tagbar +nmap :TagbarToggle +nmap :%!python -m json.tool + +" NeoComplete +let g:neocomplete#enable_at_startup = 1 + +let g:airline_powerline_fonts = 1 + +" f{char} to move to {char} +map f (easymotion-bd-f) +nmap f (easymotion-overwin-f) +" s{char}{char} to move to {char}{char} +nmap s (easymotion-overwin-f2) +" Move to line +map L (easymotion-bd-jk) +nmap L (easymotion-overwin-line) +" Move to word +map w (easymotion-bd-w) +nmap w (easymotion-overwin-w) + +" lint +let g:ale_linters = { + \ 'javascript': ['standard'], + \ 'go': ['gopls'], + \} +let g:ale_fixers = {'javascript': ['standard']} +let g:ale_lint_on_save = 1 +let g:ale_fix_on_save = 1 +nmap = (ale_fix) + +" NERDCommenter +let g:NERDSpaceDelims=1 +let g:NERDDefaultAlign='left' + +function! MergeTab() + let bufnums = tabpagebuflist() + hide tabclose + topleft vsplit + for n in bufnums + execute 'sbuffer ' . n + wincmd _ + endfor + wincmd t + quit + wincmd = +endfunction +command! MergeTab call MergeTab() + +" LSP Settings +" key binding +nmap gd :LspDefinition +nmap gt :tab split:LspDefinition +nmap p :LspHover +nmap gr :LspReferences +nmap rr :LspStopServer +nmap i :LspImplementation +nmap gs :split \| :LspDefinition +nmap gv :vsplit \| :LspDefinition +nmap gf :LspDocumentFormat + +let g:lsp_diagnostics_enabled = 0 " disable diagnostics support + +" require node module +" npm i -g dockerfile-language-server-nodejs +if executable('docker-langserver') + au User lsp_setup call lsp#register_server({ + \ 'name': 'docker-langserver', + \ 'cmd': {server_info->[&shell, &shellcmdflag, 'docker-langserver --stdio']}, + \ 'whitelist': ['dockerfile'], + \ }) +endif + +" require golang app +" go get -u github.com/sourcegraph/go-langserver +" Setting >>>> +" 'cmd': {server_info->['go-langserver', '-gocodecompletion']}, +" 'cmd': {server_info->['gopls', '-mode', 'stdio']}, +if executable('gopls') + au User lsp_setup call lsp#register_server({ + \ 'name': 'gopls', + \ 'cmd': {server_info->['gopls']}, + \ 'whitelist': ['go'], + \ }) + autocmd FileType go setlocal omnifunc=lsp#complete +endif + +" rustup update +" rustup component add rls rust-analysis rust-src +if executable('rls') + au User lsp_setup call lsp#register_server({ + \ 'name': 'rls', + \ 'cmd': {server_info->['rustup', 'run', 'stable', 'rls']}, + \ 'workspace_config': {'rust': {'clippy_preference': 'on'}}, + \ 'whitelist': ['rust'], + \ }) +endif + +" auto completer +inoremap pumvisible() ? "\" : "\" +inoremap pumvisible() ? "\" : "\" +inoremap pumvisible() ? "\" : "\" + +" set completeopt+=preview +autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif +let g:asyncomplete_auto_popup = 0 + +function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~ '\s' +endfunction + +inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ asyncomplete#force_refresh() +inoremap pumvisible() ? "\" : "\" + +call asyncomplete#register_source(asyncomplete#sources#gocode#get_source_options({ + \ 'name': 'gocode', + \ 'whitelist': ['go'], + \ 'completor': function('asyncomplete#sources#gocode#completor'), + \ })) + +call asyncomplete#register_source(asyncomplete#sources#tscompletejob#get_source_options({ + \ 'name': 'tscompletejob', + \ 'whitelist': ['typescript'], + \ 'completor': function('asyncomplete#sources#tscompletejob#completor'), + \ })) + +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' +\ } + +" vim-go setting +autocmd FileType go nmap tgd (go-def-tab) +autocmd FileType go nmap err (go-iferr) +let g:go_fmt_fail_silently = 1 +let g:go_fmt_command = "goimports" +let g:go_def_mode = 'godef' +let g:go_decls_includes = "func,type" +let g:go_highlight_types = 1 +let g:go_highlight_fields = 1 +let g:go_highlight_functions = 1 +let g:go_highlight_function_calls = 1 +let g:go_highlight_operators = 1 +let g:go_highlight_extra_types = 1 + +" for rust-vim +let g:rust_recommended_style = 0 +let g:syntastic_rust_checkers = ['cargo'] + +let g:airline#extensions#tabline#enabled = 1 +let g:airline#extensions#tabline#show_buffers = 0 +let g:airline#extensions#tabline#show_splits = 0 +let g:airline#extensions#tabline#show_tabs = 1 +let g:airline#extensions#tabline#show_tab_nr = 0 +let g:airline#extensions#tabline#show_tab_type = 0 +let g:airline#extensions#tabline#close_symbol = '×' +let g:airline#extensions#tabline#show_close_button = 0 + +let g:multi_cursor_use_default_mapping=0 + +" Default mapping +let g:multi_cursor_start_word_key = "" +let g:multi_cursor_select_all_word_key = '' +let g:multi_cursor_start_key = "g" +let g:multi_cursor_select_all_key = 'g' +let g:multi_cursor_next_key = "" +" let g:multi_cursor_prev_key = '' +let g:multi_cursor_skip_key = '' +let g:multi_cursor_quit_key = '' + +let g:javascript_plugin_jsdoc = 1