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 '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' " defx file explorer " require python package pynvim " install `pip3 install --user pynvim` Plug 'Shougo/defx.nvim' Plug 'roxma/nvim-yarp' Plug 'roxma/vim-hug-neovim-rpc' 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 encoding=utf-8 " set font " set guifont=Hack\ Nerd\ Font:h11 set background=dark function! AdaptColorscheme() highlight clear CursorLine highlight Normal ctermbg=none highlight LineNr ctermbg=none highlight Folded ctermbg=none highlight NonText ctermbg=none highlight SpecialKey ctermbg=none highlight VertSplit ctermbg=none highlight SignColumn ctermbg=none endfunction autocmd ColorScheme * call AdaptColorscheme() " 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 " defx settings call defx#custom#option('_', { \ 'winwidth': 40, \ 'split': 'vertical', \ 'direction': 'topleft', \ 'buffer_name': '', \ 'toggle': 1, \ 'resume': 1, \ }) nmap :Defx nmap me :Defx autocmd FileType defx call s:defx_my_settings() function! s:defx_my_settings() abort " Define mappings nnoremap \ defx#is_directory() ? \ defx#do_action('open_tree', 'toggle') : \ defx#do_action('drop') nnoremap T \ defx#do_action('open', 'tabe') nnoremap s \ defx#do_action('drop', 'vsplit') nnoremap mc \ defx#do_action('copy') nnoremap mm \ defx#do_action('move') nnoremap mp \ defx#do_action('paste') nnoremap P \ defx#do_action('preview') nnoremap o \ defx#do_action('open_tree', 'toggle') nnoremap ma \ defx#do_action('new_file') nnoremap C \ defx#do_action('toggle_columns', \ 'mark:indent:icon:filename:type:size:time') nnoremap S \ defx#do_action('toggle_sort', 'time') nnoremap md \ defx#do_action('remove') nnoremap mr \ defx#do_action('rename') nnoremap ! \ defx#do_action('execute_command') nnoremap x \ defx#do_action('execute_system') nnoremap yy \ defx#do_action('yank_path') nnoremap . \ defx#do_action('toggle_ignored_files') nnoremap ; \ defx#do_action('repeat') nnoremap h \ defx#do_action('cd', ['..']) nnoremap ~ \ defx#do_action('cd') nnoremap q \ defx#do_action('quit') nnoremap \ defx#do_action('toggle_select') . 'j' nnoremap * \ defx#do_action('toggle_select_all') nnoremap j \ line('.') == line('$') ? 'gg' : 'j' nnoremap k \ line('.') == 1 ? 'G' : 'k' nnoremap r \ defx#do_action('redraw') nnoremap \ defx#do_action('print') nnoremap cd \ defx#do_action('change_vim_cwd') endfunction " tagbar nmap :TagbarToggle " 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'], \ 'rust': ['analyzer'], \} 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 let g:lsp_diagnostics_float_cursor = 0 let g:lsp_diagnostics_echo_cursor = 1 " 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 if executable('deno') au User lsp_setup call lsp#register_server({ \ 'name': 'deno', \ 'cmd': {server_info->[&shell, &shellcmdflag, 'deno lsp']}, \ 'whitelist': ['typescript', 'typescript.tsx', 'typescriptreact'], \ }) 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 if executable('rust-analyzer') au User lsp_setup call lsp#register_server({ \ 'name': 'rust-analyzer', \ 'cmd': {server_info->['rust-analyzer']}, \ 'workspace_config': {'rust': {'clippy_preference': 'on'}}, \ 'whitelist': ['rust'], \ }) endif " LSP " JS/TS require " npm install -g typescript typescript-language-server if executable('typescript-language-server') au User lsp_setup call lsp#register_server({ \ 'name': 'javascript support using typescript-language-server', \ 'cmd': {server_info->[&shell, &shellcmdflag, 'typescript-language-server --stdio']}, \ 'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'package.json'))}, \ 'whitelist': ['javascript', 'javascript.jsx'], \ }) au User lsp_setup call lsp#register_server({ \ 'name': 'typescript support using typescript-language-server', \ 'cmd': {server_info->[&shell, &shellcmdflag, 'typescript-language-server --stdio']}, \ 'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'tsconfig.json'))}, \ 'whitelist': ['typescript', 'typescript.tsx', 'typescriptreact'], \ }) 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:rustfmt_autosave = 1 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