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