1
2 Author:peter@peterodding.com
3 Last Change:
4 URL:http://peterodding.com/code/vim/profile/vimrc
5
6
7 syntax on
8
9
10 filetype plugin indent on
11
12
13
14 set autoread
15 set completeopt=menu
16 set display=lastline showbreak=>>>\
17 set ignorecase smartcase infercase
18 set incsearch
19 set linebreak nojoinspaces
20 set modeline
21 set path=.,~/.vim/** suffixesadd=.vim
22 set ruler
23 set tabpagemax=25
24 set tabstop=2 shiftwidth=2
25 set tags=./.tags;
26
27
28 http://groups.google.com/group/vim_dev/browse_thread/thread/dc24d36b9eee0b35
29 set autochdir
30
31
32
33
34
35 set breakat=\
36
37
38
39 set complete+=kspell
40
41 "easytags.vim"
42
43 set complete-=t
44
45
46 http://groups.google.com/group/vim_dev/browse_frm/thread/2091f334b792c10a/
47 set confirm
48
49
50
51 set expandtab
52
53
54
55 set foldmethod=marker foldopen=all,insert foldclose=all
56
57
58 set history=5000 viminfo='250,<0,r/tmp
59
60
61 set hlsearch
62
63
64 :mksession
65
66 set ssop-=buffers
67
68
69 set wildmenu wildmode=list:full
70
71
72 set wildignore+=*.aux,*.out,*.toc
73 set wildignore+=*.jpg,*.bmp,*.gif
74 set wildignore+=*.luac
75 set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest
76 set wildignore+=*.pyc
77 set wildignore+=*.spl
78 set wildignore+=*.sw?
79
80 if has('gui_running')
81
82
83
84 if has('unix')
85 set spell spelllang=en,nl spellcapcheck=
86 endif
87 set mousemodel=popup_setpos nomousehide
88 set go-=m go-=T go-=r go-=L
89 if has('gui_gtk2')
90 let &gfn = string#trim(system('gconftool --get /desktop/gnome/interface/monospace_font_name'))
91 elseif has('gui_win32')
92 set gfn=Consolas:h13
93 endif
94 colorscheme wombat
95 runtime mswin.vim
96 elseif $TERM =~ 'xterm\|screen'
97
98 set t_Co=256
99
100 set mouse=a
101
102 set title
103 colorscheme xoria256
104
105
106 https://bugs.launchpad.net/ubuntu/+source/vim/+bug/491615
107 imap <Esc>[A <Up>
108 :Fullscreen
109 http://peterodding.com/code/vim/shell/
110 nmap <Esc>[23~ <F11>
111 endif
112
113
114
115
116 let c_syntax_for_h = 1 :help
117 let is_bash = 1 :help
118 let java_allow_cpp_keywords = 1 :help
119 let netrw_hide = 1 :help
120 let netrw_list_hide = '^\(\..\{-}\.sw.\|.\{-}\.pyc\)$'
121 let python_highlight_all = 1 :help
122 let tex_flavor = 'latex' :help
123 let tex_fold_enabled = 1 :help
124 let vimsyn_noerror = 1 :help
125
126 http://www.vim.org/
127 let php_highlight_quotes = 1 http://www.vim.org/scripts/script.php?script_id=1571
128
129 http://peterodding.com/code/vim/
130 let colorschemeswitch_filter = '^\(default\|delek\|peachpuff\|ron\|zellner\|elflord\|blue\|koehler\|dual\|railscasts\)$'
131 let notes_location = '/home/peter/Documenten/Notities/%s'
132 let balloon_syntax = 0
133 let shell_fullscreen_items = 'mT' http://peterodding.com/code/vim/shell/#shell_fullscreen_items_option
134 let easytags_resolve_links = 1 http://peterodding.com/code/vim/easytags/#easytags_resolve_links_option
135
136
137
138 autocmd FileType c setlocal cms=/*%s*/
139 autocmd FileType gitcommit setlocal autoindent
140 autocmd FileType sh setlocal isfname-==
141 autocmd FileType sh,php setlocal textwidth=0
142 autocmd BufReadPost */etc/* setlocal textwidth=0
143 autocmd BufReadPost */var/log/* setlocal ft=messages
144 autocmd FileType messages setlocal nowrap nomodifiable nospell
145 autocmd SwapExists * let v:swapchoice = 'e'
146 autocmd BufReadPost ~/.vim-plugin-tool.conf setl ft=dosini nospell
147
148
149 autocmd BufWritePre */spell/*.add %sort i
150 autocmd BufWritePost */spell/*.add silent mkspell! %
151
152
153 autocmd FileType python set complete+=k~/.vim/dict/python
154 autocmd FileType php set complete+=k~/.vim/dict/php
155 autocmd FileType lua set complete+=k~/.vim/dict/lua
156
157
158 autocmd FileType python set omnifunc=pythoncomplete#Complete
159
160
161 autocmd FileType python set commentstring=#%s
162
163
164 TODO
165 autocmd BufEnter */.gnome2/rhythmbox/rhythmdb.xml syntax off
166 autocmd BufLeave */.gnome2/rhythmbox/rhythmdb.xml syntax on
167
168
169 autocmd FileType c,css,html,lua,vim setlocal tabstop=2 shiftwidth=2
170
171
172 autocmd FileType vim setlocal iskeyword+=#
173
174
175 TODO$VIMRUNTIME
176 autocmd FileType help setlocal iskeyword+=-
177
178
179 autocmd FileType cs setl fdm=marker fmr=#region,#endregion
180
181
182 autocmd FileType css setlocal iskeyword+=#
183
184
185 autocmd FileType tags setlocal readonly
186
187
188 autocmd FileType help,qf,tags,html,strace setlocal nowrap nofoldenable nospell
189
190
191 autocmd FileType qf,help let [b:balloon_syntax, b:balloon_tags] = [0, 0]
192
193
194 autocmd FileType qf execute 'resize' min([&lines / 2, line('$')])
195
196
197 autocmd ColorScheme * highlight NonText guibg=bg
198
199 "Ignore"
200 autocmd ColorScheme * highlight Ignore guifg=bg
201
202
203
204 if has('unix')
205 autocmd BufWritePost ~/bin/* call s:MarkExecutable()
206 function s:MarkExecutable()
207 let pathname = expand('%:p')
208 let listing = system('ls -l ' . shellescape(expand('%:p')))
209 if split(listing)[0] != '-rwxr-xr-x'
210 silent !chmod u=rwx,go=rx "%:p"
211 if v:shell_error
212 echoerr 'Failed to make ' . expand('%:p:~') . ' executable!'
213 else
214 let ft_save = &ft
215 silent edit
216 let &ft = ft_save
217 endif
218 endif
219 endfunction
220 endif
221
222
223
224 autocmd WinEnter * if &diff | call s:DiffTweaks() | endif
225
226 function s:DiffTweaks()
227
228 let diff_colors = 'default'
229 if g:colors_name != diff_colors
230 execute 'colorscheme' fnameescape(diff_colors)
231 endif
232
233 setlocal nofoldenable
234 endfunction
235
236
237
238
239 http://github.com/xolox/vim-easytags/commit/92cd87df83b24e1c45b946bc9eadbe4482de12ba
240
241 autocmd BufReadPost,BufWritePost * call s:LoadTagsFile()
242
243 function s:LoadTagsFile()
244 if &ft == 'c' || &ft == 'cpp'
245 if search('\c\<lua_\w', 'nw') >= 1
246 setl tags+=~/.vim/tags/lua-c-api
247 endif
248 if search('^#include "vim.h"$', 'nw') >= 1
249 setl tags+=~/.vim/tags/vim-src
250 endif
251 if search('\c\<apr_\w', 'nw') >= 1
252 setl tags+=~/.vim/tags/apr-c-api
253 endif
254 if search('\c\<Py[\u_]', 'nw') >= 1
255 setl tags+=~/.vim/tags/python-c-api
256 endif
257 endif
258 endfunction
259
260
261
262 augroup filetypedetect
263 au BufNewFile,BufRead * if getline(1) =~ '^!_TAG_' | setf tags | endif
264 au BufNewFile,BufRead *.desktop.* setf desktop
265 au BufNewFile,BufRead *.json setf javascript
266 au BufNewFile,BufRead *.list setf desktop
267 au BufNewFile,BufRead *.md set ft=mkd "ft=modula2"
268 au BufNewFile,BufRead *.pls setf dosini
269 au BufNewFile,BufRead *.vb set filetype=vb "ft=conf"
270 au BufNewFile,BufRead */etc/apache{,2}/*.conf setf apache
271 au BufNewFile,BufRead */etc/environment setf sh
272 au BufNewFile,BufRead */etc/mysql/*.cnf setf dosini
273 au BufNewFile,BufRead */nginx/* setf nginx
274 au BufNewFile,BufRead */sites-{available,enabled}/* setf apache
275 au BufNewFile,BufRead ~/.ctags setf sh
276 au StdinReadPost,BufRead * if getline(1) =~ 'sending incremental file list' | setf rsync | endif
277 augroup END
278
279
280
281 http://www.noah.org/engineering/dotfiles/.vimrc
282 "xpdf-utils""antiword"
283
284
285 autocmd BufReadPre *.pdf,*.doc setlocal readonly
286 autocmd BufReadPost *.pdf silent %!pdftotext -nopgbrk "%" - | fmt -csw78
287 autocmd BufReadPost *.doc call s:WordFilter()
288
289 function s:WordFilter()
290 setlocal noreadonly modifiable
291 silent %!antiword -i 1 -s -f "%" -
292 silent %s/^\s\+\.\s\+/ • /
293 setlocal readonly nomodifiable
294 setlocal filetype=antiword
295 endfunction
296
297 :help
298
299 autocmd BufEnter * call s:CloseEmptyBuffer()
300
301 function s:CloseEmptyBuffer()
302 if winnr('$') == 2 && &bt == 'help'
303 let bufnr = tabpagebuflist()[1]
304 let modified = getwinvar(2, '&modified')
305 if bufname(bufnr) == '' && !modified
306 only
307 endif
308 endif
309 endfunction
310
311 &tabstop
312
313 autocmd FileType tags call s:UpdateTabStop()
314
315 function s:UpdateTabStop()
316 let width = 0
317 for values in map(getline(1, '$'), 'split(v:val, "\t")')
318 let width = max([width, strlen(get(values, 0, ''))])
319 endfor
320 let &l:tabstop = width + 1
321 endfunction
322
323
324
325 autocmd BufReadPost * call s:RestoreCursorPosition()
326
327 function s:RestoreCursorPosition()
328 let lnum = line('''"')
329 if lnum > 0 && lnum <= line("$")
330 normal `"
331 normal zz
332 endif
333 endfunction
334
335 "Last Change:"
336
337 autocmd BufWritePre * call s:UpdateLastChangeDate()
338
339 function s:UpdateLastChangeDate()
340 let pattern = '\<Last Change:\s\zs.*'
341 let lnum = match(getline(1, 10), pattern)
342 if lnum >= 0
343 let existing = getline(lnum+1)
344 let substitute = substitute(strftime('%B %e, %Y'), '\s\{2,}', ' ', 'g')
345 let updated = substitute(existing, pattern, substitute, '')
346 if updated !=# existing
347 undojoin
348 keepjumps call setline(lnum+1, updated)
349 endif
350 endif
351 endfunction
352
353 strftime()
354 s:UpdateLastChangeDate
355 language C
356
357
358
359 command CopyFileName let @+ = expand('%:p') | echo "Copied" @+ "to clipboard"
360
361
362
363 command -nargs=1 -complete=file RenameFile call s:RenameCmd(<q-args>)
364
365 function s:RenameCmd(newfname)
366 let oldfname = expand('%:p')
367 let newfname = expand(a:newfname)
368 if filereadable(oldfname) && rename(oldfname, newfname)
369 call xolox#warning("Failed to rename file from `%s' to `%s'!", oldfname, newfname)
370 return
371 endif
372 execute 'saveas!' fnameescape(newfname)
373 endfunction
374
375
376
377 command DeleteFile call s:DeleteCmd()
378
379 function s:DeleteCmd()
380 let fname = expand('%:p')
381 if filereadable(fname) && delete(fname)
382 call xolox#warning("Failed to delete file `%s'!", fname)
383 return
384 endif
385 bdelete!
386 endfunction
387
388
389
390 F3:
391
392 imap <silent> <F3> <C-O>:call <Sid>ToggleFolding()<CR>
393 nmap <silent> <F3> :call <Sid>ToggleFolding()<CR>
394
395 function s:ToggleFolding()
396
397 let position = getpos('.')
398
399 let winline = winline()
400
401 setlocal invfoldenable
402
403 let firstline = line('.')
404 for i in range(winline - 1)
405 let i = foldclosed(firstline)
406 let firstline = (i != -1 ? i : firstline) - 1
407 endfor
408 execute 'normal' firstline . 'zt'
409
410 call setpos('.', position)
411 endfunction
412
413 F5::make
414
415 Bug fix:
416
417 imap <silent> <F5> <C-O>:call <Sid>Reload()<CR>
418 nmap <silent> <F5> :call <Sid>Reload()<CR>
419
420 function s:Reload()
421 if expand('%') =~ '^sftp://'
422
423 silent edit
424 else
425
426 echo "Running make .. "
427 silent cd %:h
428 silent! make!
429 if v:shell_error == 0
430 echo ""
431 redraw
432 else
433 echohl warningmsg
434 echomsg "Failed to execute :make .."
435 echohl none
436 redraw
437 endif
438 silent cd -
439 endif
440 endfunction
441
442
443
444 noremap <c-]> g<c-]>
445
446 "gf"
447
448 nmap gf :call <Sid>GotoFile()<CR>
449
450 function s:GotoFile()
451 let fname = expand('<cfile>')
452 if fname !~ '^\w\+://'
453 &includeexpr
454 if &includeexpr =~ '\<v:fname\>'
455 let substitute = xolox#escape#substitute(string(fname))
456 let result = eval(substitute(&inex, '\<v:fname\>', substitute, 'g'))
457 let fname = type(result) == type('') && result != '' ? result : fname
458 endif
459 &path
460 let path_elements = xolox#option#split(&path)
461 if index(path_elements, '.') == -1
462 call insert(path_elements, '.')
463 endif
464 let path = xolox#option#join(path_elements)
465 let names = xolox#unique(split(globpath(path, fname), '\n'))
466 if len(names) == 1
467 let fname = names[0]
468 elseif len(names) > 1
469 call map(names, 'fnamemodify(v:val, ":~:.")')
470 let index = inputlist(sort(names))
471 if index >= 0 && index < len(names)
472 let fname = names[index]
473 endif
474 endif
475 endif
476 call s:OpenInTabPage(fname)
477 endfunction
478
479 function s:OpenInTabPage(fname)
480 if bufexists(a:fname)
481 try
482 let swb_save = &switchbuf
483 set switchbuf=useopen,usetab,split
484 execute 'sbuffer' fnameescape(fnamemodify(a:fname, ':p'))
485 finally
486 let &switchbuf = swb_save
487 endtry
488 else
489
490 silent execute 'tabnew' fnameescape(a:fname)
491 endif
492 endfunction
493
494
495
496 imap *** <C-o>:call <Sid>AlignedDelimiter()<CR>
497
498 function! <Sid>AlignedDelimiter()
499 let delimiter = '* * *'
500 let textwidth = &textwidth
501 if textwidth == 0
502 let textwidth = 80
503 endif
504 let indent = (textwidth - len(delimiter)) / 2 - 1
505 call setline('.', repeat(' ', indent) . delimiter)
506 normal o
507 normal o
508 endfunction
509
510
511
512 imap ... …
513
514
515
516
517
518 inoremap <expr> <Up> pumvisible() ? "\<C-P>" : "\<C-O>gk"
519 nnoremap <expr> <Up> pumvisible() ? "\<C-P>" : "gk"
520 inoremap <expr> <Down> pumvisible() ? "\<C-N>" : "\<C-O>gj"
521 nnoremap <expr> <Down> pumvisible() ? "\<C-N>" : "gj"
522
523 Control-Up:
524
525 imap <C-Up> <C-O><C-E>
526 nmap <C-Up> <C-E>
527
528 Control-Down:
529
530 inoremap <C-Down> <C-O><C-Y>
531 nnoremap <C-Down> <C-Y>
532
533
534
535 FIXME
536
537
538 inoremap <A-Left> <C-o><C-o>
539 nnoremap <A-Left> <C-o>
540 inoremap <A-Right> <C-o><C-i>
541 nnoremap <A-Right> <C-i>
542
543 Tab:
544
545 xmap <Tab> >0gv
546 smap <Tab> <C-O>V<C-O><Tab>
547
548 Shift-Tab:
549
550 xmap <S-Tab> <0gv
551 smap <S-Tab> <C-O>V<C-O><S-Tab>
552
553 Tab:
554
555 inoremap <expr> <Tab> <Sid>TabComplete()
556 inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
557 inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
558 inoremap <expr> <Esc> pumvisible() ? "\<C-e>" : "\<Esc>"
559
560 function s:TabComplete()
561 if pumvisible()
562
563 return "\<C-n>"
564 elseif search('\k\%#', 'bcn', line('.')) && getline('.') !~ '\S\t\+\S'
565
566
567 return "\<C-n>"
568 else
569
570 return "\<Tab>"
571 endif
572 endfunction
573
574 Control-Shift-PageUp:
575
576 imap <C-S-PageUp> <C-O>:TabMoveLeft<CR>
577 nmap <C-S-PageUp> :TabMoveLeft<CR>
578
579 command -bar TML call s:TabMoveLeft()
580 command -bar TabMoveLeft call s:TabMoveLeft()
581
582 function s:TabMoveLeft()
583 let n = tabpagenr()
584 execute 'tabmove' (n == 1 ? '' : n - 2)
585
586 let &showtabline = &showtabline
587 endfunction
588
589 Control-Shift-PageDown:
590
591 imap <C-S-PageDown> <C-O>:TabMoveRight<CR>
592 nmap <C-S-PageDown> :TabMoveRight<CR>
593
594 command -bar TMR call s:TabMoveRight()
595 command -bar TabMoveRight call s:TabMoveRight()
596
597 function s:TabMoveRight()
598 let n = tabpagenr()
599 execute 'tabmove' (n == tabpagenr('$') ? 0 : n)
600
601 let &showtabline = &showtabline
602 endfunction
603
604
605
606
607 iabbrev aub a.u.b.
608 iabbrev svp s.v.p.
609
610
611 &infercase
612
613 function s:DefCapAbbr(abbr, exp)
614 execute 'iabbrev' a:abbr a:exp
615 execute 'iabbrev' s:UcFirst(a:abbr) s:UcFirst(a:exp)
616 endfunction
617
618 function s:UcFirst(s)
619 return substitute(a:s, '^\l', '\u\0', '')
620 endfunction
621
622 call s:DefCapAbbr('bv', 'bijvoorbeeld')
623 call s:DefCapAbbr('dmv', 'door middel van')
624 call s:DefCapAbbr('dwz', 'dat wil zeggen')
625 call s:DefCapAbbr('icm', 'in combinatie met')
626 call s:DefCapAbbr('idd', 'inderdaad')
627 call s:DefCapAbbr('iig', 'in ieder geval')
628 call s:DefCapAbbr('iii', 'in eerste instantie')
629 call s:DefCapAbbr('ipd', 'in plaats daarvan')
630 call s:DefCapAbbr('ipv', 'in plaats van')
631 call s:DefCapAbbr('mbv', 'met behulp van')
632 call s:DefCapAbbr('oa', 'onder andere')
633 call s:DefCapAbbr('tov', 'ten opzichte van')
634 call s:DefCapAbbr('ws', 'waarschijnlijk')
635 call s:DefCapAbbr('zsm', 'zo snel mogelijk')
636
637
638
639 "gvim --remote-expr ..."
640 &guifont
641
642 function SetFont(s)
643 let &gfn = a:s
644 redraw
645 endfunction