" vim: nonumber backup

" -------------------------------------------------------------------------
" Lothar Becker
" VIM - Konfigurationsdatei 
" VIM - Version 7.2
" -------------------------------------------------------------------------

" Settings {{{

    " Nerd Commenter
    let NERDSpaceDelims = 1

    " Workaround vim-vimoutliner
    set runtimepath+=/usr/share/vim/addons

    " Will allow you to use :w!! to write to a file using sudo if you forgot to 'sudo vim file' (it will prompt for sudo password when writing)
    cmap w!! %!sudo tee > /dev/null %

    " Default Rechtschreibprüfung
    " set spell

    " Deutsche Rechtschreibprüfung
    " de* Spell Files Download: http://ftp.vim.org/vim/runtime/spell/
    " set spelllang=de

    " set spellfile=/home/lothar/.vim/de.add

    " Rechtschreibprüfung ein- ausschalten mit F2
    " map <F2> :set spell!<CR><Bar>:echo 'Spell check: ' . strpart('OffOn', 3 * &spell, 3)<CR>

    " Nur Top 10 (Rechtschreibprüfung) anzeigen
    " set sps=best,10

    " disable the matching brace/bracket highlighting
    let g:loaded_matchparen = 1

    " Beschriftung der Tabs (%t=Dateiname, %N=Nummer, %f=Pfad und Dateiname, \=Leerzeichen)
    " set guitablabel=%t

    " Highlight cursorline ein- ausschalten mit F3
    map <F3> :set cursorline!<CR><Bar>:echo 'Highlight active cursor line: ' . strpart('OffOn', 3 * &cursorline, 3)<CR>

    " Kein blinkender Cursor
    set gcr=a:blinkon0

    set shellslash

    "set guifont=Courier:h10
    "set guifont=ProggyCleanTT:h12:cDEFAULT

    "colorscheme koehler

    " Kein Vi-kompatibler Modus 
    set nocompatible

    " Alle Suchtreffer farblich hervorheben 
    set hlsearch

    " Während der Eingabe zum entsprechenden Text springen
    set incsearch

    " Groß- und Kleinschreibung bei der Suche ignorieren 
    set ignorecase

    " ignorecase abschalten, wenn Muster Großbuchstaben enthält
    set smartcase

    " Syntax-Highlighting 
    syntax on

    " Zeilennummerierung 
    set number

    " Faltungsmethode = Markierungen - Standardmäßig werden {{{ zum Anfang und }}}
    " zum Ende einer Faltung verwendet
    set foldmethod=marker

    " Automatisches Einrücken
    set smartindent

    " The number of space characters that will be inserted when the tab key is pressed
    set tabstop=4

    " Einrücktiefe
    set shiftwidth=4

    " To insert space characters whenever the tab key is pressed.
    set expandtab

    " Treppeneffekt beim Copy & Paste verhindern
    set pastetoggle=<F8>

    " Backup-File anlegen
    " set backup

    " Pfad zum Backup-Verzeichnis
    set backupdir=~/.vim/backup

    " Normales Verhalten der Backspace-Taste
    set backspace=2

    " Zeigt den aktuellen Modus an
    set showmode

    " Show (partial) command in the last line of the screen. 
    set showcmd

    " Zeigt die aktuelle Cursorposition
    set ruler

    " Ein Leerzeichen nach .,?,! beim Zusammenfügen von zwei Zeilen
    set nojoinspaces

    " Statusline - 2 Zeilen hoch
    set laststatus=2

    " Modeline nur in 1. Zeile zulässig
    set modelines=1

    " Name der aktuellen Datei in Fenster-Titel-Leiste
    set title

    " Liste von Verzeichnissen die durchsucht werden
    set runtimepath=~/.vim,$VIMRUNTIME

    set viminfo='20,\"50

    set history=50

    " Foldcolors für Default-Colorscheme
    hi Folded guibg=black guifg=gold cterm=none ctermbg=black ctermfg=darkgreen

    " Pfad zum VIM-Helpfile - Diese Option ist nur nötig wenn das
    " Aufrufen der VIM-Hilfe zu einer Fehlermeldung führt
