forked from FruitieX/dotfiles
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.vimrc
executable file
·494 lines (404 loc) · 11.2 KB
/
.vimrc
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
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
" FruitieX' .vimrc v0.3
""""""""""""""""""""""""""""""""
" Plugins
""""""""""""""""""""""""""""""""
execute pathogen#infect()
" neocomplete
let g:neocomplete#enable_at_startup = 1
" powerline config
set laststatus=2
set noshowmode
"neocomplcache
let g:neocomplcache_enable_at_startup = 1
" ctrlp config
let g:ctrlp_max_height = 30
let g:ctrlp_clear_cache_on_exit = 0
let g:ctrlp_follow_symlinks = 1
let g:ctrlp_show_hidden = 1
let g:ctrlp_lazy_update = 100
" NERDCommenter needs this
filetype plugin on
" get rid of extra junk
let g:NERDTreeMinimalUI=1
" easymotion config
let g:EasyMotion_leader_key = '<Leader>'
let g:easytags_on_cursorhold = 0
let g:easytags_auto_highlight = 0
let g:ackprg="/usr/bin/vendor_perl/ack -H --nocolor --nogroup --column"
let g:ackhighlight=1
""""""""""""""""""""""""""""""""
" Appearance
""""""""""""""""""""""""""""""""
"colorscheme desert "awesome color scheme
"set t_Co=16
set background=dark
colorscheme base16-default
"hi Comment ctermfg=12
"hi Constant ctermfg=15
"hi Identifier ctermfg=4
"hi Statement ctermfg=2
"hi PreProc ctermfg=6
"hi Type ctermfg=1
"hi Special ctermfg=3
"hi Underlined ctermfg=7
"hi Ignore ctermfg=9
"hi Error ctermfg=11
"hi Todo ctermfg=1
"hi Normal ctermfg=none ctermbg=none
"hi NonText ctermfg=0 ctermbg=none
"hi Directory ctermfg=12
"
"hi VertSplit ctermfg=black
"hi StatusLine ctermfg=green
"hi StatusLineNC ctermfg=0
"
"hi Folded ctermbg=0 ctermfg=8
"
"hi Pmenu ctermfg=10 ctermbg=0
"hi PmenuSel ctermfg=0 ctermbg=14
"hi LineNr ctermfg=0 ctermbg=none
"hi CursorLine ctermfg=none ctermbg=none cterm=none
"hi CursorLineNr ctermfg=none ctermbg=0
"hi CursorColumn ctermfg=none ctermbg=0
" flag problematic whitespace
"match RedundantSpaces /\s\+$\| \+\ze\t/ "\ze sets end of match so only spaces highlighted
autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red
highlight ExtraWhitespace term=standout ctermbg=red guibg=red
match ExtraWhitespace /\s\+$\| \+\ze\t/
"au InsertLeave * match ExtraWhitespace /\s\+$/
"use :set list! to toggle visible whitespace on/off
"set listchars=tab:>-,trail:.,extends:>
" Show line numbers
set number
" Enable syntax highlighting
syntax enable
"set colorcolumn=80 " show column at 80
highlight ColorColumn ctermbg=233 " in a subtle color pls
" Show matching braces
set showmatch
" >= 7 lines under cursor visible
set so=7
" Always show current pos
set ruler
" Prettier line wrap
set nowrap
set showbreak=↪
" Show tabs
set lcs=tab:│\
set list
highlight SpecialKey ctermfg=238
" Disable backup
set nobackup
set nowb
set noswapfile
" Make cursor more visible
"set cursorline
"set cursorcolumn
""""""""""""""""""""""""""""""""
" Key bindings
""""""""""""""""""""""""""""""""
" Avoid escape key
imap jj <Esc>
" Bind ; to <C-]> (jump to definition), it's faster and C-] doesn't work oven PuTTY
"map ; <C-]>
map <C-p> :CtrlPMixed<cr>
" Avoid :w, :q
map <C-s> :w<Enter>
map <C-q> :q<Enter>
" function keys
set pastetoggle=<F2>
nnoremap <F3> :NERDTreeToggle<cr>
nnoremap <F4> :UndotreeToggle<cr>
"nmap <silent> <F5> :checktime<Enter>
" buffers
map <silent><F5> :bprev<CR>
map <silent><F6> :bnext<CR>
" reindent entire file
map <F7> mzgg=G`z<CR>
" toggle tagbar
nmap <silent><F8> :TagbarToggle<CR>
" allow moving around in insert mode TODO: this does not work
inoremap <A-h> <C-o>h
inoremap <A-j> <C-o>j
inoremap <A-k> <C-o>k
inoremap <A-l> <C-o>l
noremap <C-e> <C-d>
" half page up/down with <C-j>, <C-k>
"noremap <C-j> <C-d>
"noremap <C-k> <C-u>
" free these
"noremap <C-d> <Nop>
"noremap <C-u> <Nop>
" vim hard mode :-)
" ok fine but DON'T USE THESE!
"map <Left> <Nop>
"map <Right> <Nop>
"map <Up> <Nop>
"map <Down> <Nop>
"map <PageUp> <Nop>
"map <PageDown> <Nop>
" Treat long lines as break lines (useful when moving around in them)
"map j gj
"map k gk
" TODO: this breaks vimpager :(
"C-\ - Open function defintion in a new tab
map <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
"A-] - Open function defintion in a vertical split
map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>
" leader keys
let mapleader=","
" split related binds
nmap <C-w><C-j> 5<C-w>+
nmap <C-w><C-k> 5<C-w>-
nmap <C-w><C-l> 5<C-w>>
nmap <C-w><C-h> 5<C-w><
" move tab left/right
nmap <silent> <Leader>H :call MoveToPrevTab()<Enter>
nmap <silent> <Leader>L :call MoveToNextTab()<Enter>
"nmap <silent> <Leader><Leader>t :tabnew<Enter>
map <leader><leader>tn :tabnew<cr>
map <leader><leader>to :tabonly<cr>
map <leader><leader>tc :tabclose<cr>
map <leader><leader>tm :tabmove
" Opens a new tab with the current buffer's path
" Super useful when editing files in the same directory
map <leader><leader>te :tabedit <c-r>=expand("%:p:h")<cr>/
" Switch CWD to the directory of the open buffer
map <leader>cd :cd %:p:h<cr>:pwd<cr>
" disable current search highlight
nnoremap <silent> <Leader>/ :nohlsearch<CR>
" remove trailing whitespace
nnoremap <Leader>rtw :%s/\s\+$//e<CR>
" diff
nnoremap <silent> <Leader>df :call DiffToggle()<CR>
" open NERDTree
nmap <silent> <Leader><Leader>T :NERDTreeToggle<Enter>
" make
map <leader>m :make<CR>
" quick grepping
nnoremap <silent>gr :Ack<CR>
function! GREP( arg )
execute "Ack /" . expand( a:arg )
cwindow
endfunction
command! -nargs=* GREP call GREP( '<args>' )
" line complete
inoremap <C-l> <C-x><C-l>
" increment/decrement
"nnoremap <C-i> <C-a>
"nnoremap <C-d> <C-x>
" easier moving of code blocks
vnoremap < <gv " better indentation
vnoremap > >gv " better indentation
" omni complete for html tags
inoremap <C-_> </<C-x><C-o>
map <C-_> a<C-_><ESC>
" move in quickfix window
nnoremap <silent> <Leader><Leader>n :cn<Enter>
nnoremap <silent> <Leader><Leader>N :cp<Enter>
nnoremap <silent> <Leader><Leader>c :cc<Enter>
" move lines up/down
nmap <leader><C-j> mz:m+<cr>`z
nmap <leader><C-k> mz:m-2<cr>`z
vmap <leader><C-j> :m'>+<cr>`<my`>mzgv`yo`z
vmap <leader><C-k> :m'<-2<cr>`>my`<mzgv`yo`z
function! CmdLine(str)
exe "menu Foo.Bar :" . a:str
emenu Foo.Bar
unmenu Foo
endfunction
function! VisualSelection(direction) range
let l:saved_reg = @"
execute "normal! vgvy"
let l:pattern = escape(@", '\\/.*$^~[]')
let l:pattern = substitute(l:pattern, "\n$", "", "")
if a:direction == 'b'
execute "normal ?" . l:pattern . "^M"
elseif a:direction == 'gv'
call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.')
elseif a:direction == 'replace'
call CmdLine("%s" . '/'. l:pattern . '/')
elseif a:direction == 'f'
execute "normal /" . l:pattern . "^M"
endif
let @/ = l:pattern
let @" = l:saved_reg
endfunction
" When you press <leader>r you can search and replace the selected text
vnoremap <silent> <leader>r :call VisualSelection('replace')<CR>
""""""""""""""""""""""""""""""""
" Behaviour
""""""""""""""""""""""""""""""""
" Don't move the cursor after pasting
" (by jumping to back start of previously changed text)
noremap p p`[
noremap P P`[
" Use utf8
set encoding=utf8
" Reload a file if it changes
set autoread
autocmd BufEnter * silent! checktime
" Keep 500 lines of command line history
set history=500
" Write persistent undo files
set undofile
set undodir=$HOME/.vim/undo
set undolevels=1000
set undoreload=1000
" Allow switching buffers without writing to disk
set hidden
" Configure backspace so it acts as it should act
set backspace=eol,start,indent
set whichwrap+=<,>,h,l
" Smart case-sensitive search
set ignorecase
set smartcase
" Highlight search strings
set hlsearch
" Search as you type
set incsearch
" Don't redraw while executing macros
set lazyredraw
" Disable visual bell (removes delay also)
set visualbell t_vb=
set switchbuf=split
" Better tab completion
set wildmode=longest,list,full
set wildmenu
" Ignore these files when completing names and in Explorer
set wildignore+=.svn,CVS,.git,*.o,*.a,*.class,*.mo,*.la,*.so,*.obj,*.swp,*.jpg,*.png,*.xpm,*.gif,*.pyc,~/music*,*~,*.swp
" Indentation
" Expand tabs to spaces
set expandtab
" indent with 4 spaces when tab key is hit
set softtabstop=4
" indent with 4 spaces when the indent commands are used
set shiftwidth=4
" tab character is represented by 4 spaces
set tabstop=4
"set smarttab
filetype plugin indent on
" Default to autoindenting of C like languages
set autoindent
set smartindent
" syntastic stuff
let g:syntastic_cpp_checkers=['gcc']
let g:syntastic_c_checkers=['gcc']
" Show relative numbers in command mode, absolute in insert mode
set relativenumber
autocmd InsertEnter * :set norelativenumber
autocmd InsertLeave * :set relativenumber
" Restore cursor position
function! ResCur()
if line("'\"") <= line("$")
normal! g`"
return 1
endif
endfunction
augroup resCur
autocmd!
autocmd BufWinEnter * call ResCur()
augroup END
" Remember info about open buffers on close
set viminfo^=%
" more tabs
set tabpagemax=15
" show typed commands in lower right corner
set showcmd
function! MoveToPrevTab()
"there is only one window
if tabpagenr('$') == 1 && winnr('$') == 1
return
endif
"preparing new window
let l:tab_nr = tabpagenr('$')
let l:cur_buf = bufnr('%')
if tabpagenr() != 1
close!
if l:tab_nr == tabpagenr('$')
tabprev
endif
sp
else
close!
exe "0tabnew"
endif
"opening current buffer in new window
exe "b".l:cur_buf
endfunc
function! MoveToNextTab()
"there is only one window
if tabpagenr('$') == 1 && winnr('$') == 1
return
endif
"preparing new window
let l:tab_nr = tabpagenr('$')
let l:cur_buf = bufnr('%')
if tabpagenr() < tab_nr
close!
if l:tab_nr == tabpagenr('$')
tabnext
endif
sp
else
close!
tabnew
endif
"opening current buffer in new window
exe "b".l:cur_buf
endfunc
function! DiffToggle()
if &diff
diffoff
else
diffthis
endif
:endfunction
" fix my broken themes
" matched parens fix
hi MatchParen cterm=bold ctermbg=8 ctermfg=15
" darker comments, they look nice and get ouf ot the way
hi Comment ctermfg=8
" don't have ridiculous colors on the menus
hi Pmenu ctermbg=18 ctermfg=2
" transparent background always
hi Normal ctermbg=none
" prettify searches
hi Search ctermfg=1 ctermbg=19
hi IncSearch ctermbg=9 ctermfg=18
" highlight cursor line number
hi CursorLineNr ctermbg=none ctermfg=7
" darken other line numbers
hi LineNr ctermbg=none ctermfg=8
" TODOs with red
hi Todo ctermbg=9
" wtf were they thinking
hi Visual ctermbg=0 term=none cterm=none
hi CursorLine ctermbg=0
" fix ugly splits
hi VertSplit ctermbg=none ctermfg=8
" i like yellow color on types more
hi Type ctermfg=3
" why does gitgutter have a green background by default
hi GitGutterAdd ctermbg=none
hi GitGutterChange ctermbg=none
hi GitGutterDelete ctermbg=none
hi GitGutterChangeDelete ctermbg=none
hi GitGutterAddLine ctermbg=none
hi GitGutterChangeLine ctermbg=none
hi GitGutterChangeDeleteLine ctermbg=none
hi GitGutterChangeLine ctermbg=none
hi SignColumn ctermbg=none
let g:airline_theme="fruit"
let g:airline_left_sep=""
let g:airline_right_sep=""
let g:airline#extensions#tabline#enabled = 1
" MiniBufExplorer theme
hi MBEChanged ctermfg=9
hi MBEVisibleNormal ctermfg=20
hi MBEVisibleActiveNormal ctermfg=15
hi MBEVisibleActiveChanged ctermfg=11
hi MBEVisibleChanged ctermfg=9
" No extra space in numbers column
set numberwidth=1
set clipboard=unnamed