" Author : @MineralwaterXu " Special Thanks : @theniceboy " === " === Auto load for the first time " === if empty(glob('~/.config/nvim/autoload/plug.vim')) silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall --sync | source $MYVIMRC endif " ==================== " === Editor Setup === " ==================== " === " === Editor behavior " === set number set relativenumber set cursorline set wrap set showcmd set wildmenu set hlsearch set incsearch set ignorecase set smartcase " === " === Basic Mappings " === " set as let mapleader=" " " syntax syntax on " Save & quit noremap Q :q noremap S :w " Open the vimrc file anytime noremap rc :e ~/.config/nvim/init.vim " Search noremap :nohlsearch " === " === Cursor movement " === " ^ " k " < h l > " j " v " J/K keys for 5 times j/k (faster navigation) noremap J 5j noremap K 5k noremap = nzz noremap - Nzz " === " === Window management " === " Disable the default s key noremap s " split the screens to up (horizontal), down (horizontal), left (vertical), right (vertical) map sk :set nosplitbelow:split:set splitbelow map sj :set splitbelow:split map sh :set nosplitright:vsplit:set splitright map sl :set splitright:vsplit " Resize splits with arrow keys map :res +5 map :res -5 map :vertical resize-5 map :vertical resize+5 " Place the two screens up and down noremap s[ tK " Place the two screens side by side noremap s] tH " === " === MarkdownPreview Mappings " === nmap mp MarkdownPreview nmap ms MarkdownPreviewStop " === " === Install Plugins with Vim-Plug " === call plug#begin('~/.config/nvim/plugged') " Pretty Dress Plug 'bling/vim-bufferline' Plug 'bpietravalle/vim-bolt' Plug 'ajmwagar/vim-deus' " Status line Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' " Other visual enhancement Plug 'ryanoasis/vim-devicons' Plug 'luochen1990/rainbow' Plug 'mg979/vim-xtabline' Plug 'wincent/terminus' " Markdown Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug'] } Plug 'dhruvasagar/vim-table-mode', { 'on': 'TableModeToggle', 'for': ['text', 'markdown', 'vim-plug'] } Plug 'mzlogin/vim-markdown-toc', { 'for': ['gitignore', 'markdown', 'vim-plug'] } " LaTeX Plug 'lervag/vimtex' " FZF Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' " Undo Tree Plug 'mbbill/undotree' " COC Plug 'neoclide/coc.nvim', {'branch': 'release'} call plug#end() set re=0 " === " === Dress up my vim " === set termguicolors " enable true colors support let $NVIM_TUI_ENABLE_TRUE_COLOR=1 "set background=dark "let ayucolor="mirage" "let g:oceanic_next_terminal_bold = 1 "let g:oceanic_next_terminal_italic = 1 "let g:one_allow_italics = 1 "color dracula "color one color deus "color gruvbox "let ayucolor="light" "color ayu "color xcodelighthc "set background=light "set cursorcolumn hi NonText ctermfg=gray guifg=grey10 "hi SpecialKey ctermfg=blue guifg=grey70 " ===================== Start of Plugin Settings ===================== " === " === vim-airline-theme " === let g:airline_theme= 'deus' let g:airline_powerline_fonts = 1 let g:airline#extensions#tabline#enable = 1 let g:airline#extensions#branch#enable = 1 " === " === rainbow " === let g:rainbow_active = 1 " === " === MarkdownPreview " === let g:mkdp_auto_start = 0 let g:mkdp_auto_close = 0 let g:mkdp_refresh_slow = 1 let g:mkdp_command_for_global = 0 let g:mkdp_open_to_the_world = 0 let g:mkdp_open_ip = '' let g:mkdp_echo_preview_url = 0 let g:mkdp_browser = '' let g:mkdp_browserfunc = '' let g:mkdp_preview_options = { \ 'mkit': {}, \ 'katex': {}, \ 'uml': {}, \ 'maid': {}, \ 'disable_sync_scroll': 0, \ 'sync_scroll_type': 'middle', \ 'hide_yaml_meta': 1 \ } let g:mkdp_markdown_css = '' let g:mkdp_highlight_css = '' let g:mkdp_port = '' let g:mkdp_page_title = '「${name}」' " === " === vim-table-mode " === noremap tm :TableModeToggle " === " === vim-markdown-toc " === let g:vmt_cycle_list_item_markers = 1 let g:vmt_fence_text = 'TOC' let g:vmt_fence_closing_text = '/TOC' " === " === vimtex " === let g:tex_flavor = 'latex' autocmd TextChanged,TextChangedI silent write " === " === Undotree " === noremap U :UndotreeToggle let g:undotree_DiffAutoOpen = 1 let g:undotree_SetFocusWhenToggle = 1 let g:undotree_ShortIndicators = 1 let g:undotree_WindowLayout = 2 let g:undotree_DiffpanelHeight = 8 let g:undotree_SplitWidth = 24 function g:Undotree_CustomMap() nmap k UndotreeNextState nmap j UndotreePreviousState nmap K 5UndotreeNextState nmap J 5UndotreePreviousState endfunc " === " === coc.nvim " === let g:coc_global_extensions = ['coc-json', 'coc-vimlsp'] " TextEdit might fail if hidden is not set. set hidden " Some servers have issues with backup files, see #649. set nobackup set nowritebackup " Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable " delays and poor user experience. set updatetime=100 " Don't pass messages to |ins-completion-menu|. set shortmess+=c " Use tab for trigger completion with characters ahead and navigate. " NOTE: Use command ':verbose imap ' to make sure tab is not mapped by " other plugin before putting this into your config. inoremap \ pumvisible() ? "\" : \ check_back_space() ? "\" : \ coc#refresh() inoremap pumvisible() ? "\" : "\" function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Use to trigger completion. inoremap coc#refresh() " Use to confirm completion, `u` means break undo chain at current " position. Coc only does snippet and additional edit on confirm. " could be remapped by other vim plugin, try `:verbose imap `. inoremap complete_info()["selected"] != "-1" ? "\" : "\u\" nmap - (coc-diagnostic-prev) nmap = (coc-diagnostic-next) " GoTo code navigation. nmap gd (coc-definition) nmap gy (coc-type-definition) nmap gi (coc-implementation) nmap gr (coc-references) " Use h to show documentation in preview window. nnoremap h :call show_documentation() function! s:show_documentation() if (index(['vim','help'], &filetype) >= 0) execute 'h '.expand('') else call CocActionAsync('doHover') endif endfunction " Highlight the symbol and its references when holding the cursor. autocmd CursorHold * silent call CocActionAsync('highlight') " Symbol renaming. nmap rn (coc-rename) " Formatting selected code. xmap f (coc-format-selected) nmap f (coc-format-selected) augroup mygroup autocmd! " Setup formatexpr specified filetype(s). autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') " Update signature help on jump placeholder. autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') augroup end " Remap for do codeAction of selected region function! s:cocActionsOpenFromSelected(type) abort execute 'CocCommand actions.open ' . a:type endfunction xmap a :execute 'CocCommand actions.open ' . visualmode() nmap a :set operatorfunc=cocActionsOpenFromSelectedg@ " Remap keys for applying codeAction to the current buffer. nmap ac (coc-codeaction) " Apply AutoFix to problem on the current line. nmap qf (coc-fix-current) " Map function and class text objects " NOTE: Requires 'textDocument.documentSymbol' support from the language server. xmap if (coc-funcobj-i) omap if (coc-funcobj-i) xmap af (coc-funcobj-a) omap af (coc-funcobj-a) xmap ic (coc-classobj-i) omap ic (coc-classobj-i) xmap ac (coc-classobj-a) omap ac (coc-classobj-a) " Use CTRL-S for selections ranges. " Requires 'textDocument/selectionRange' support of language server. nmap (coc-range-select) xmap (coc-range-select) " Add `:Format` command to format current buffer. command! -nargs=0 Format :call CocAction('format') " Add `:Fold` command to fold current buffer. command! -nargs=? Fold :call CocAction('fold', ) " Add `:OR` command for organize imports of the current buffer. command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') " Add (Neo)Vim's native statusline support. " NOTE: Please see `:h coc-status` for integrations with external plugins that " provide custom statusline: lightline.vim, vim-airline. set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} " Mappings for CoCList " Show all diagnostics. nnoremap a :CocList diagnostics " Manage extensions. nnoremap e :CocList extensions " Show commands. nnoremap c :CocList commands " Find symbol of current document. nnoremap o :CocList outline " Search workspace symbols. nnoremap s :CocList -I symbols " Do default action for next item. nnoremap j :CocNext " Do default action for previous item. nnoremap k :CocPrev " Resume latest coc list. nnoremap p :CocListResume " ===================== End of Plugin Settings ===================== " === " === Necessary Commands to Execute " === exec "nohlsearch"