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