\documentclass[xetex]{beamer}

\usepackage[ngerman]{babel}
\usepackage{hyperref}
\usepackage[default]{sourcesanspro}
\usepackage[scale=0.9]{sourcecodepro}
\usepackage{graphicx}
\usepackage{keystroke}
\usepackage{csquotes}
\usepackage{minted}

%\setmainfont{Source Serif Pro}

%Information to be included in the title page:
\title{How to VIM}
\subtitle{Eine kurze Einführung in den Texteditor vim}
\author{Marcel
Schneider\\{\href{mailto:marcel.schneider@stud.uni-goettingen.de?subject=Frage
zu Vim}{marcel.schneider@stud.uni-goettigen.de}\\\url{https://t.me/teleschneider}}}
\institute{Georg-August-Universität Göttingen}
\date{Info-O-Phase 2018}

\newcommand*{\kbd}[1]{\keystroke{\texttt{#1}}}

\begin{document}

\frame{\titlepage}

\begin{frame}
    \frametitle{Was ist das?}
    \emph{V}i \emph{Im}proved
    \begin{itemize}
        \item 1991 erstmals veröffentlicht
        \item Erweiterung von \emph{vi} (1976), welcher auf \emph{ed} (1971)
            aufbaute
        \item Üblicherweise kein GUI, arbeitet im Terminal
        \item Kenntnisse in der Shell vorteilhaft
        \item Ungewöhnliche, aber hocheffiziente Eingabemöglichkeiten
        \item Bietet Vielzahl an Funktionen, per Plugins noch erweiterbar
        \item Quelle vieler Memes
    \end{itemize}
\end{frame}

\begin{frame}{Memes}
    \begin{center}
        % https://img.devrant.io/devrant/rant/r_170390_1mBnJ.jpg
        \includegraphics[height=5cm]{img/vim-luck-brian.jpg}
        %https://www.barbarianmeetscoding.com/images/one-does-not-simply-learn-vim.jpg
        \includegraphics[height=5cm]{img/one-does-not-simply-learn-vim.jpg}
    \end{center}
\end{frame}

\begin{frame}{Memes}
    \includegraphics[width=\textwidth]{img/iamdeveloper.png}
\end{frame}

\begin{frame}{Vim beenden}
    Mit folgendem Kommando wird Vim beendet
    \keystroke{:} \keystroke{q}
\end{frame}

\begin{frame}{Weitere Wichtige Kommandos}
    \begin{table}[h]
        \centering
        \begin{tabular}{rl}
            \kbd{:}\kbd{w} & Speichern \\
            \kbd{:}\kbd{q}\kbd{!} & Schließen ohne speichern \\
            \kbd{:}\kbd{w}\kbd{q} & Speichern und schließen
        \end{tabular}
    \end{table}
\end{frame}

\begin{frame}{Modi in Vim}
    Es gibt im Wesentlichen drei verschiedene Modi:
    \begin{enumerate}
        \item Normal mode
        \item Insert mode
        \item Visual mode
    \end{enumerate}
\end{frame}

\begin{frame}{Normal mode}
    \begin{itemize}
        \item Standardmodus, Vim startet mit diesem
        \item Alle Eingaben werden als Kommandos interpretiert
        \item Wird per \Esc aus anderen Modi erreicht
    \end{itemize}

    \begin{center}
        \includegraphics[width=0.9\textwidth]{img/normal-mode.png}
    \end{center}
\end{frame}

\begin{frame}{Insert mode}
    \begin{itemize}
        \item Eingabemodus, \enquote{normales} Verhalten, wie aus anderen
            Editoren bekannt
        \item Wird im Normal mode per \kbd{i}/\kbd{I} oder
            \kbd{a}/\kbd{A} erreicht
    \end{itemize}

    \begin{center}
        \includegraphics[width=0.9\textwidth]{img/insert-mode.png}
    \end{center}
\end{frame}

\begin{frame}{Visual Mode}
    \begin{itemize}
        \item In diesem Modus kann Text selektiert werden
        \item Selektion kann bearbeitet/gelöscht werden, oder als Argument für
            ein Kommando dienen
        \item Funktioniert Zeilen- und Blockweise
        \item Aufruf per \kbd{v}/\kbd{V}
    \end{itemize}

    \begin{center}
        \includegraphics[width=0.8\textwidth]{img/visual-mode.png}
    \end{center}
\end{frame}

\begin{frame}[fragile]{Protipp: Esc-Taste}
    Tauscht die Belegung von \kbd{Esc} und \kbd{CapsLock}, z.B. mit folgendem
    Eintrag in \url{~/.profile} oder \url{~/.bashrc}: \\
    \begin{minted}[stripall]{bash}
        xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
    \end{minted}

    % https://askubuntu.com/a/365701
    Oder per dconf-editor in Unity, unter \url{org/gnome/desktop/input-sources}
    bei \url{xkb-options} \mintinline{bash}{'caps:swapescape'} einfügen.
\end{frame}

\begin{frame}{Bewegung im Normal Mode}
    Der Cursor wird nicht mit den Pfeiltasten bewegt, sondern:
    \begin{tabular}{rl}
        \kbd{h} & Nach links \\
        \kbd{j} & Nach unten \\
        \kbd{k} & Nach oben \\
        \kbd{l} & Nach rechts
    \end{tabular}
\end{frame}

\begin{frame}{Herkunft der hjkl-Tasten}
    % http://vintagecomputer.ca/wp-content/uploads/2015/01/LSI-ADM3A-full-keyboard.jpg
    \begin{center}
        \includegraphics[width=0.9\textwidth]{img/adm3a.jpg}
    \end{center}
\end{frame}

\begin{frame}{Homerow}
    % https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/QWERTY-home-keys-position.svg/1280px-QWERTY-home-keys-position.svg.png
    \begin{center}
        \includegraphics[width=0.9\textwidth]{img/homerow.png}
    \end{center}
\end{frame}

\begin{frame}{Text Objects --- Bewegung}
    Dateiinhalt wird nicht als Abfolge einzelner Zeichen betrachtet, sondern
    als \enquote{Wörter}:
    \begin{table}[h]
        \begin{tabular}{rl}
            \kbd{w}/\kbd{W} & Anfang eines Wortes/WORTES \\
            \kbd{e}/\kbd{E} & Ende eines Wortes/WORTES \\
            \kbd{b}/\kbd{B} & Vorheriges Wort/WORT
        \end{tabular}
    \end{table}
\end{frame}

\begin{frame}{Vim-Spiel}
    \url{https://vim-adventures.com/}
\end{frame}

\begin{frame}{Text Objects --- Selektion}
    % cheatsheet http://i.imgur.com/YLInLlY.png
    Operatoren:
    \begin{table}[h]
        \centering
        \begin{tabular}{rl}
            \kbd{d} & Löschen (delete) \\
            \kbd{y} & Kopieren (yank) \\
            \kbd{c} & Ändern (change) \\
            \kbd{v} & Markieren (visual)
        \end{tabular}
    \end{table}

    Modifikatoren:
    \begin{table}[h]
        \centering
        \begin{tabular}{rl}
            \kbd{a} & Alles, mit Leerzeichen (all) \\
            \kbd{i} & Inhalt, ohne Leerzeichen (inner) \\
        \end{tabular}
    \end{table}

    Bewegung (motion):
    \begin{table}[h]
        \centering
        \begin{tabular}{rl}
            \kbd{w}/\kbd{W} & Wort (ohne Satzzeichen)/WORT (mit Satzzeichen)\\
            \kbd{s} & Satz \\
            %\kdb{(} & Geklammerter Block
        \end{tabular}
    \end{table}
\end{frame}

\begin{frame}[fragile]{Text Objects --- Selektion --- Beispiele}
    \begin{itemize}
        \item \kbd{c}\kbd{a}\kbd{w}: change all word
        \item \kbd{c}\kbd{a}\kbd{W}: change all WORD
        \item \kbd{d}\kbd{i}\kbd{\}}: delete in \verb|{}|
        \item \kbd{v}\kbd{a}\kbd{)}: visual all \verb|()|
        \item \kbd{3}\kbd{d}\kbd{a}\kbd{w}: 3 $\times$ delete all word
    \end{itemize}
\end{frame}

\begin{frame}{Wiederholung von Kommandos}
    Per \kbd{.} kann das letzte Kommando wiederholt werden
\end{frame}

\begin{frame}{Anpassung/Einstellungen}
    \begin{itemize}
        \item Vim nutzt \url{~/.vimrc} \\
        \item Neovim nutzt \url{~/.config/nvim/init.vim}
        \item Beide nutzen selbe, simple Syntax
    \end{itemize}

    Unter \url{https://git.schneider-hosting.de/uni/vim-workshop} findet ihr
    eine Beispieldatei für den Anfang
\end{frame}

\end{document}
