-
Notifications
You must be signed in to change notification settings - Fork 255
/
config.vim
371 lines (344 loc) · 12.6 KB
/
config.vim
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
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
scriptencoding utf-8
let s:lines=&lines
let s:columns=&columns
function! s:enter_full_screen()
set lines=999 columns=999
set fullscreen
endfunction
function! s:leave_full_screen()
let &lines=s:lines
let &columns=s:columns
set nofullscreen
endfunction
function! s:full_screen_toggle()
if &fullscreen
call s:leave_full_screen()
else
call s:enter_full_screen()
endif
endfunction
augroup SPACEVIM_GUI
autocmd!
autocmd GUIEnter * nnoremap <Leader>wm :call <SID>full_screen_toggle()<CR>
augroup END
" GUI Settings {
if has('gui_running')
" 解决菜单栏乱码
let $LANG = 'zh_CN.UTF-8'
set langmenu=zh_CN
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
highlight Cursor guifg=black guibg=#dfff00
highlight iCursor guifg=black guibg=white
highlight vCursor guifg=black guibg=#df5f00
set guicursor=n-v-c:block-Cursor
" set guicursor+=i:ver100-iCursor
set guicursor+=n-v-c:blinkon0
" set guicursor+=i:blinkwait10
set guicursor=i:ver1
" windows GUI界面乱码设置
if WINDOWS() && has('gui_running')
"处理consle输出乱码
language messages zh_CN.utf-8
" Set extra options when running in GUI mode
set guifont=Consolas:h13
" set guifont=Source\ Code\ Pro\ for\ Powerline
if has('gui_gtk2') "GTK2
set guifont=Monaco\ 12,Monospace\ 12
endif
set guitablabel=%M\ %t
" set showtabline=1
" set guioptions+=e " 这两个设置会使得airline上方的buffer无法显示
set linespace=2
set noimdisable
elseif OSX() && has('gui_running')
" set guifont=Cousine\ for\ Powerline:h13
set guifont=Source\ Code\ Pro\ for\ Powerline:h12
set lines=100 columns=90
endif
endif
" }
augroup SPACEVIM_BASIC
" Restore cursor position when opening file
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ execute "normal! g`\"" |
\ endif
augroup END
" ultisnips {
if isdirectory(expand(g:my_plug_home.'ultisnips'))
" Set ultisnips triggers
let g:UltiSnipsSnippetDirectories=['UltiSnips']
let g:UltiSnipsSnippetsDir = '~/.vim/plugged/vim-snippets/UltiSnips/'
let g:UltiSnipsListSnippets = '<C-Tab>'
let g:UltiSnipsJumpForwardTrigger = '<Tab>'
let g:UltiSnipsJumpBackwardTrigger = '<S-Tab>'
" 解决ultisnips与YCM 的tab键补全冲突
" ultisnips选中后按enter键进行补全
let g:UltiSnipsExpandTrigger = "<nop>"
let g:ulti_expand_or_jump_res = 0
function! ExpandSnippetOrCarriageReturn()
let l:snippet = UltiSnips#ExpandSnippetOrJump()
if g:ulti_expand_or_jump_res > 0
return l:snippet
else
return "\<CR>"
endif
endfunction
inoremap <expr> <CR> pumvisible() ? "<C-R>=ExpandSnippetOrCarriageReturn()<CR>" : "\<CR>"
endif
" }
" vim-startify {
if isdirectory(expand(g:my_plug_home.'vim-startify'))
let g:startify_custom_header = [
\' _',
\' ___ _ __ __ _ ___ ___ __ _(_)_ __ ___',
\' / __| -_ \ / _- |/ __/ _ \____\ \ / / | -_ - _ \ ',
\' \__ \ |_) | (_| | (_| __/_____\ V /| | | | | | |',
\' |___/ .__/ \__._|\___\___| \_/ |_|_| |_| |_|',
\' |_|',
\' [ space-vim ' . g:spacevim_version . ' @' . v:version . ' ]',
\]
augroup SPACEVIM_START
autocmd VimEnter * if !argc() | Startify | endif
augroup END
let g:startify_list_order = [
\ [' Recent Files:'],
\ 'files',
\ [' Project:'],
\ 'dir',
\ [' Sessions:'],
\ 'sessions',
\ [' Bookmarks:'],
\ 'bookmarks',
\ [' Commands:'],
\ 'commands',
\ ]
nnoremap <silent><Leader>bh :Startify<CR>
nnoremap <silent><Leader>fr :Startify<CR>
endif
" }
" vim-easymotion {
" <Leader><Leader>w : word, 在单词间移动,往前
" <Leader><Leader>b : back, 在单词间移动,往后
" <Leader><Leader>s : search, 字符搜索跳转,双向
" <leader><Leader>f : forward, 向前搜索字符
" <Leader><Leader>j
" <Leader><Leader>k
" Jump to line
if isdirectory(expand(g:my_plug_home.'vim-easymotion'))
map <Leader>jl <Plug>(easymotion-bd-jk)
nmap <Leader>jl <Plug>(easymotion-overwin-line)
" Jump to word
map <Leader>jw <Plug>(easymotion-bd-w)
nmap <Leader>jw <Plug>(easymotion-overwin-w)
endif
" }
" nerdtree {
if isdirectory(expand(g:my_plug_home.'nerdtree'))
let g:NERDTreeShowHidden=1 " 显示隐藏文件
let g:NERDTreeAutoDeleteBuffer=1 " 删除文件时自动删除文件对应buffer
let g:NERDTreeIgnore=[
\ '\.py[cd]$', '\~$', '\.swo$', '\.swp$',
\ '^\.git$', '^\.hg$', '^\.svn$', '\.bzr$',
\ ]
map <F4> :NERDTreeToggle<CR>
imap <F4> <ESC>:NERDTreeToggle<CR>
nnoremap <Leader>ft :NERDTreeToggle<CR>
endif
" }
"nerdtree-git-plugin {
if isdirectory(expand(g:my_plug_home.'nerdtree-git-plugin'))
let g:NERDTreeIndicatorMapCustom = {
\ 'Modified' : '✹',
\ 'Staged' : '✚',
\ 'Untracked' : '✭',
\ 'Renamed' : '➜',
\ 'Unmerged' : '═',
\ 'Deleted' : '✖',
\ 'Dirty' : '✗',
\ 'Clean' : '✔︎',
\ 'Unknown' : '?'
\ }
endif
" }
" vim-nerdtree-syntax-highlight {
if isdirectory(expand(g:my_plug_home.'vim-nerdtree-syntax-highlight'))
let g:NERDTreeFileExtensionHighlightFullName = 1
let g:NERDTreeExactMatchHighlightFullName = 1
let g:NERDTreePatternMatchHighlightFullName = 1
let g:NERDTreeLimitedSyntax = 1
" you can add these colors to your .vimrc to help customizing
let s:brown = '905532'
let s:aqua = '3AFFDB'
let s:blue = '689FB6'
let s:darkBlue = '44788E'
let s:purple = '834F79'
let s:lightPurple = '834F79'
let s:red = 'AE403F'
let s:beige = 'F5C06F'
let s:yellow = 'F09F17'
let s:orange = 'D4843E'
let s:darkOrange = 'F16529'
let s:pink = 'CB6F6F'
let s:salmon = 'EE6E73'
let s:green = '8FAA54'
let s:lightGreen = '31B53E'
let s:white = 'FFFFFF'
let s:rspec_red = 'FE405F'
let s:git_orange = 'F54D27'
let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExtensionHighlightColor['css'] = s:blue " sets the color of css files to blue
let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExtensionHighlightColor['org'] = s:pink " sets the color of css files to blue
let g:NERDTreeExactMatchHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExtensionHighlightColor['tex'] = s:rspec_red " sets the color of css files to blue
let g:NERDTreeExactMatchHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExactMatchHighlightColor['.gitignore'] = s:git_orange " sets the color for .gitignore files
let g:NERDTreeExactMatchHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExactMatchHighlightColor['.ipynb'] = s:lightPurple " sets the color for .ipynb files
let g:NERDTreePatternMatchHighlightColor = {} " this line is needed to avoid error
let g:NERDTreePatternMatchHighlightColor['.*_spec\.rb$'] = s:rspec_red " sets the color for files ending with _spec.rb
endif
" }
" vim-ctrlp {
if isdirectory(expand(g:my_plug_home.'ctrlp.vim'))
let g:ctrlp_working_path_mode = 'ra' " search for nearest ancestor like .git, .hg, and the directory of the current file
let g:ctrlp_match_window_bottom = 0 " show the match window at the top of the screen
let g:ctrlp_by_filename = 1
let g:ctrlp_max_height = 10 " maxiumum height of match window
let g:ctrlp_switch_buffer = 'et' " jump to a file if it's open already
let g:ctrlp_use_caching = 1 " enable caching
let g:ctrlp_clear_cache_on_exit=0 " speed up by not removing clearing cache evertime
let g:ctrlp_mruf_max = 250 " number of recently opened files
let g:ctrlp_custom_ignore = {
\ 'dir': '\v[\/]\.(git|hg|svn|build)$',
\ 'file': '\v\.(exe|so|dll)$',
\ 'link': 'SOME_BAD_SYMBOLIC_LINKS',
\ }
let g:ctrlp_match_window_bottom = 0 " show the match window at the top of the screen
let g:ctrlp_by_filename = 1
let g:ctrlp_max_height = 10 " maxiumum height of match window
let g:ctrlp_switch_buffer = 'et' " jump to a file if it's open already
let g:ctrlp_regexp = 1
" 如果ag可用,使用ag替换grep进行搜索
if executable('ag')
" Use Ag over Grep
set grepprg=ag\ --nogroup\ --nocolor
" Use ag in CtrlP for listing files.
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
" Ag is fast enough that CtrlP doesn't need to cache
let g:ctrlp_use_caching = 0
else
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
endif
endif
" }
" delimitMate {
if isdirectory(expand(g:my_plug_home.'delimitMate'))
let g:delimitMate_expand_cr=1
endif
" }
" vim-trailing-whitespace {
if isdirectory(expand(g:my_plug_home.'vim-trailing-whitespace'))
nnoremap <Leader>xd :FixWhitespace<CR>
endif
" }
" The decoration about statusline was stealed from
" https://github.com/junegunn/dotfiles/blob/master/vimrc.
" %< Where to truncate
" %n buffer number
" %F Full path
" %m Modified flag: [+], [-]
" %r Readonly flag: [RO]
" %y Type: [vim]
" fugitive#statusline()
" %= Separator
" %-14.(...)
" %l Line
" %c Column
" %V Virtual column
" %P Percentage
" %#HighlightGroup#
set statusline=%<[%n]\ %F\ %m%r%y\ %{exists('g:loaded_fugitive')?fugitive#statusline():''}\ %=%-14.(%l,%c%V%)\ %P
silent! if emoji#available()
let s:ft_emoji = map({
\ 'c': 'baby_chick',
\ 'clojure': 'lollipop',
\ 'coffee': 'coffee',
\ 'cpp': 'chicken',
\ 'css': 'art',
\ 'eruby': 'ring',
\ 'gitcommit': 'soon',
\ 'haml': 'hammer',
\ 'help': 'angel',
\ 'html': 'herb',
\ 'java': 'older_man',
\ 'javascript': 'monkey',
\ 'make': 'seedling',
\ 'markdown': 'book',
\ 'perl': 'camel',
\ 'python': 'snake',
\ 'ruby': 'gem',
\ 'scala': 'barber',
\ 'sh': 'shell',
\ 'slim': 'dancer',
\ 'text': 'books',
\ 'vim': 'poop',
\ 'vim-plug': 'electric_plug',
\ 'yaml': 'yum',
\ 'yaml.jinja': 'yum'
\ }, 'emoji#for(v:val)')
function! S_filetype()
if empty(&filetype)
return emoji#for('grey_question')
else
return get(s:ft_emoji, &filetype, '['.&filetype.']')
endif
endfunction
function! S_modified()
if &modified
return emoji#for('kiss').' '
elseif !&modifiable
return emoji#for('construction').' '
else
return ''
endif
endfunction
function! S_fugitive()
if !exists('g:loaded_fugitive')
return ''
endif
let head = fugitive#head()
if empty(head)
return ''
else
return head == 'master' ? emoji#for('crown') : emoji#for('dango').'='.head
endif
endfunction
let s:braille = split('"⠉⠒⠤⣀', '\zs')
function! Braille()
let len = len(s:braille)
let [cur, max] = [line('.'), line('$')]
let pos = min([len * (cur - 1) / max([1, max - 1]), len - 1])
return s:braille[pos]
endfunction
hi def link User1 TablineFill
let s:cherry = emoji#for('cherry_blossom')
function! MyStatusLine()
let mod = '%{S_modified()}'
let ro = "%{&readonly ? emoji#for('lock') . ' ' : ''}"
let ft = '%{S_filetype()}'
let fug = ' %{S_fugitive()}'
let sep = ' %= '
let pos = ' %l,%c%V '
let pct = ' %P '
return s:cherry.' [%n] %F %<'.mod.ro.ft.fug.sep.pos.'%{Braille()}%*'.pct.s:cherry
endfunction
" Note that the "%!" expression is evaluated in the context of the
" current window and buffer, while %{} items are evaluated in the
" context of the window that the statusline belongs to.
set statusline=%!MyStatusLine()
endif
" Reload .vimrc
nnoremap <Leader>fR :source $MYVIMRC<CR>