--- /dev/null
+plugged
+init-local.vim
+keymaps-local.vim
+macros-local.vim
+plugins-local.vim
--- /dev/null
+# A modular vim configuration
+
+This is my personal vim configuration that is partly inspired by SpaceVim. It
+is compatible to neovim and (g)vim (version 8 or higher). The configuration is
+split up into multiple files such that personal customization is separated from
+boilerplate code.
+
+
+## Installation
+
+Simply clone this repository into ~/.vim and invoke install.sh therein. The
+install script just creates symlinks to vim/gvim/neovim configuration files and
+directories.
+
+````
+git clone https://git.sthu.org/repos/vimconf.git ~/.vim
+~/.vim/install.sh
+````
+
+The install file also checks requirements for the configuration and the plugins
+added:
+
+ - python3 support for vim/gvim
+ - neovim python3 module
+ - aspell
+
+
+## Specialization for local machines
+
+I personally would like to have the same vim configuration on all my accounts.
+Still, on certain machines I would like to personalize and specialize the
+configuration. The following files are read if existent:
+
+ - plugins-local.vim
+ - macros-local.vim
+ - keymaps-local.vim
+ - init-local.vim
+
+For all four example files are shipped with the repository.
--- /dev/null
+set columns=100
+set lines=35
+
+set guifont=Hack\ 9,Liberation\ Mono\ for\ Powerline\ 10,DejaVu\ Sans\ Mono\ 10,Monospace\ 10
+
+set mousehide
--- /dev/null
+" Configuration for youcompleteme, if not using vim-clang.
+"let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'
+"let g:ycm_confirm_extra_conf = 0
+"let g:ycm_min_num_of_chars_for_completion = 2
+"let g:ycm_collect_identifiers_from_tags_files = 1
+"let g:ycm_autoclose_preview_window_after_completion = 1
+"let g:ycm_key_list_select_completion = ['<Down>']
+"nnoremap <buffer> <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>
+"let g:ycm_filetype_whitelist = { 'c' : 1, 'cpp' : 1, 'cs' : 1, 'objc' : 1, 'java' : 1, 'python' : 1 }
+
+" Do not show diagnostic window of vim-clang
+let g:clang_diagsopt = ''
--- /dev/null
+" My personal vim, nvim, gvim configuration
+" Author: Stefan Huber <shuber@sthu.org>
+
+set nocompatible
+set termguicolors
+set number
+set cursorline
+set scrolloff=5
+
+
+set encoding=utf-8
+
+set listchars=tab:»,trail:·,eol:$
+set virtualedit=block
+
+set tabstop=4
+set shiftwidth=4
+set expandtab
+set smarttab
+
+set incsearch
+set hlsearch
+
+set colorcolumn=+1
+set mouse=a
+set wildmode=longest,list:full
+
+if has('nvim')
+ set guicursor=
+end
+
+syntax on
+filetype plugin indent on
+runtime plugsetup.vim
+
+let g:airline_powerline_fonts=1
+let g:airline#extensions#tabline#enabled=1
+let g:airline#extensions#branch#enabled=1
+
+let g:gruvbox_contrast_light='hard'
+let g:gruvbox_contrast_dark='hard'
+let g:gruvbox_italic = 1
+set bg=dark
+colorscheme gruvbox
+
+" let NERDTreeWinPos="right"
+let NERDTreeHijackNetrw=0
+let NERDTreeWinSize=22
+let NERDTreeQuitOnOpen=1
+"au VimEnter * if !argc() | Startify | NERDTree | wincmd w
+
+let g:neomake_c_enabled_makers = ['clangtidy', 'clangcheck']
+let g:neomake_cpp_enabled_makers = ['clangtidy', 'clangcheck']
+
+call neomake#configure#automake('w')
+"let g:neomake_logfile = '/tmp/neomake.log'
+
+let g:clang_compilation_database = '.'
+
+let g:deoplete#enable_at_startup=1
+
+"augroup pencil
+ "au!
+ "au FileType markdown,mkd call pencil#init()
+ "au FileType text call pencil#init()
+ "au FileType mail call pencil#init()
+ "au FileType tex call pencil#init()
+"augroup END
+
+let g:vim_markdown_folding_disabled=1
+let g:vim_markdown_frontmatter=1
+let g:vim_markdown_math=1
+
+let g:guesslang_langs=[ 'en_US', 'de_AT']
+au FileType text,markdown,mail,tex setlocal spell
+au BufReadPost * :DetectIndent
+
+au BufEnter *.c* let b:fswitchlocs='reg:/lib/include/,rel:.'
+au BufEnter *.h* let b:fswitchlocs='reg:/include/lib/,rel:.'
+
+au BufEnter *.cpp,*.cc,*.cxx let b:fswitchdst='h,hxx,hpp,hh'
+au BufEnter *.h,*.hh,*.hxx let b:fswitchdst='cc,c,cxx,cpp'
+
+
+"git scissor line
+au Filetype mail syn match Statement /^\s*-*\s*>8\s*-*\s*$/
+au Filetype mail syn match Statement /^\s*-*\s*8<\s*-*\s*$/
+
+"mutt and neomutt
+au BufRead,BufNewFile ~/.mutt/tmp/*mutt-* set filetype=mail
+au BufRead,BufNewFile *.muttrc set filetype=muttrc
+
+" Some settings for tex files
+au BufRead,BufNewFile *.cls set filetype=tex
+au Filetype tex set shiftwidth=2
+
+au BufRead,BufNewFile *.plt set filetype=gnuplot
+
+:let g:org_todo_keywords = [['TODO(t)', 'WAITING(w)', '|', 'DONE(d)'],
+ \ ['|', 'OBSOLETE(o)'],
+ \ ['CANCELED(c)']]
+
+" Trailing whitespace
+highlight default link TrailingWhitespace SpellCap
+" Make trailing whitespace be flagged as bad.
+au BufRead,BufNewFile * syn match TrailingWhitespace /\s\+$/ containedin=ALL
+
+runtime macros.vim
+runtime keymaps.vim
+
+if filereadable($HOME . '/.vim/init-local.vim')
+ source ~/.vim/init-local.vim
+endif
--- /dev/null
+#!/bin/sh
+
+set -e
+
+check_vim()
+{
+ if /usr/bin/vim --version | grep -q "$1"; then
+ echo "vim has support for $1."
+ else
+ echo "vim has no support for $1. Aborting."
+ exit
+ fi
+}
+
+check_py3()
+{
+ if python3 -c "import $1" 2>/dev/null; then
+ echo "Python3 module '$1' exists."
+ else
+ echo "Python3 module '$1' missing. Aborting."
+ exit
+ fi
+}
+
+check_prog()
+{
+ if which "$1" > /dev/null; then
+ echo "$1 found"
+ else
+ echo "$1 not found. Aborting."
+ exit
+ fi
+}
+
+check_requirements()
+{
+ check_vim +python3
+ check_prog aspell
+ check_py3 neovim
+}
+
+install() {
+ echo "Installing files."
+ touch $HOME/.viminfo
+ ln -s $HOME/.vim/init.vim $HOME/.vimrc
+ ln -s $HOME/.vim/gvimrc $HOME/.gvimrc
+ ln -s $HOME/.vim $HOME/.config/nvim
+}
+
+
+check_requirements
+install
--- /dev/null
+"map <F12> :TMToggle<CR>
--- /dev/null
+nnoremap <C-p> :Denite file/rec<cr>
+nnoremap <space>/ :Denite grep:.<cr>
+nnoremap <space>s :Denite buffer<cr>
+
+nnoremap <C-space> pumvisible() ? "\<c-n>" : "\<tab>"
+
+nnoremap <F2> :NERDTreeToggle<cr>
+nnoremap <F3> :TagbarToggle<cr>
+au Filetype tex nmap <buffer> <F3> :VimtexTocToggle<CR>
+au Filetype tex nmap <buffer> <F4> :VimtexLabelsToggle<CR>
+au Filetype gnuplot map <buffer> <F5> :call OpenIn("gnuplot -persist") <CR>
+
+nmap <s-PageDown> :bn<CR>
+nmap <s-PageUp> :bp<CR>
+
+map <a-c> <plug>NERDCommenterToggle
+
+imap <C-k> <Plug>(neosnippet_expand_or_jump)
+smap <C-k> <Plug>(neosnippet_expand_or_jump)
+xmap <C-k> <Plug>(neosnippet_expand_target)
+
+au Filetype c,cpp,objc map <buffer> <F11> :vsplit<CR>:FSRight<CR>
+au Filetype c,cpp,objc map <buffer> <S-F11> :FSHere<CR>
+au BufNewFile *.{h,hpp,hxx} call AddIncludeGuards()
+
+au Filetype html,xml imap <buffer> <C-_> <C-X>/
+
+" Start interactive EasyAlign in visual mode (e.g. vipga)
+vmap <Enter> <Plug>(EasyAlign)
+" Start interactive EasyAlign for a motion/text object (e.g. gaip)
+nmap ga <Plug>(EasyAlign)
+
+if filereadable($HOME . '/.vim/keymaps-local.vim')
+ source ~/.vim/keymaps-local.vim
+endif
--- /dev/null
+" Tranlate umlauts to tex-syntax umlauts
+function TexTransUmlaute()
+ execute ':%s/ü/\\\"u/ge'
+ execute ':%s/Ü/\\\"U/&'
+ execute ':%s/ö/\\\"o/&'
+ execute ':%s/Ö/\\\"O/&'
+ execute ':%s/ä/\\\"a/&'
+ execute ':%s/Ä/\\\"A/&'
+ execute ':%s/ß/\\\"s/&'
+ execute ':%s/²/\^2/&'
+endfunction
+
+
+"Open current file with a specific program
+function OpenIn(prog)
+ silent execute ":!" . a:prog . " % &"
+endfunction
+
+
+"Prepend the namespace to an identifier, e.g. 'std::' before 'map' excluding
+"those in C/C++ comments.
+function PrependCppNamespaceToIdent(ns, id)
+
+ " To match Not to match
+ "
+ "|id |// id
+ "| id |// /* */ id
+ "|/* */ /* */ id |/* */ // id
+ "|id /* */ |/* id
+ "|*/ id | * id
+ " |/* id */
+ " |::id
+ " |/**/ ::id
+ " |#include <id>
+ "
+ " In order to not match '* id' it is assumed that multi-line comment lines
+ " in the middle begin with a star.
+
+ " If #include and // and /* and ^* and :: is not prepend:
+ execute ':%s@\(\(#include\|\/\/\|\/\*\|^\s*\*[^/]\).*\|::\)\@<!\<' . a:id . '\>@' . a:ns . '::' . a:id . '@ge'
+ " If #include and // and :: is not prepend, but */ is, and no further /* or // are found
+ execute ':%s@\(\(#include\|\/\/\).*\)\@<!\*\/\(\/[^\/\*]\|[^\/]\)*\zs\(::\)\@<!\<' . a:id . '\>@' . a:ns . '::' . a:id . '@ge'
+
+endfunction
+
+
+"Prepend STL namespace 'std::' to several identifiers
+function PrependSTLNamespace()
+ " This list of identifier is not complete, but adding all of them is too
+ " much. We rather like to add identifieres that are 'typical' for C++.
+ " Others, like 'move' are likely to not be C++ specific. In this cases the
+ " user is asked to call PrependCppNamespaceToIdent by hand.
+ let id = []
+ let id = id +['cin', 'cout', 'cerr', 'endl']
+ let id = id +['swap', 'sort', 'max', 'min']
+ let id = id +['vector', 'deque', 'list', 'map', 'multimap', 'set']
+ let id = id +['queue', 'stack', 'priority_queue']
+ let id = id +['ostream', 'istream', 'sstream']
+ let id = id +['pair', 'string']
+
+ for i in id
+ call PrependCppNamespaceToIdent("std", i)
+ endfor
+endfunction
+
+
+function EscapeHexToChar()
+ echo 'Call "x/Nxb addr" in GDB to print N bytes at addr'
+ execute '%s/^.*://'
+ execute '%s/\s*0x\(\x\x\)/\\x\1/g'
+ execute '%s/^\(.*\)$/"\1"/'
+endfunction
+
+
+function InsertIncludeGuardsWithoutEndif()
+ let gatename = substitute(expand("%:t"), "\\.", "_", "g") . '_' . strpart(system('pwgen -c 16 1'), 0, 16)
+ execute "normal! i#ifndef " . gatename
+ execute "normal! o#define " . gatename
+endfunction
+
+
+function AddIncludeGuards()
+ execute "normal! Go#endif"
+ execute "normal! gg"
+ call InsertIncludeGuardsWithoutEndif()
+endfunction
+
+
+if filereadable($HOME . '/.vim/macros-local.vim')
+ source ~/.vim/macros-local.vim
+endif
--- /dev/null
+# Signed-off-by tag line
+snippet signed-off-by
+options head
+ Signed-off-by: ${1:authorname <mail>}
+
+# Reported-by tag line
+snippet reported-by
+options head
+ Reported-by: ${1:authorname <mail>}
+
+# Tested-by tag line
+snippet tested-by
+options head
+ Tested-by: ${1:authorname <mail>}
+
+# Tested-by tag line
+snippet acked-by
+options head
+ Acked-by: ${1:authorname <mail>}
--- /dev/null
+Plug 'jamessan/vim-gnupg'
+
+" An alternative to youcompleteme (ycm)
+"Plug 'justmao945/vim-clang'
+Plug 'shuber2/vim-clang', { 'branch': 'multipy' }
+
+"Plug 'kien/tabman.vim'
--- /dev/null
+Plug 'mhinz/vim-startify'
+
+Plug 'vim-airline/vim-airline'
+Plug 'morhetz/gruvbox'
+
+Plug 'mhinz/vim-signify'
+Plug 'tpope/vim-fugitive'
+Plug 'airblade/vim-rooter'
+
+Plug 'Shougo/vimproc.vim', {'do': 'make'}
+Plug 'Shougo/denite.nvim'
+
+Plug 'scrooloose/nerdcommenter'
+
+Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
+Plug 'Xuyuanp/nerdtree-git-plugin', {'on': 'NERDTreeToggle'}
+
+Plug 'neomake/neomake'
+Plug 'majutsushi/tagbar', {'on': 'TagbarToggle'}
+
+Plug 'plasticboy/vim-markdown', {'for': 'markdown'}
+Plug 'lvht/tagbar-markdown', {'for': 'markdown'}
+
+Plug 'PProvost/vim-markdown-jekyll'
+Plug 'tpope/vim-liquid'
+
+Plug 'cakebaker/scss-syntax.vim', {'for': 'scss'}
+Plug 'hail2u/vim-css3-syntax', {'for': ['scss', 'css']}
+Plug 'ap/vim-css-color', {'for': ['scss', 'css']}
+
+Plug 'tpope/vim-ragtag', {'for': ['html', 'xml']}
+
+Plug 'lervag/vimtex'
+
+if has('nvim')
+ Plug 'Shougo/deoplete.nvim', {'do': ':UpdateRemotePlugins' }
+else
+ Plug 'Shougo/deoplete.nvim'
+ Plug 'roxma/nvim-yarp'
+ Plug 'roxma/vim-hug-neovim-rpc'
+endif
+
+Plug 'Shougo/neosnippet.vim'
+Plug 'Shougo/neosnippet-snippets'
+
+Plug 'tpope/vim-speeddating'
+Plug 'jceb/vim-orgmode', {'for': ['org']}
+
+Plug 'Konfekt/vim-DetectSpellLang', {'do': 'spell'}
+Plug 'ciaranm/detectindent'
+
+Plug 'derekwyatt/vim-fswitch', {'for': ['c', 'cpp', 'objc']}
+Plug 'ludovicchabant/vim-gutentags', {'for': ['c', 'cpp', 'objc']}
+
+Plug 'godlygeek/tabular'
+Plug 'junegunn/vim-easy-align'
+
+Plug 'thinca/vim-fontzoom'
+
+Plug 'vim-scripts/loremipsum', {'on': 'Loremipsum'}
+
+if filereadable($HOME . '/.vim/plugins-local.vim')
+ source ~/.vim/plugins-local.vim
+endif
--- /dev/null
+"Automatic installation of vim-plug.
+"https://github.com/junegunn/vim-plug/wiki/tips
+if empty(glob('~/.vim/autoload/plug.vim'))
+ silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
+ \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
+ autocmd VimEnter * PlugInstall --sync | source ~/.vim/init.vim
+endif
+
+call plug#begin('~/.vim/plugged')
+source ~/.vim/plugins.vim
+call plug#end()
+
+"Automatically install missing plugins
+"https://github.com/junegunn/vim-plug/wiki/extra
+autocmd VimEnter *
+ \ if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
+ \| PlugInstall --sync | q
+ \| endif