Xinqi Bao's Git

76502a29f726774c162b2d0ec18ad917bb9ed044
[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=manual
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 set tags=tags~;,tags~
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
56
57 "ColumnLimit
58 set colorcolumn=120
59 highlight ColorColumn ctermbg=0 guibg=lightgrey
60
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
65 else
66 set clipboard=unnamed
67 endif
68
69 call plug#begin()
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'
75
76 Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
77 Plug 'junegunn/fzf.vim'
78 Plug 'ludovicchabant/vim-gutentags'
79
80 Plug 'mbbill/undotree'
81 Plug 'preservim/nerdtree'
82 Plug 'majutsushi/tagbar'
83
84 Plug 'plasticboy/vim-markdown'
85
86 Plug 'tpope/vim-fugitive'
87 Plug 'airblade/vim-gitgutter'
88 Plug 'kdheepak/lazygit.nvim'
89
90 "Plug 'ycm-core/YouCompleteMe'
91 "Plug 'rhysd/vim-clang-format'
92
93 Plug 'neoclide/coc.nvim'
94
95 Plug 'nvim-treesitter/nvim-treesitter'
96 "Plug 'mfussenegger/nvim-dap'
97 "Plug 'puremourning/vimspector'
98 call plug#end()
99
100 "----------------------
101 " gruvbox setting
102 "----------------------
103 if has_key(plugs, 'gruvbox')
104 colorscheme gruvbox
105 endif
106
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
118 endif
119
120 "----------------------
121 " fzf.vim setting
122 "----------------------
123 if has_key(plugs, 'fzf.vim')
124 "mapping for 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>
128 endif
129
130 "----------------------
131 " undotree setting
132 "----------------------
133 if has_key(plugs, 'undotree')
134 nnoremap <leader>u :UndotreeToggle<CR>
135 endif
136
137 "----------------------
138 " nerdtree setting
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>
145 endif
146
147 "----------------------
148 " tagbar setting
149 "----------------------
150 if has_key(plugs, 'tagbar')
151 nnoremap <leader>t :TagbarToggle<CR>
152 endif
153
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'
166
167 nnoremap <silent> <leader>gd :YcmCompleter GoTo<CR>
168 nnoremap <silent> <leader>gr :YcmCompleter GoToReferences<CR>
169 endif
170
171 "----------------------
172 " coc.vim setting
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)
178
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)
184
185 " Highlight the symbol and its references when holding the cursor.
186 autocmd CursorHold * silent call CocActionAsync('highlight')
187
188 " Symbol renaming.
189 nmap <leader>rn <Plug>(coc-rename)
190
191 " Formatting selected code.
192 xmap <leader>f <Plug>(coc-format-selected)
193 nmap <leader>f <Plug>(coc-format-selected)
194
195 " Apply AutoFix to problem on the current line.
196 nmap <leader>qf <Plug>(coc-fix-current)
197
198 " clangd
199 nmap <leader>gh :CocCommand clangd.switchSourceHeader<CR>
200
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')
208 else
209 execute '!' . &keywordprg . " " . expand('<cword>')
210 endif
211 endfunction
212
213 let g:coc_default_semantic_highlight_groups = 1
214 let g:coc_global_extensions = [
215 \'coc-marketplace',
216 \'coc-highlight',
217 \'coc-clangd',
218 \'coc-jedi',
219 \'coc-vimlsp',
220 \'coc-sh',
221 \'coc-json',
222 \'coc-yaml'
223 \]
224 endif
225
226 "----------------------
227 " nvim-treesitter setting
228 "----------------------
229 if has_key(plugs, 'nvim-treesitter')
230 lua require('plugin-config/nvim-treesitter')
231
232 set foldmethod=expr
233 set foldexpr=nvim_treesitter#foldexpr()
234 set foldlevel=99
235 endif
236
237
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>
252
253 " shortcut for folding
254 nnoremap <silent> <Leader>fi :set foldmethod=indent<CR>
255 nnoremap <silent> <Leader>fd :set foldmethod=manual<CR>ggVGzD
256
257 "HighLight trailing whitespace"
258 highlight ExtraWhitespace ctermbg=red guibg=red
259 match ExtraWhitespace /\s\+$/
260
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