add Plugin 'unblevable/quick-scope'
[dotvim.git] / vimrc
1 "set vim config dir
2 let b:vim_conf_dir = $HOME.'/.vim'
3 if has("win32")
4     let b:vim_conf_dir = $HOME.'\vimfiles'
5 endif
6 set nocompatible
7
8 if isdirectory( b:vim_conf_dir . '/tmp/') == 0
9     call mkdir(b:vim_conf_dir.'/tmp/', 'p', 0700)
10 endif
11
12
13 "load plugins
14 if filereadable(b:vim_conf_dir . '/plugins.vundel.vim')
15     exec 'source ' . b:vim_conf_dir . '/plugins.vundel.vim'
16 endif
17 "
18 " auskommentiert, macht in screen das nix gut aussieht..
19 "set termguicolors
20 set background=dark
21 try
22     let g:gruvbox_contrast_dark = 'hard'
23     let g:gruvbox_italicize_comments = 0
24     colorscheme gruvbox
25 catch /^Vim\%((\a\+)\)\=:E185/
26     "  wird evtl rest instlliert... E185 heißt nicht gefunden..
27 endtry
28
29
30 set backspace=indent,eol,start
31 set relativenumber
32 set number
33 set lazyredraw
34
35 set expandtab
36 set tabstop=4
37 set softtabstop=4
38 set shiftwidth=4
39
40 set pastetoggle=<F3>
41
42 set encoding=utf-8
43 set modeline
44
45 set history=50
46 set noerrorbells
47 set visualbell t_vb=
48 set hidden
49 set nojoinspaces
50 set nrformats=
51 set ttymouse=xterm2
52 set mouse=a
53
54 " Tab-completion in command-line mode
55 set path+=**
56 set wildmode=full
57 set wildmenu
58 set wildignore=*.pdf,*.fo,
59 set title
60
61 " Appearance
62 set ruler
63 set showmode
64 set showcmd
65 set laststatus=2
66 set hlsearch
67 set incsearch
68 set ignorecase
69 set smartcase
70
71 " remove =, thus 'gf' works whit filepath asignemens like myvar=/path/tofile
72 set isfname-==
73
74 let perl_include_pod = 1
75 augroup PerlSettings
76     autocmd!
77     autocmd FileType perl setlocal complete-=i
78 augroup END
79
80 let mapleader = ","
81
82 nnoremap <F8> ]s
83 nnoremap <S-F8> [s
84 nnoremap Z Y
85
86 nnoremap <leader>- i• 
87 inoremap <leader>- • 
88
89 " Window switching
90 nnoremap <C-k> <C-W>k
91 nnoremap <C-j> <C-W>j
92 nnoremap <C-h> <C-W>h
93 nnoremap <C-l> <C-W>l
94
95 nnoremap <Leader>i a'" <<  << "' <Esc>6hi
96 nnoremap <Leader>a a'{}' <Esc>2hi
97 nnoremap <Leader>A a'"+  +"' <Esc>4hi
98 autocmd FileType cpp nnoremap <Leader>a a'"<<  <<"' <Esc>5hi
99
100 " see :h restore-position
101 nnoremap <Leader>= msgg=G`s
102
103 inoremap kj <Esc>
104 inoremap jk <Esc>
105 inoremap ts<tab> // TODOts: <Esc>=$A
106 inoremap obs<tab> //TODOObsolete: kann nach der Abspaltung von XXXX entfernt werden<Esc>=$0fXviw
107
108 inoremap no<tab> <Esc>0i <nodoc /><Esc>0i///<Esc>=$
109 inoremap td<tab> <Esc>0i//TODOts: doku<CR><summary> </summary><Esc>0i/// <Esc>kVj=$
110
111 autocmd InsertEnter * set timeoutlen=500
112 autocmd InsertLeave * set timeoutlen=1000
113
114 inoremap in<tab> <Esc>0i<inheritdoc /><Esc>0i///<Esc>V=
115
116 " do not use ex mode
117 map Q <Nop>
118
119 nnoremap <C-p> :bprev<CR>
120 nnoremap <C-n> :bnext<CR>
121
122 nnoremap <leader>e :tabedit $MYVIMRC<CR>
123
124 nnoremap  ZZ :wqall<CR>
125 nnoremap  <F6> :wa<CR>:make -j 8<CR><CR>
126 inoremap  <F6> <esc>:wa<CR>:make -j 8<CR><CR>
127
128 nnoremap  <F5> :wa\|!./%<CR>
129 inoremap  <F5> <esc>:wa\|!./%<CR>
130
131 nnoremap <C-l> <C-W>l
132
133 " Copy paste to/from system clipboard
134 vnoremap <leader>c "*y
135 noremap  <leader>v "*p
136 inoremap <leader>v <esc>"*p
137 vnoremap <leader>v "*p
138
139 "nnoremap <Leader>= mzgg=G`z<CR>
140 nnoremap <F2> :call FormatDocument()<CR>
141 " write using sudo.
142 cmap w!! w !sudo tee > /dev/null %
143 "
144 "move visually selected
145
146 vnoremap <M-j> :m '>+1<CR>gv=gv
147 vnoremap <M-k> :m '<-2<CR>gv=gv
148 nnoremap <M-k> :m -2<CR>==
149 nnoremap <M-j> :m +1<CR>==
150
151 " repeat last command on all selected:
152 vnoremap . :normal.<CR>
153
154 vnoremap <leader>tt :Tabular /^[^-+=]*\zs\S*=/l1l1<cr>
155 vnoremap <leader>t, :Tabular /,\zs/l1l1<cr>
156 vnoremap <leader>t<space>  :Tabular /\s\+\zs/l1l0<cr>
157 vnoremap <leader>t:        :Tabular /:\zs/l1l0<cr>
158 vnoremap <leader>t(  :Tabular /(/l1l0<cr>
159 "
160 " append word under cursor with 'or' to current search pattern
161 nnoremap <Leader>s yiw/<C-R>/\\|<C-R>"<cr>
162 " append selection with 'or' to current search pattern
163 vnoremap <Leader>s y/<C-R>/\\|<C-R>"<cr>
164
165 cmap w!! w !sudo tee % >/dev/null
166 nnoremap <Leader>mh :wa<CR>:silent !mhsend -run reload code<CR>:redraw!<CR>
167 nnoremap <Leader>ll iprint_log("");<Esc>V=0f(la
168
169 if has('win32')
170     nnoremap <Leader>r :source ~/vimfiles/vimrc<CR>
171 else
172     nnoremap <Leader>r :source ~/.vim/vimrc<CR>
173 endif
174
175 filetype plugin indent on
176 syntax enable
177 set autoindent
178
179 " ack seems to have vanished from artfull, thus use silversearchger-ag
180 " for ack.vim:
181 if executable('ag')
182     let g:ackprg = 'ag --vimgrep'
183 endif
184
185 set list listchars=tab:→\ ,trail:·
186
187 hi Visual  guifg=White guibg=Blue gui=bold
188
189 set diffopt+=vertical
190 "set diffopt+=iwhite
191 set diffopt+=algorithm:patience
192 "jump to next diff and center line
193 noremap <leader>n ]cz.
194 noremap <leader>p [cz.
195 if has ('win32')
196     set guifont=DejaVu_Sans_Mono:h9:cANSI:qDRAFT
197 endif
198 if &diff
199     " ignore whitespace
200     set diffopt+=vertical
201     set diffopt+=iwhite
202     set diffopt+=algorithm:patience
203
204     syntax off
205     highlight DiffText term=reverse cterm=reverse ctermfg=214 ctermbg=234 gui=reverse guifg=lightgreen guibg=DarkGreen
206     " go fullscreen:
207     if has ('win32')
208         autocmd GuiEnter * simalt ~x
209         set guifont=DejaVu_Sans_Mono:h8:cANSI:qDRAFT
210     endif
211     " make all diff windows the same size
212     autocmd VimResized * wincmd =
213     autocmd VimEnter *  2wincmd w
214     autocmd VimEnter *  syntax off
215     autocmd VimEnter * set guioptions+=b
216     set relativenumber!
217     set number
218 else
219     if has("gui_running")
220         set lines=999 columns=120
221     endif
222     " from /etc/vim/vimrc (restore last editing position)
223     if has("autocmd")
224         au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
225     endif
226
227     set textwidth=120
228     let &colorcolumn="121"
229     highlight ColorColumn ctermbg=lightgray guibg=lightcyan
230
231 endif
232
233
234 " remove currently unused fugitive buffers:
235 autocmd BufReadPost fugitive://* set bufhidden=delete
236
237 " reset terminal colors after vim leaves
238 "if !has("gui_running")
239 "    au VimLeave * !echo -ne "\033[0m"
240 "endif
241
242 " macht dass auch in screen auf dem server der vollstaendige hintergund gmalt
243 " wird.
244 set t_ut=
245
246 if has ('win32') || has('win32unix')
247     let g:vimwiki_list = [
248                 \{
249                 \   'path':'~/vimwiki',
250                 \   'path_html':'~/vimwiki/html/',
251                 \   'syntax': 'markdown',
252                 \   'ext': '.md'
253                 \ }
254                 \ ]
255 else
256     let g:vimwiki_list = [
257                 \ {
258                 \   'path':'~/p/wiki',
259                 \   'path_html':'~/p/wiki/html/',
260                 \   'syntax': 'markdown',
261                 \   'ext': '.md'
262                 \ }
263                 \ ]
264 endif
265
266 "" tmp files:
267 if isdirectory( b:vim_conf_dir . '/tmp/backup') == 0
268     call mkdir(b:vim_conf_dir.'/tmp/backup', 'p', 0700)
269 endif
270 exec 'set backupdir='. b:vim_conf_dir.'/tmp/backup//'
271 set backup
272
273 " delete old swap dirs and disable swap files
274 if isdirectory( b:vim_conf_dir . '/tmp/swap') == 1
275     call delete(b:vim_conf_dir.'/tmp/swap', 'rf')
276 endif
277 set noswapfile
278
279 " viminfo stores the the state of your previous editing session
280 if has('win32')
281     set viminfo+=n~/vimfiles/tmp/viminfo
282 else
283     set viminfo+=n~/.vim/tmp/viminfo
284 endif
285
286 " letzte suche beim öffnen einer Datei sofort wieder anzeigen
287 set viminfo-=h
288
289 if exists("+undofile")
290     " undofile - This allows you to use undos after exiting and restarting
291     " This, like swap and backups, uses .vim-undo first, then ~/.vim/undo
292     " :help undo-persistence
293     " This is only present in 7.3+
294     if isdirectory( b:vim_conf_dir . '/tmp/undo') == 0
295         call mkdir(b:vim_conf_dir.'/tmp/undo', 'p', 0700)
296     endif
297     exec 'set undodir='. b:vim_conf_dir.'/tmp/undo'
298     set undofile
299 endif
300
301 " format document
302 function! FormatDocument()
303     let save_pos = getpos(".")
304     normal gg=G
305     call setpos('.', save_pos)
306     echom "formatiert.."
307 endfunction
308
309 noremap <Leader>x :call XmlPretty()<cr>
310 " reformat xml stuff
311 function! XmlPretty()
312     let save_pos = getpos(".")
313     :silent! %s/&lt;/</g
314     :silent! %s/&gt;/>/g
315     :silent! %s/></>\r</g
316     :set ft=xml
317     :normal mzgg=G`z
318     call setpos('.', save_pos)
319 endfunction
320
321 " fix logger stuff to use the newer api call
322 " remove #regions and whitspaces
323 " use {var} instead of " + var + "
324 noremap <Leader>fx ma:1,$ call FixCsharp()<cr>'a
325 function! FixCsharp()
326     let save_pos = getpos(".")
327     " regions entfernen;
328     :silent! %g/^\s*#\(end\)\{0,1\}region/d
329
330     :silent! %g/\.WriteException(/normal 0df,$^iLog.Exception(\eV=
331     :silent! %g/\.WriteMessage(/normal 0f(ldf."ayiw0P0xlveu0iLog.\eelcf,(\eld0$^PV=
332
333     " '+ varname +' durch '{varname}' ersetzen
334     :silent! %s/"\s*+\s*\(.\{-\}\)\s*+\s*"/{\1}/g
335     :silent! %s/"\s*+\s*\(.\{-\}\)\s*+\s*$/{\1}" +/g
336     :silent! %s/"\s*+\s*\(.\{-\}\)\s*);/{\1}");/g
337     "
338     "ersetze 'Zeilenanfang "'
339     :silent! %s/\(^\s*\)\("[^"]*{\)/\1$\2/g
340     :silent! %s/[^$]\(".*{\)/$\1/g
341
342     " mehrere leerzeilen durch eine einzelne ersetzen:
343     :silent! %s/\s\+$//e
344     :silent! %s/\n\{3,}/\r\r/e
345     :noh
346     call setpos('.', save_pos)
347 endfunction
348
349 function! FixWhitespace()
350     " convert tabs to spaces
351     :retab
352     " remove trailing whitespace
353     :silent! %s/\s\+$//e
354     :silent! g/\s*<!--\**-->\s*/d
355
356     " remov '//******' and '//#####'
357     :silent! g/\/\/\(\*\|#\)*\s*$/d
358     " remove excessive newlines
359     :silent! %s/\n\n\n\+/\r\r/
360     :noh
361 endfunction
362
363 function! UndoCSharStringInterpolation()
364     silent! s/\$"/"/g
365     silent! s/{\(.\{-}\)}/" + \1 + "/g
366 endfunction
367
368 """" ALE start """"
369 inoremap <F4> <Esc>:ALEToggle<CR>
370 nnoremap <F4> <Esc>:ALEToggle<CR>
371 let g:ale_linters = {
372             \   'cpp': ['gcc', 'cppcheck', 'clang'],
373             \   'perl': ['perl', 'perlcritic'],
374             \}
375 let b:ale_warn_about_trailing_whitespace = 1
376 let g:ale_sign_column_always = 1
377 let g:ale_cpp_clang_options =
378             \  '-std=c++14 -Wall -pedantic -fPIC
379             \   -I/usr/include/x86_64-linux-gnu/qt5
380             \   -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport
381             \   -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets
382             \   -I/usr/include/x86_64-linux-gnu/qt5/QtGui
383             \   -I/usr/include/x86_64-linux-gnu/qt5/QtCore
384             \   -I/usr/include/libdrm
385             \   -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g+
386             \'
387
388 let g:ale_cpp_gcc_options =
389             \  '-std=c++14 -Wall -pedantic -fPIC
390             \   -I/usr/include/x86_64-linux-gnu/qt5
391             \   -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport
392             \   -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets
393             \   -I/usr/include/x86_64-linux-gnu/qt5/QtGui
394             \   -I/usr/include/x86_64-linux-gnu/qt5/QtCore
395             \   -I/usr/include/libdrm
396             \   -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g+
397             \'
398
399 """" ALE end """"
400
401 if has("patch-7.4.354")
402     " Indents word-wrapped lines as much as the 'parent' line
403     set breakindent
404     " Ensures word-wrap does not split words
405     set formatoptions=l
406     set lbr
407 endif
408
409 hi CursorLineNr  ctermbg=black guibg=black
410 hi CursorLine    ctermbg=black guibg=black
411 augroup CursorLine
412     au!
413     au VimEnter,WinEnter,BufWinEnter * setlocal cursorline
414     au WinLeave * setlocal nocursorline
415 augroup END
416
417 packadd! matchit
418
419 let g:acp_enableAtStartup = 1
420 let g:acp_behaviorPerlOmniLength = 0
421 let g:acp_behaviorPhpOmniLength = 0
422 let g:acp_completeoptPreview = 1
423 let g:acp_behaviorPythonOmniLength = 0
424 let g:acp_behaviorXmlOmniLength = 0
425 let g:acp_behaviorHtmlOmniLength = 0
426 let g:acp_behaviorCssOmniPropertyLength = 1
427 let g:acp_behaviorCssOmniValueLength = 0
428
429 highlight ExtraWhitespace ctermfg=red guifg=red ctermbg=white guibg=DarkGrey
430
431 " keine trailing whitespaces in hub log files anzeigen
432 match ExtraWhitespace /\s\+$/
433
434 let g:ale_python_flake8_options = "--max-line-length=120"
435
436 if has("win32")
437     function! CopyFormatted(line1, line2)
438         let prev_number = &number
439         let prev_relativenumber = &relativenumber
440         let prev_background = &background
441         let prev_ft = &ft
442         setlocal number!
443         setlocal relativenumber!
444         setlocal background=light
445         " wenn ft manuel gesetzt war wird das von set background zurueckgesetzt, deswegen gleich wieder setzen
446         exe 'setlocal ft='.expand(prev_ft)
447
448         execute a:line1 . "," . a:line2 . "TOhtml"
449         %yank *
450         !start /min powershell -noprofile "gcb | scb -as"
451         bwipeout!
452
453         if (prev_number)
454             set number
455         endif
456         if (prev_relativenumber)
457             set relativenumber
458         endif
459         exe 'setlocal background='.expand(prev_background)
460         exe 'setlocal ft='.expand(prev_ft)
461     endfunction
462
463     command! -range=% HtmlClip silent call CopyFormatted(<line1>,<line2>)
464 endif
465
466 augroup logfilesgroup
467     autocmd!
468     au! BufRead,BufNewFile *.log    setlocal nowrap |
469                 \ setlocal textwidth=0 |
470                 \ let &colorcolumn=""
471 augroup END
472
473
474 set suffixes+=.mhp,.backup1,.backup2,.backup3