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