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