"   set helpfile=/usr/share/vim/vim63/doc/help.txt.gz       

" }}}

" Mappings {{{

    " Hervorhebungen der Suche mit Strg-L enfernen
    map <silent> <c-l> :silent nohl<cr>

" }}}

" Abkürzungen {{{

    " Firebug
    imap c.l console.log();<LEFT><LEFT>
    imap c.d console.debug();<LEFT><LEFT>

    " DWS
    imap wtl WriteToLog(GetWebVars);

    imap LB Lothar Becker

    " Zeitstempel - Sa 13 Jun 09
    iab  mdyl  <c-r>=strftime("%a %d %b %y")

" }}}

" Autocommands {{{

    if has("autocmd")

        " autocmd BufNewFile,Bufread *.php,*.php3,*.php4,*.js set keywordprg="help"

        " Templates
        " autocmd! BufNewFile * silent! 0r $VIMRUNTIME/skel/tmpl.%:e

        " Manuelle Faltungen in otl-Dateien speichern
        " autocmd BufWrite *.otl mkview

        " Manuelle Faltungen in otl Dateien laden
        " autocmd BufWinEnter *.otl loadview

        " Speichern von Cursorpositionen, Faltungen, lokale Optionen/Mappings/Abkürzungen.
        au BufWinLeave *.* silent! mkview
        au BufWinEnter *.* silent! loadview


        " Neue Tags im Tagfile speichern
        " autocmd BufWritePost myvimhelp.txt helptags ~/.vim/doc

        " PHP-Manual als Helpfile
        " autocmd BufNewFile,Bufread *.php,*.php3,*.php4 set keywordprg="help"

        " Deutsche Umlaute die sich in Html und PHP-Dateien befinden umwandeln
        " autocmd BufNewFile,Bufread *.html,*.htm,*.shtml,*.php source ~/.vimrc_html

        " Added by VimOutliner installer
        au! BufRead,BufNewFile *.otl set filetype=vo_base
        " End modifications by VimOutliner installer
        "
        au! BufRead,BufNewFile *.dws set filetype=java

        " Das Wort 'Error' in Logfiles farblich hervorheben
        au BufRead,BufNewFile *.log syn match fehler "Error"
        au BufRead,BufNewFile *.log hi fehler guifg=white guibg=red

        " Start with a maximized window (gui-win32)
        " au GUIEnter * simalt ~x

        filetype plugin on

    endif

" }}}

" Funktionen {{{

    " Display output of shell commands in new window (scratchbuffer)
    command! -complete=shellcmd -nargs=+ Shell call s:RunShellCommand(<q-args>)
    function! s:RunShellCommand(cmdline)
      echo a:cmdline
      let expanded_cmdline = a:cmdline
      for part in split(a:cmdline, ' ')
         if part[0] =~ '\v[%#<]'
            let expanded_part = fnameescape(expand(part))
            let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
         endif
      endfor
      botright new
      setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
      call setline(1, 'You entered:    ' . a:cmdline)
      call setline(2, 'Expanded Form:  ' .expanded_cmdline)
      call setline(3,substitute(getline(2),'.','=','g'))
      execute '$read !'. expanded_cmdline
      setlocal nomodifiable
      1
    endfunction

    " Mit Strg-H alle Umlaute im markierten Bereich Html-kodieren
    function HtmlEscape()
        silent s/ö/\&ouml;/eg
        silent s/ä/\&auml;/eg
        silent s/ü/\&uuml;/eg
        silent s/Ö/\&Ouml;/eg
        silent s/Ä/\&Auml;/eg
        silent s/Ü/\&Uuml;/eg
        silent s/ß/\&szlig;/eg
    endfunction

    map <silent> <c-h> :call HtmlEscape()<CR>

" }}}

" Plugins {{{

    " filetype plugin indent on
    " syntax on

" }}}