Xinqi Bao's Git

d38c9ff3c0ab38029666767cf2619e9ab646a773
[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+=/ro
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
78 Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
79 Plug 'junegunn/fzf.vim'
80 Plug 'ludovicchabant/vim-gutentags'
81
82 Plug 'mbbill/undotree'
83 Plug 'preservim/nerdtree'
84 Plug 'majutsushi/tagbar'
85
86 Plug 'MeanderingProgrammer/render-markdown.nvim'
87 Plug 'plasticboy/vim-markdown'
88 Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && npx --yes yarn install' }
89
90 Plug 'tpope/vim-fugitive'
91 Plug 'airblade/vim-gitgutter'
92 Plug 'kdheepak/lazygit.nvim'
93
94 Plug 'neoclide/coc.nvim', {'branch': 'release'}
95
96 Plug 'nvim-treesitter/nvim-treesitter'
97
98 Plug 'zbirenbaum/copilot.lua'
99
100 " execute 'source' fnameescape(expand('<sfile>:p:h') . '/opt/avante.vim')
101 " execute 'source' fnameescape(expand('<sfile>:p:h') . '/opt/leetcode.vim')
102
103 call plug#end()
104
105 "----------------------
106 " gruvbox setting
107 "----------------------
108 if has_key(plugs, 'gruvbox')
109 colorscheme gruvbox
110 endif
111
112 "----------------------
113 " vim-airline setting
114 "----------------------
115 if has_key(plugs, 'vim-airline')
116 "tabline with airline
117 ":help airline-tabline
118 let g:airline#extensions#tabline#enabled = 1
119 let g:airline#extensions#tabline#show_buffers = 0
120 let g:airline#extensions#tabline#show_splits = 0
121 let g:airline#extensions#tabline#show_tab_count = 0
122 let g:airline#extensions#tabline#show_close_button = 0
123 endif
124
125 "----------------------
126 " fzf.vim setting
127 "----------------------
128 if has_key(plugs, 'fzf.vim')
129 "mapping for fzf.vim
130 nnoremap <C-p> :GFiles<CR>
131 "as default <C-f>/<C-b> pair used to page down/up entire page
132 nnoremap <C-f> :Tags<CR>
133 endif
134
135 "----------------------
136 " undotree setting
137 "----------------------
138 if has_key(plugs, 'undotree')
139 nnoremap <leader>u :UndotreeToggle<CR>
140 endif
141
142 "----------------------
143 " nerdtree setting
144 "----------------------
145 if has_key(plugs, 'nerdtree')
146 autocmd StdinReadPre * let s:std_in=1
147 "when vim openning with no file, open NERDTree
148 autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
149 nnoremap <leader>n :NERDTreeToggle<CR>
150 endif
151
152 "----------------------
153 " tagbar setting
154 "----------------------
155 if has_key(plugs, 'tagbar')
156 nnoremap <leader>t :TagbarToggle<CR>
157 endif
158
159 "----------------------
160 " coc.vim setting
161 "----------------------
162 if has_key(plugs, "coc.nvim")
163 " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
164 nmap <silent> <leader>g[ <Plug>(coc-diagnostic-prev)
165 nmap <silent> <leader>g] <Plug>(coc-diagnostic-next)
166
167 " GoTo code navigation.
168 nmap <silent> <leader>gd <Plug>(coc-definition)
169 nmap <silent> <leader>gr <Plug>(coc-references)
170 nmap <silent> <leader>gy <Plug>(coc-type-definition)
171 nmap <silent> <leader>gi <Plug>(coc-implementation)
172
173 " Highlight the symbol and its references when holding the cursor.
174 autocmd CursorHold * silent call CocActionAsync('highlight')
175
176 " Symbol renaming.
177 nmap <leader>rn <Plug>(coc-rename)
178
179 " Formatting selected code.
180 xmap <leader>f <Plug>(coc-format-selected)
181 nmap <leader>f <Plug>(coc-format-selected)
182
183 " Apply AutoFix to problem on the current line.
184 nmap <leader>qf <Plug>(coc-fix-current)
185
186 " clangd
187 nmap <leader>gh :CocCommand clangd.switchSourceHeader<CR>
188
189 " Use K to show documentation in preview window.
190 nnoremap <silent> <leader>h :call <SID>show_documentation()<CR>
191 function! s:show_documentation()
192 if (index(['vim','help'], &filetype) >= 0)
193 execute 'h '.expand('<cword>')
194 elseif (coc#rpc#ready())
195 call CocActionAsync('doHover')
196 else
197 execute '!' . &keywordprg . " " . expand('<cword>')
198 endif
199 endfunction
200
201 let g:coc_default_semantic_highlight_groups = 1
202 let g:coc_global_extensions = [
203 \'coc-marketplace',
204 \'coc-highlight',
205 \'coc-clangd',
206 \'coc-pyright',
207 \'coc-lua',
208 \'coc-sh',
209 \'coc-cmake',
210 \'coc-xmake',
211 \'coc-json',
212 \'coc-yaml',
213 \'coc-vimlsp',
214 \]
215 endif
216
217 "----------------------
218 " nvim-treesitter setting
219 "----------------------
220 if has_key(plugs, 'nvim-treesitter')
221 lua require('plugin-config/nvim-treesitter')
222
223 "set foldmethod=expr
224 set foldmethod=indent
225 set foldexpr=nvim_treesitter#foldexpr()
226 set foldlevel=99
227 endif
228
229 "----------------------
230 " copilot.lua setting
231 "----------------------
232 if has_key(plugs, 'copilot.lua')
233 lua require('plugin-config/copilot')
234 endif
235
236 "----------------------
237 " avante.nvim setting
238 "----------------------
239 if has_key(plugs, 'avante.nvim')
240 lua require('plugin-config/avante')
241 endif
242
243 "----------------------
244 " leetcode.nvim setting
245 "----------------------
246 if has_key(plugs, 'leetcode.nvim')
247 lua require('plugin-config/leetcode')
248 endif
249
250 nnoremap J :tabprevious<CR>
251 nnoremap K :tabnext<CR>
252 nnoremap <leader>J :tabmove -1<CR>
253 nnoremap <leader>K :tabmove +1<CR>
254 nnoremap <C-h> <C-w>h
255 nnoremap <C-j> <C-w>j
256 nnoremap <C-k> <C-w>k
257 nnoremap <C-l> <C-w>l
258 nnoremap <leader>" viw<esc>a"<esc>bi"<esc>lel
259 nnoremap <leader>' viw<esc>a'<esc>bi'<esc>lel
260 nnoremap <silent> <Leader>+ :resize +5<CR>
261 nnoremap <silent> <Leader>- :resize -5<CR>
262 nnoremap <silent> <Leader>v+ :vertical resize +5<CR>
263 nnoremap <silent> <Leader>v- :vertical resize -5<CR>
264
265 " shortcut for folding
266 nnoremap <silent> <Leader>fi :set foldmethod=indent<CR>
267 nnoremap <silent> <Leader>fd :set foldmethod=manual<CR>ggVGzD
268
269 " 禁用 <C-a>
270 nnoremap <C-a> <Nop>
271 xnoremap <C-a> <Nop>
272
273 "HighLight trailing whitespace"
274 highlight ExtraWhitespace ctermbg=red guibg=red
275 match ExtraWhitespace /\s\+$/
276
277 "use powerline-vim for normal use
278 "instead of installing for both user and root
279 "run to install lib: pip3 install --user powerline-status
280 "python3 from powerline.vim import setup as powerline_setup
281 "python3 powerline_setup()
282 "python3 del powerline_setup