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