-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcoc-settings.vim
More file actions
252 lines (220 loc) · 7.87 KB
/
coc-settings.vim
File metadata and controls
252 lines (220 loc) · 7.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
" ==============================================================================
" COC Configuration for Vim - Integrated with your setup
" ==============================================================================
" Basic CoC Settings
" =================
" Set encoding for CoC
set encoding=utf-8
" Avoid issues with backup files
set nobackup
set nowritebackup
" Improve responsiveness
set updatetime=300
" Always show the signcolumn for diagnostics
set signcolumn=number
" Completion Settings
" ==================
" Tab completion navigation
inoremap <silent><expr> <TAB>
\ coc#pum#visible() ? coc#pum#next(1) :
\ CheckBackspace() ? "\<Tab>" :
\ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
" Make <CR> to accept selected completion item
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" Use <c-space> to trigger completion
if has('nvim')
inoremap <silent><expr> <c-space> coc#refresh()
else
inoremap <silent><expr> <c-@> coc#refresh()
endif
" Diagnostics Navigation
" =====================
" Use [g and ]g to navigate diagnostics
nmap <silent><nowait> [g <Plug>(coc-diagnostic-prev)
nmap <silent><nowait> ]g <Plug>(coc-diagnostic-next)
" GoTo Code Navigation
" ===================
nmap <silent><nowait> gd <Plug>(coc-definition)
nmap <silent><nowait> gy <Plug>(coc-type-definition)
nmap <silent><nowait> gi <Plug>(coc-implementation)
nmap <silent><nowait> gr <Plug>(coc-references)
" Show Documentation
" =================
nnoremap <silent> K :call ShowDocumentation()<CR>
function! ShowDocumentation()
if CocAction('hasProvider', 'hover')
call CocActionAsync('doHover')
else
call feedkeys('K', 'in')
endif
endfunction
" Symbol highlighting and renaming
" ================================
" Highlight the symbol and references when holding cursor
autocmd CursorHold * silent call CocActionAsync('highlight')
" Symbol renaming
nmap <leader>rn <Plug>(coc-rename)
" Formatting and code actions
" ==========================
" Format selected code
xmap <leader>ff <Plug>(coc-format-selected)
nmap <leader>ff <Plug>(coc-format-selected)
" Setup formatexpr for specific filetypes
augroup cocformat
autocmd!
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
augroup end
" Code actions
" ===========
xmap <leader>a <Plug>(coc-codeaction-selected)
nmap <leader>a <Plug>(coc-codeaction-selected)
nmap <leader>ac <Plug>(coc-codeaction-cursor)
nmap <leader>as <Plug>(coc-codeaction-source)
nmap <leader>qf <Plug>(coc-fix-current)
" Refactoring
" ===========
nmap <silent> <leader>re <Plug>(coc-codeaction-refactor)
xmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)
nmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)
" Code Lens
" =========
nmap <leader>cl <Plug>(coc-codelens-action)
" Text Objects
" ===========
" Use text objects for functions and classes
xmap if <Plug>(coc-funcobj-i)
omap if <Plug>(coc-funcobj-i)
xmap af <Plug>(coc-funcobj-a)
omap af <Plug>(coc-funcobj-a)
xmap ic <Plug>(coc-classobj-i)
omap ic <Plug>(coc-classobj-i)
xmap ac <Plug>(coc-classobj-a)
omap ac <Plug>(coc-classobj-a)
" Floating Window Scroll
" ======================
if has('nvim-0.4.0') || has('patch-8.2.0750')
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
endif
" Selection Ranges
" ===============
nmap <silent> <C-s> <Plug>(coc-range-select)
xmap <silent> <C-s> <Plug>(coc-range-select)
" CoC Commands
" ===========
" Add Format command
command! -nargs=0 Format :call CocActionAsync('format')
" Add Fold command
command! -nargs=? Fold :call CocAction('fold', <f-args>)
" Add import organization command
command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport')
" Status Line
" ==========
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
" CocList Mappings
" ==============
" Show diagnostics
nnoremap <silent><nowait> <space>d :<C-u>CocList diagnostics<cr>
" Manage extensions
nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
" Show commands
nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
" Find symbol in current document
nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
" Search workspace symbols
nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
" Navigate items
nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
" Resume list
nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
" Extensions
" =========
let g:coc_global_extensions = [
\ 'coc-texlab',
\ 'coc-json',
\ 'coc-git',
\ 'coc-clangd',
\ 'coc-class-css',
\ 'coc-css',
\ 'coc-emmet',
\ 'coc-html',
\ 'coc-htmldjango',
\ 'coc-highlight',
\ 'coc-html-css-support',
\ 'coc-java',
\ 'coc-jedi',
\ 'coc-ltex',
\ 'coc-lightbulb',
\ 'coc-sh',
\ 'coc-snippets',
\ 'coc-toml',
\ 'coc-tsserver',
\ 'coc-vimlsp',
\ 'coc-xml',
\ 'coc-yaml'
\ ]
" Filetype mappings
" ===============
let g:coc_filetype_map = {'tex': 'latex'}
" Appearance
" =========
" Floating window colors
hi CocFloating ctermbg=235 ctermfg=255 cterm=NONE guibg=#282A36 guifg=#F8F8F2 gui=NONE
hi CocFloatingSel ctermbg=61 ctermfg=255 cterm=bold guibg=#6272A4 guifg=#F8F8F2 gui=bold
hi CocHintFloat ctermbg=235 ctermfg=117 cterm=NONE guibg=#282A36 guifg=#8BE9FD gui=NONE
" Diagnostics (Errors, Warnings, Info, Hints)
hi CocErrorSign ctermbg=NONE ctermfg=203 cterm=bold guibg=NONE guifg=#FF5555 gui=bold
hi CocWarningSign ctermbg=NONE ctermfg=215 cterm=bold guibg=NONE guifg=#FFB86C gui=bold
hi CocInfoSign ctermbg=NONE ctermfg=117 cterm=bold guibg=NONE guifg=#8BE9FD gui=bold
hi CocHintSign ctermbg=NONE ctermfg=84 cterm=bold guibg=NONE guifg=#50FA7B gui=bold
" Virtual text (inline messages)
hi CocErrorVirtualText ctermfg=203 cterm=italic,bold guifg=#FF5555 gui=italic,bold
hi CocWarningVirtualText ctermfg=215 cterm=italic,bold guifg=#FFB86C gui=italic,bold
hi CocInfoVirtualText ctermfg=117 cterm=italic guifg=#8BE9FD gui=italic
hi CocHintVirtualText ctermfg=84 cterm=italic guifg=#50FA7B gui=italic
hi CocInlayHint ctermfg=61 ctermbg=NONE cterm=italic guifg=#6272A4 guibg=NONE gui=italic
" Border settings
let g:coc_borderchars = ['─', '│', '─', '│', '┌', '┐', '┘', '└']
" Window styling
call coc#config("suggest", {
\ "floatConfig": {
\ "border": v:true,
\ "rounded": v:false,
\ "borderhighlight": "FloatBorder"
\ }
\})
call coc#config("diagnostic", {
\ "floatConfig": {
\ "border": v:true,
\ "rounded": v:false,
\ "borderhighlight": "FloatBorder"
\ }
\})
call coc#config("signature", {
\ "floatConfig": {
\ "border": v:true,
\ "rounded": v:false,
\ "borderhighlight": "FloatBorder"
\ }
\})
call coc#config("hover", {
\ "floatConfig": {
\ "border": v:true,
\ "rounded": v:false,
\ "borderhighlight": "FloatBorder"
\ }
\})
" Define NormalFloat highlight for all floating windows
hi NormalFloat ctermbg=235 ctermfg=255 cterm=NONE guibg=#282A36 guifg=#F8F8F2 gui=NONE
hi FloatBorder ctermbg=235 ctermfg=255 cterm=NONE guibg=#282A36 guifg=#F8F8F2 gui=NONE