\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\\{marcel@webschneider.org}}
\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 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}{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}
\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|()|
    \end{itemize}
\end{frame}
\end{document}
