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
 
  51 "setting gf (go file) path
 
  52 "change kernel version to your version, for kernel development
 
  53 set path=.,lib;,include;,includes;
 
  54 set path+=/usr/include,/usr/include/c++/*
 
  55 set path+=/usr/local/include
 
  59 highlight ColorColumn ctermbg=0 guibg=lightgrey
 
  61 " Writes to the unnamed register also writes to the * and + registers. This
 
  62 " makes it easy to interact with the system clipboard
 
  63 if has ('unnamedplus')
 
  64     set clipboard=unnamedplus
 
  70     Plug 'morhetz/gruvbox'
 
  71     Plug 'Yggdroot/indentLine'
 
  72     Plug 'christoomey/vim-tmux-navigator'
 
  73     Plug 'vim-airline/vim-airline'
 
  74     "Plug 'vim-airline/vim-airline-themes'
 
  76     Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
 
  77     Plug 'junegunn/fzf.vim'
 
  78     Plug 'ludovicchabant/vim-gutentags'
 
  80     Plug 'mbbill/undotree'
 
  81     Plug 'preservim/nerdtree'
 
  82     Plug 'majutsushi/tagbar'
 
  84     Plug 'plasticboy/vim-markdown'
 
  86     Plug 'tpope/vim-fugitive'
 
  87     Plug 'airblade/vim-gitgutter'
 
  88     Plug 'kdheepak/lazygit.nvim'
 
  90     "Plug 'ycm-core/YouCompleteMe'
 
  91     "Plug 'rhysd/vim-clang-format'
 
  93     Plug 'neoclide/coc.nvim'
 
  95     Plug 'nvim-treesitter/nvim-treesitter'
 
  96     "Plug 'mfussenegger/nvim-dap'
 
  97     "Plug 'puremourning/vimspector'
 
 100 "----------------------
 
 102 "----------------------
 
 103 if has_key(plugs, 'gruvbox')
 
 107 "----------------------
 
 108 " vim-airline setting
 
 109 "----------------------
 
 110 if has_key(plugs, 'vim-airline')
 
 111     "tabline with airline
 
 112     ":help airline-tabline
 
 113     let g:airline#extensions#tabline#enabled = 1
 
 114     let g:airline#extensions#tabline#show_buffers = 0
 
 115     let g:airline#extensions#tabline#show_splits = 0
 
 116     let g:airline#extensions#tabline#show_tab_count = 0
 
 117     let g:airline#extensions#tabline#show_close_button = 0
 
 120 "----------------------
 
 122 "----------------------
 
 123 if has_key(plugs, 'fzf.vim')
 
 125     nnoremap <C-p> :GFiles<CR>
 
 126     "as default <C-f>/<C-b> pair used to page down/up entire page
 
 127     nnoremap <C-f> :Tags<CR>
 
 130 "----------------------
 
 132 "----------------------
 
 133 if has_key(plugs, 'undotree')
 
 134     nnoremap <leader>u :UndotreeToggle<CR>
 
 137 "----------------------
 
 139 "----------------------
 
 140 if has_key(plugs, 'nerdtree')
 
 141     autocmd StdinReadPre * let s:std_in=1
 
 142     "when vim openning with no file, open NERDTree
 
 143     autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
 
 144     nnoremap <leader>n :NERDTreeToggle<CR>
 
 147 "----------------------
 
 149 "----------------------
 
 150 if has_key(plugs, 'tagbar')
 
 151     nnoremap <leader>t :TagbarToggle<CR>
 
 154 "----------------------
 
 155 " YouCompleteMe setting
 
 156 "----------------------
 
 157 if has_key(plugs, 'YouCompleteMe')
 
 158     let g:ycm_global_ycm_extra_conf = '~/.config/nvim/ycm_extra_conf.py'
 
 159     let g:ycm_confirm_extra_conf = 0
 
 160     let g:ycm_enable_diagnostic_signs = 0
 
 161     let g:ycm_always_populate_location_list = 1
 
 162     "let g:ycm_show_diagnostics_ui = 0
 
 163     let g:ycm_add_preview_to_completeopt = 1
 
 164     let g:ycm_autoclose_preview_window_after_completion = 1
 
 165     let g:ycm_auto_hover = 'no'
 
 167     nnoremap <silent> <leader>gd :YcmCompleter GoTo<CR>
 
 168     nnoremap <silent> <leader>gr :YcmCompleter GoToReferences<CR>
 
 171 "----------------------
 
 173 "----------------------
 
 174 if has_key(plugs, "coc.nvim")
 
 175     " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
 
 176     nmap <silent> <leader>g[ <Plug>(coc-diagnostic-prev)
 
 177     nmap <silent> <leader>g] <Plug>(coc-diagnostic-next)
 
 179     " GoTo code navigation.
 
 180     nmap <silent> <leader>gd <Plug>(coc-definition)
 
 181     nmap <silent> <leader>gr <Plug>(coc-references)
 
 182     nmap <silent> <leader>gy <Plug>(coc-type-definition)
 
 183     nmap <silent> <leader>gi <Plug>(coc-implementation)
 
 185     " Highlight the symbol and its references when holding the cursor.
 
 186     autocmd CursorHold * silent call CocActionAsync('highlight')
 
 189     nmap <leader>rn <Plug>(coc-rename)
 
 191     " Formatting selected code.
 
 192     xmap <leader>f  <Plug>(coc-format-selected)
 
 193     nmap <leader>f  <Plug>(coc-format-selected)
 
 195     " Apply AutoFix to problem on the current line.
 
 196     nmap <leader>qf  <Plug>(coc-fix-current)
 
 199     nmap <leader>gh :CocCommand clangd.switchSourceHeader<CR>
 
 201     " Use K to show documentation in preview window.
 
 202     nnoremap <silent> <leader>h :call <SID>show_documentation()<CR>
 
 203     function! s:show_documentation()
 
 204       if (index(['vim','help'], &filetype) >= 0)
 
 205         execute 'h '.expand('<cword>')
 
 206       elseif (coc#rpc#ready())
 
 207         call CocActionAsync('doHover')
 
 209         execute '!' . &keywordprg . " " . expand('<cword>')
 
 213     let g:coc_default_semantic_highlight_groups = 1
 
 214     let g:coc_global_extensions = [
 
 226 "----------------------
 
 227 " nvim-treesitter setting
 
 228 "----------------------
 
 229 if has_key(plugs, 'nvim-treesitter')
 
 230     lua require('plugin-config/nvim-treesitter')
 
 233     set foldexpr=nvim_treesitter#foldexpr()
 
 238 nnoremap J :tabprevious<CR>
 
 239 nnoremap K :tabnext<CR>
 
 240 nnoremap <leader>J :tabmove -1<CR>
 
 241 nnoremap <leader>K :tabmove +1<CR>
 
 242 nnoremap <C-h> <C-w>h
 
 243 nnoremap <C-j> <C-w>j
 
 244 nnoremap <C-k> <C-w>k
 
 245 nnoremap <C-l> <C-w>l
 
 246 nnoremap <leader>" viw<esc>a"<esc>bi"<esc>lel
 
 247 nnoremap <leader>' viw<esc>a'<esc>bi'<esc>lel
 
 248 nnoremap <silent> <Leader>+ :resize +5<CR>
 
 249 nnoremap <silent> <Leader>- :resize -5<CR>
 
 250 nnoremap <silent> <Leader>v+ :vertical resize +5<CR>
 
 251 nnoremap <silent> <Leader>v- :vertical resize -5<CR>
 
 253 " shortcut for folding
 
 254 nnoremap <silent> <Leader>fi :set foldmethod=indent<CR>
 
 255 nnoremap <silent> <Leader>fd :set foldmethod=manual<CR>ggVGzD
 
 257 "HighLight trailing whitespace"
 
 258 highlight ExtraWhitespace ctermbg=red guibg=red
 
 259 match ExtraWhitespace /\s\+$/
 
 261 "use powerline-vim for normal use
 
 262 "instead of installing for both user and root
 
 263 "run to install lib: pip3 install --user powerline-status
 
 264 "python3 from powerline.vim import setup as powerline_setup
 
 265 "python3 powerline_setup()
 
 266 "python3 del powerline_setup