6 set t_Co=256 "terminal color
 
   8 "set term=xterm-256color
 
  10 "In order to display chinese in GBK
 
  11 "let &termencoding=&encoding
 
  12 set fileencodings=utf-8,gbk
 
  15 set encoding=utf-8 "required for ycm
 
  22 set backspace=indent,eol,start
 
  34 set laststatus=2 "always show status line
 
  47 set undodir=~/.cache/nvim/undodir
 
  50 " auto added comment leader, detail for :h formatoptions
 
  54 "setting gf (go file) path
 
  55 "change kernel version to your version, for kernel development
 
  56 set path=.,lib;,include;,includes;
 
  57 set path+=/usr/include,/usr/include/c++/*
 
  58 set path+=/usr/local/include
 
  62 highlight ColorColumn ctermbg=0 guibg=lightgrey
 
  64 " Writes to the unnamed register also writes to the * and + registers. This
 
  65 " makes it easy to interact with the system clipboard
 
  66 if has ('unnamedplus')
 
  67     set clipboard=unnamedplus
 
  73     Plug 'morhetz/gruvbox'
 
  74     Plug 'Yggdroot/indentLine'
 
  75     Plug 'christoomey/vim-tmux-navigator'
 
  76     Plug 'vim-airline/vim-airline'
 
  77     "Plug 'vim-airline/vim-airline-themes'
 
  79     Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
 
  80     Plug 'junegunn/fzf.vim'
 
  81     Plug 'ludovicchabant/vim-gutentags'
 
  83     Plug 'mbbill/undotree'
 
  84     Plug 'preservim/nerdtree'
 
  85     Plug 'majutsushi/tagbar'
 
  87     Plug 'plasticboy/vim-markdown'
 
  89     Plug 'tpope/vim-fugitive'
 
  90     Plug 'airblade/vim-gitgutter'
 
  91     Plug 'kdheepak/lazygit.nvim'
 
  93     "Plug 'ycm-core/YouCompleteMe'
 
  94     "Plug 'rhysd/vim-clang-format'
 
  96     Plug 'neoclide/coc.nvim', {'branch': 'release'}
 
  98     Plug 'nvim-treesitter/nvim-treesitter'
 
  99     "Plug 'mfussenegger/nvim-dap'
 
 100     "Plug 'puremourning/vimspector'
 
 103     "" avante and its dependents
 
 105     Plug 'nvim-lua/plenary.nvim'
 
 106     Plug 'MunifTanjim/nui.nvim'
 
 107     Plug 'MeanderingProgrammer/render-markdown.nvim'
 
 110     Plug 'hrsh7th/nvim-cmp'
 
 111     Plug 'nvim-tree/nvim-web-devicons' "or Plug 'echasnovski/mini.icons'
 
 112     Plug 'HakonHarnes/img-clip.nvim'
 
 113     Plug 'zbirenbaum/copilot.lua'
 
 114     Plug 'stevearc/dressing.nvim' " for enhanced input UI
 
 115     Plug 'folke/snacks.nvim' " for modern input UI
 
 117     " Yay, pass source=true if you want to build from source
 
 118     Plug 'yetone/avante.nvim', { 'branch': 'main', 'do': 'make' }
 
 124 "----------------------
 
 126 "----------------------
 
 127 if has_key(plugs, 'gruvbox')
 
 131 "----------------------
 
 132 " vim-airline setting
 
 133 "----------------------
 
 134 if has_key(plugs, 'vim-airline')
 
 135     "tabline with airline
 
 136     ":help airline-tabline
 
 137     let g:airline#extensions#tabline#enabled = 1
 
 138     let g:airline#extensions#tabline#show_buffers = 0
 
 139     let g:airline#extensions#tabline#show_splits = 0
 
 140     let g:airline#extensions#tabline#show_tab_count = 0
 
 141     let g:airline#extensions#tabline#show_close_button = 0
 
 144 "----------------------
 
 146 "----------------------
 
 147 if has_key(plugs, 'fzf.vim')
 
 149     nnoremap <C-p> :GFiles<CR>
 
 150     "as default <C-f>/<C-b> pair used to page down/up entire page
 
 151     nnoremap <C-f> :Tags<CR>
 
 154 "----------------------
 
 156 "----------------------
 
 157 if has_key(plugs, 'undotree')
 
 158     nnoremap <leader>u :UndotreeToggle<CR>
 
 161 "----------------------
 
 163 "----------------------
 
 164 if has_key(plugs, 'nerdtree')
 
 165     autocmd StdinReadPre * let s:std_in=1
 
 166     "when vim openning with no file, open NERDTree
 
 167     autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
 
 168     nnoremap <leader>n :NERDTreeToggle<CR>
 
 171 "----------------------
 
 173 "----------------------
 
 174 if has_key(plugs, 'tagbar')
 
 175     nnoremap <leader>t :TagbarToggle<CR>
 
 178 "----------------------
 
 179 " YouCompleteMe setting
 
 180 "----------------------
 
 181 if has_key(plugs, 'YouCompleteMe')
 
 182     let g:ycm_global_ycm_extra_conf = '~/.config/nvim/ycm_extra_conf.py'
 
 183     let g:ycm_confirm_extra_conf = 0
 
 184     let g:ycm_enable_diagnostic_signs = 0
 
 185     let g:ycm_always_populate_location_list = 1
 
 186     "let g:ycm_show_diagnostics_ui = 0
 
 187     let g:ycm_add_preview_to_completeopt = 1
 
 188     let g:ycm_autoclose_preview_window_after_completion = 1
 
 189     let g:ycm_auto_hover = 'no'
 
 191     nnoremap <silent> <leader>gd :YcmCompleter GoTo<CR>
 
 192     nnoremap <silent> <leader>gr :YcmCompleter GoToReferences<CR>
 
 195 "----------------------
 
 197 "----------------------
 
 198 if has_key(plugs, "coc.nvim")
 
 199     " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
 
 200     nmap <silent> <leader>g[ <Plug>(coc-diagnostic-prev)
 
 201     nmap <silent> <leader>g] <Plug>(coc-diagnostic-next)
 
 203     " GoTo code navigation.
 
 204     nmap <silent> <leader>gd <Plug>(coc-definition)
 
 205     nmap <silent> <leader>gr <Plug>(coc-references)
 
 206     nmap <silent> <leader>gy <Plug>(coc-type-definition)
 
 207     nmap <silent> <leader>gi <Plug>(coc-implementation)
 
 209     " Highlight the symbol and its references when holding the cursor.
 
 210     autocmd CursorHold * silent call CocActionAsync('highlight')
 
 213     nmap <leader>rn <Plug>(coc-rename)
 
 215     " Formatting selected code.
 
 216     xmap <leader>f  <Plug>(coc-format-selected)
 
 217     nmap <leader>f  <Plug>(coc-format-selected)
 
 219     " Apply AutoFix to problem on the current line.
 
 220     nmap <leader>qf  <Plug>(coc-fix-current)
 
 223     nmap <leader>gh :CocCommand clangd.switchSourceHeader<CR>
 
 225     " Use K to show documentation in preview window.
 
 226     nnoremap <silent> <leader>h :call <SID>show_documentation()<CR>
 
 227     function! s:show_documentation()
 
 228       if (index(['vim','help'], &filetype) >= 0)
 
 229         execute 'h '.expand('<cword>')
 
 230       elseif (coc#rpc#ready())
 
 231         call CocActionAsync('doHover')
 
 233         execute '!' . &keywordprg . " " . expand('<cword>')
 
 237     let g:coc_default_semantic_highlight_groups = 1
 
 238     let g:coc_global_extensions = [
 
 253 "----------------------
 
 254 " nvim-treesitter setting
 
 255 "----------------------
 
 256 if has_key(plugs, 'nvim-treesitter')
 
 257     lua require('plugin-config/nvim-treesitter')
 
 260     set foldexpr=nvim_treesitter#foldexpr()
 
 264 "----------------------
 
 265 " avante.nvim setting
 
 266 "----------------------
 
 267 if has_key(plugs, 'avante.nvim')
 
 268     lua require('plugin-config/nvim-avante')
 
 271 nnoremap J :tabprevious<CR>
 
 272 nnoremap K :tabnext<CR>
 
 273 nnoremap <leader>J :tabmove -1<CR>
 
 274 nnoremap <leader>K :tabmove +1<CR>
 
 275 nnoremap <C-h> <C-w>h
 
 276 nnoremap <C-j> <C-w>j
 
 277 nnoremap <C-k> <C-w>k
 
 278 nnoremap <C-l> <C-w>l
 
 279 nnoremap <leader>" viw<esc>a"<esc>bi"<esc>lel
 
 280 nnoremap <leader>' viw<esc>a'<esc>bi'<esc>lel
 
 281 nnoremap <silent> <Leader>+ :resize +5<CR>
 
 282 nnoremap <silent> <Leader>- :resize -5<CR>
 
 283 nnoremap <silent> <Leader>v+ :vertical resize +5<CR>
 
 284 nnoremap <silent> <Leader>v- :vertical resize -5<CR>
 
 286 " shortcut for folding
 
 287 nnoremap <silent> <Leader>fi :set foldmethod=indent<CR>
 
 288 nnoremap <silent> <Leader>fd :set foldmethod=manual<CR>ggVGzD
 
 290 "HighLight trailing whitespace"
 
 291 highlight ExtraWhitespace ctermbg=red guibg=red
 
 292 match ExtraWhitespace /\s\+$/
 
 294 "use powerline-vim for normal use
 
 295 "instead of installing for both user and root
 
 296 "run to install lib: pip3 install --user powerline-status
 
 297 "python3 from powerline.vim import setup as powerline_setup
 
 298 "python3 powerline_setup()
 
 299 "python3 del powerline_setup