Xinqi Bao's Git

add avante.nvim and its config
[dotfiles.git] / .config / nvim / init.vim
1 syntax enable
2 let mapleader=" "
3
4 set background=dark
5 set termguicolors
6 set t_Co=256 "terminal color
7 set t_ut=""
8 "set term=xterm-256color
9
10 "In order to display chinese in GBK
11 "let &termencoding=&encoding
12 set fileencodings=utf-8,gbk
13 set fileformat=unix
14 set foldmethod=indent
15 set encoding=utf-8 "required for ycm
16
17 set tabstop=4
18 set softtabstop=4
19 set shiftwidth=4
20 set expandtab
21 set smartindent
22 set backspace=indent,eol,start
23
24 set number
25 set nowrap
26 set signcolumn=auto
27 set smartcase
28 set incsearch
29 set hlsearch
30 set ignorecase
31 set cursorline
32 set conceallevel=0
33 set showtabline=2
34 set laststatus=2 "always show status line
35 set noshowmode
36 set wildmenu
37
38 set mouse=a
39 set autochdir
40 set updatetime=300
41 set noerrorbells
42
43 " Turn backup off
44 set noswapfile
45 set nobackup
46 set nowritebackup
47 set undodir=~/.cache/nvim/undodir
48 set undofile
49
50 " auto added comment leader, detail for :h formatoptions
51 set formatoptions+=/
52
53 set tags=tags~;,tags~
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
59
60 "ColumnLimit
61 set colorcolumn=120
62 highlight ColorColumn ctermbg=0 guibg=lightgrey
63
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
68 else
69 set clipboard=unnamed
70 endif
71
72 call plug#begin()
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'
78
79 Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
80 Plug 'junegunn/fzf.vim'
81 Plug 'ludovicchabant/vim-gutentags'
82
83 Plug 'mbbill/undotree'
84 Plug 'preservim/nerdtree'
85 Plug 'majutsushi/tagbar'
86
87 Plug 'plasticboy/vim-markdown'
88
89 Plug 'tpope/vim-fugitive'
90 Plug 'airblade/vim-gitgutter'
91 Plug 'kdheepak/lazygit.nvim'
92
93 "Plug 'ycm-core/YouCompleteMe'
94 "Plug 'rhysd/vim-clang-format'
95
96 Plug 'neoclide/coc.nvim', {'branch': 'release'}
97
98 Plug 'nvim-treesitter/nvim-treesitter'
99 "Plug 'mfussenegger/nvim-dap'
100 "Plug 'puremourning/vimspector'
101
102 """
103 "" avante and its dependents
104 " Deps
105 Plug 'nvim-lua/plenary.nvim'
106 Plug 'MunifTanjim/nui.nvim'
107 Plug 'MeanderingProgrammer/render-markdown.nvim'
108
109 " Optional deps
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
116
117 " Yay, pass source=true if you want to build from source
118 Plug 'yetone/avante.nvim', { 'branch': 'main', 'do': 'make' }
119 ""
120 ""
121
122 call plug#end()
123
124 "----------------------
125 " gruvbox setting
126 "----------------------
127 if has_key(plugs, 'gruvbox')
128 colorscheme gruvbox
129 endif
130
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
142 endif
143
144 "----------------------
145 " fzf.vim setting
146 "----------------------
147 if has_key(plugs, 'fzf.vim')
148 "mapping for 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>
152 endif
153
154 "----------------------
155 " undotree setting
156 "----------------------
157 if has_key(plugs, 'undotree')
158 nnoremap <leader>u :UndotreeToggle<CR>
159 endif
160
161 "----------------------
162 " nerdtree setting
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>
169 endif
170
171 "----------------------
172 " tagbar setting
173 "----------------------
174 if has_key(plugs, 'tagbar')
175 nnoremap <leader>t :TagbarToggle<CR>
176 endif
177
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'
190
191 nnoremap <silent> <leader>gd :YcmCompleter GoTo<CR>
192 nnoremap <silent> <leader>gr :YcmCompleter GoToReferences<CR>
193 endif
194
195 "----------------------
196 " coc.vim setting
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)
202
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)
208
209 " Highlight the symbol and its references when holding the cursor.
210 autocmd CursorHold * silent call CocActionAsync('highlight')
211
212 " Symbol renaming.
213 nmap <leader>rn <Plug>(coc-rename)
214
215 " Formatting selected code.
216 xmap <leader>f <Plug>(coc-format-selected)
217 nmap <leader>f <Plug>(coc-format-selected)
218
219 " Apply AutoFix to problem on the current line.
220 nmap <leader>qf <Plug>(coc-fix-current)
221
222 " clangd
223 nmap <leader>gh :CocCommand clangd.switchSourceHeader<CR>
224
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')
232 else
233 execute '!' . &keywordprg . " " . expand('<cword>')
234 endif
235 endfunction
236
237 let g:coc_default_semantic_highlight_groups = 1
238 let g:coc_global_extensions = [
239 \'coc-marketplace',
240 \'coc-highlight',
241 \'coc-clangd',
242 \'coc-pyright',
243 \'coc-lua',
244 \'coc-sh',
245 \'coc-cmake',
246 \'coc-xmake',
247 \'coc-json',
248 \'coc-yaml',
249 \'coc-vimlsp',
250 \]
251 endif
252
253 "----------------------
254 " nvim-treesitter setting
255 "----------------------
256 if has_key(plugs, 'nvim-treesitter')
257 lua require('plugin-config/nvim-treesitter')
258
259 set foldmethod=expr
260 set foldexpr=nvim_treesitter#foldexpr()
261 set foldlevel=99
262 endif
263
264 "----------------------
265 " avante.nvim setting
266 "----------------------
267 if has_key(plugs, 'avante.nvim')
268 lua require('plugin-config/nvim-avante')
269 endif
270
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>
285
286 " shortcut for folding
287 nnoremap <silent> <Leader>fi :set foldmethod=indent<CR>
288 nnoremap <silent> <Leader>fd :set foldmethod=manual<CR>ggVGzD
289
290 "HighLight trailing whitespace"
291 highlight ExtraWhitespace ctermbg=red guibg=red
292 match ExtraWhitespace /\s\+$/
293
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