" If anything not work as expected. Please make sure all plugins " are installed by running: " :PlugInstall " " Content " ('#' jump to the topic) " " Plugin_Install " Plugin_Preferences " Theme_Appearance " Key_Mappings " Environment { set nocompatible " Must be first line " } " Plugin_Install " { " Plugin environment let config_dir = '~/.dotfiles/' let plugin_dir = '~/.vim/plugged/' let g:vim_dir = '~/.vim/' call plug#begin(plugin_dir) " make sure to install nodejs to use coc.nvim if executable('node') Plug 'neoclide/coc.nvim', {'branch': 'release'} endif Plug 'rust-lang/rust.vim' Plug 'leafgarland/typescript-vim' " { Plug 'alvan/vim-closetag' let g:closetag_filenames = '*.html,*.xhtml,*.phtml, *.js' " } Plug 'scrooloose/nerdtree' Plug 'godlygeek/tabular' " for markdown{ Plug 'preservim/vim-markdown' "} " for window resize{ Plug 'simeji/winresizer' let g:winresizer_start_key = '' let g:winresizer_vert_resize = 2 let g:winresizer_horiz_resize = 2 " } Plug 'tpope/vim-surround' Plug 'rhysd/conflict-marker.vim' Plug 'jiangmiao/auto-pairs' Plug 'mg979/vim-visual-multi' Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' " The bottom buffer display Plug 'bling/vim-bufferline' Plug 'easymotion/vim-easymotion' Plug 'vim-scripts/restore_view.vim' if executable('fzf') Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } endif Plug 'NLKNguyen/papercolor-theme' " only work with nvim > 0.5 " For other versions, just loading the plugin may " cause error if g:vim_type == 'nvim' if g:vim_version >= 0.5 Plug 'xiyaowong/nvim-transparent' Plug 'lukas-reineke/indent-blankline.nvim' " nvim theme Plug 'EdenEast/nightfox.nvim' Plug 'projekt0n/github-nvim-theme' endif if g:vim_version >= 0.7 Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} endif endif call plug#end() " } " Plugin_Preferences " { " " nvim > 0.5 or above plugin { if g:vim_type == 'nvim' if g:vim_version >= 0.5 " xiyaowong/nvim-transparent { " } " lukas-reineke/indenlukas-reineke/indent-blankline.nvimt-blankline.nvim { let g:indent_blankline_use_treesitter = v:true let g:indent_blankline_show_current_context = v:true let g:indent_blankline_show_current_context_start = v:true " } endif if g:vim_version >= 0.7 " nvim-treesitter/nvim-treesitter { if filereadable(expand(g:dotfile_path . '.vimrc.lua')) execute('source ' . g:dotfile_path . '/.vimrc.lua') endif " } endif endif " } " godlygeek/tabular { if isdirectory(expand(plugin_dir . "/tabular")) nmap t= :Tabularize /= vmap t= :Tabularize /= nmap t\| :Tab /\| vmap t\| :Tab /\| nmap t: :Tab /:\zs vmap t: :Tab /:\zs endif " } " NerdTree { if isdirectory(expand(plugin_dir . "/nerdtree")) let g:NERDShutUp=1 nnoremap :NERDTreeToggle nnoremap e :NERDTreeToggle "nmap e :NERDTreeFind "let NERDTreeShowBookmarks=1 "let NERDTreeIgnore=['\.py[cd]$', '\~$', '\.swo$', '\.swp$', '^\.git$', '^\.hg$', '^\.svn$', '\.bzr$'] let NERDTreeChDirMode = 0 let NERDTreeQuitOnOpen = 1 let NERDTreeMouseMode = 2 let NERDTreeShowHidden = 1 let NERDTreeKeepTreeInNewTab = 1 endif " } "if has('nvim') && str2float(g:nvim_version) >= 0.5 && isdirectory(expand(plugin_dir . "/lualine.nvim")) " nvim-lualine/lualine.nvim { " } "else " vim-airline { " Set configuration options for the statusline plugin vim-airline. " Use the powerline theme and optionally enable powerline symbols. let g:airline_section_b = '' let g:airline_section_z = '' let g:airline_section_y = '' let g:airline_section_x = '' let g:airline_section_warning = '' "let g:airline#extensions#tabline#left_sep = '' "let g:airline#extensions#tabline#left_alt_sep = '|' if isdirectory(expand(plugin_dir . "/vim-airline-themes/")) "let g:airline_theme = 'solarized' endif " } "endif " junegunnjunegunn/fzf { " [Buffers] Jump to the existing window if possible let g:fzf_buffers_jump = 1 "let $FZF_DEFAULT_COMMAND = 'find -L' let $FZF_DEFAULT_COMMAND='find . \( -name node_modules -o -name .git \) -prune -o -print' noremap f :FZF " } " neoclide/coc.nvim { if isdirectory(expand(plugin_dir . "/coc.nvim/")) && executable('node') " add desired extensions to the following global variable " coc-tsserver: javascript " coc-pyright: python " coc-clangd: c/c++, may need to install clangd seperatly let g:coc_global_extensions = ['coc-pyright', 'coc-rls', 'coc-clangd', 'coc-tsserver', 'coc-html', 'coc-cmake', 'coc-json', 'coc-sh'] let g:coc_user_config = { \ 'suggest.noselect': v:true, \ 'suggest.enablePreselect': v:false } if filereadable(expand(config_dir . "/.exp-coc-config")) exec "source " . config_dir . "/.exp-coc-config" endif endif " } " } " Theme_Appearance " { " " debug function print out highlight group of cursor position function! SynStack() if !exists("*synstack") return endif echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') endfunc nmap db :call SynStack() " dark or light if filereadable(expand(g:vim_dir . '.light_theme.signal')) let g:theme_color = 'light' else let g:theme_color = 'dark' endif " what to use for dark theme let g:dark_theme = 'default' let g:airline_dark_theme = "deus" " what to use for light theme let g:light_theme = 'default' let g:airline_light_theme = "silver" " transparent backgroud for supported terminal emulator " check if transparent_dark_theme.signl or transparent_light_theme.signl " exist and set respect variable let g:transparent_dark_theme = v:false let g:transparent_light_theme = v:false if filereadable(expand(g:vim_dir . '.transparent_dark_theme.signal')) let g:transparent_dark_theme = v:true endif if filereadable(expand(g:vim_dir . '.transparent_light_theme.signal')) let g:transparent_light_theme = v:true endif function! SetDarkTheme() set background=dark execute("colorscheme " . g:dark_theme) let g:theme_color = 'dark' endfunction function! SetLightTheme() set background=light execute("colorscheme " . g:light_theme) let g:theme_color = 'light' endfunction " Change bottom airline/lualine theme " Currently only support airline function! SetAirlineTheme(theme) if has('nvim') && g:vim_version >= 0.5 execute('AirlineTheme ' . a:theme) else execute('AirlineTheme ' . a:theme) endif endfunction " Fix colorscheme not working correctly under transparent background " There is no plugin for this for nvim < 0.5 or vim without lua support function! TransparentBackgroundFix() if !has('nvim') || g:vim_version < 0.5 highlight SignColumn ctermbg=none highlight CursorLineNr ctermbg=none highlight CocWarningHighlight ctermbg=none highlight CocErrorSign ctermbg=none ctermfg=9 cterm=bold highlight CocErrorHighlight ctermbg=none ctermfg=9 cterm=underline,bold highlight CocInfoHighlight ctermbg=none highlight CocHintHighlight ctermbg=none highlight CocWarningSign ctermbg=none highlight CocInfoSign ctermbg=none highlight CocHintSign ctermbg=none if g:theme_color == 'dark' highlight CocFloating ctermbg=237 highlight CocErrorFloat ctermbg=237 highlight CocWarningFloat ctermbg=237 highlight CocInfoFloat ctermbg=237 highlight CocHintFloat ctermbg=237 endif endif endfunction function! EnableTransparent() if g:vim_type == 'nvim' && g:vim_version > 0.5 :TransparentEnable elseif g:theme_color == 'dark' let g:PaperColor_Theme_Options = { \ 'theme': { \ 'default.dark': { \ 'transparent_background': 1 \ } \ } \ } execute("colorscheme " . g:dark_theme) elseif g:theme_color == 'light' let g:PaperColor_Theme_Options = { \ 'theme': { \ 'default.light': { \ 'transparent_background': 1 \ } \ } \ } execute("colorscheme " . g:light_theme) endif endfunction function! DisableTransparent() if g:vim_type == 'nvim' && g:vim_version > 0.5 :TransparentDisable elseif g:theme_color == 'dark' let g:PaperColor_Theme_Options = { \ 'theme': { \ 'default.dark': { \ 'transparent_background': 0 \ } \ } \ } execute("colorscheme " . g:dark_theme) elseif g:theme_color == 'light' let g:PaperColor_Theme_Options = { \ 'theme': { \ 'default.light': { \ 'transparent_background': 0 \ } \ } \ } execute("colorscheme " . g:light_theme) endif endfunction " delete signal file if exist function! DeleteSignalFile(name) if filereadable(expand(g:vim_dir . a:name)) call delete(expand(g:vim_dir . a:name)) endif endfunction " Create signal file if not exist function! CreateSignalFile(name) call system("touch " . g:vim_dir . a:name) endfunction " ToggleTransparent background " only works in dark theme function! ToggleTransparent() if g:transparent_dark_theme && g:theme_color == 'dark' call DisableTransparent() let g:transparent_dark_theme = v:false call DeleteSignalFile('.transparent_dark_theme.signal') elseif g:transparent_light_theme && g:theme_color == 'light' call DisableTransparent() let g:transparent_light_theme = v:false call DeleteSignalFile('.transparent_light_theme.signal') else call EnableTransparent() if g:theme_color == 'dark' let g:transparent_dark_theme = v:true call CreateSignalFile('.transparent_dark_theme.signal') else let g:transparent_light_theme = v:true call CreateSignalFile('.transparent_light_theme.signal') endif endif call TransparentBackgroundFix() endfunction " { " nvim only theme " has('nvim') check if it's running on nvim rather than " having neovim on your machine if isdirectory(expand(plugin_dir . "/nightfox.nvim")) && isdirectory(expand(plugin_dir . "/github-nvim-theme")) && has('nvim') && g:vim_version >= 0.5 let g:light_theme = 'dawnfox' "let g:dark_theme = 'nightfox' let g:dark_theme = 'github_dark' let g:airline_dark_theme = "hybrid" " } " { " vim theme elseif isdirectory(expand(plugin_dir . "/papercolor-theme")) " improve coc color in this theme let g:light_theme = 'PaperColor' let g:dark_theme = 'PaperColor' endif " } if g:theme_color == 'dark' let g:airline_theme=g:airline_dark_theme call SetDarkTheme() else let g:airline_theme=g:airline_light_theme call SetLightTheme() endif " Since in .vimrc we cannot call plugin function as they " are not loaded (:help startup) if g:transparent_dark_theme && g:theme_color == 'dark' || g:transparent_light_theme && g:theme_color == 'light' if g:vim_type == 'nvim' && g:vim_version > 0.5 let g:transparent_enabled = v:true else call EnableTransparent() endif else if g:vim_type == 'nvim' && g:vim_version > 0.5 let g:transparent_enabled = v:false else call DisableTransparent() endif endif call TransparentBackgroundFix() " Allow to trigger background function! ToggleBG() " Inversion if g:theme_color == "dark" call SetLightTheme() call SetAirlineTheme(g:airline_light_theme) call CreateSignalFile('.light_theme.signal') else call SetDarkTheme() call SetAirlineTheme(g:airline_dark_theme) " for saving theme state call DeleteSignalFile(".light_theme.signal") endif if g:transparent_dark_theme && g:theme_color == 'dark' || g:transparent_light_theme && g:theme_color == 'light' call EnableTransparent() else call DisableTransparent() endif call TransparentBackgroundFix() endfunction " } " Key_Mappings " (This doesn't include plugin specific mapping. " For them please check plugin Preferences) " { " Toggle dark/light theme noremap bg :call ToggleBG() " Toggle transparent background noremap tb :call ToggleTransparent() " Buffer navigation nnoremap q :bprevious nnoremap e :bnext " leader s change all occurence nnoremap s :%s/\<\>/ " leader num change tab nnoremap 1 :b1 nnoremap 2 :b2 nnoremap 3 :b3 nnoremap 4 :b4 nnoremap 5 :b5 nnoremap 6 :b6 nnoremap 7 :b7 nnoremap 8 :b8 nnoremap 9 :b9 " split window comform with other window management shortcuts nnoremap % :vsplit nnoremap " :split " }