#format rst :title: Vim-Plugins :author: DaMicha :css: https://wiki.hack-hro.de/talk_styles/assets/css/style2.css :description: Vim als Text Editor bietet von Haus aus schon eine große Vielfalt an Funktionen zum Erstellen und Bearbeiten von Texten jeglicher Art. Aber es geht noch doller. Vims Funktionalität lässt sich über Vim-Skripte ausbauen, die sich als Plugins einbinden lassen. In diesem Vortrag wird gezeigt wie sich mit Hilfe eines Plugin-Managers die Plugins verwaltet werden. Es werden einige Plugins vorgestellt, die den Umgang mit Vim erleichtern und dessen Funktionalität erweitern. Plugin Manager: pathogen Plugins: NERDTree, BufExplorer, gundo, VimWiki :data-scale: 0.7 :data-transition-duration: 1 __ attachment:.vimrc-basic __ attachment:.vimrc-pathogen ---- Übersicht ========= * Vim-Plugins Allgemein * Plugin Manager: pathogen * Plugins: * netrw * paren * BufExplorer * gundo * NERDTree * VimWiki ---- Vim Plugins im Allgemeinen ========================== * Plugins sind Vim Skripte die automatisch beim Vim Start geladen werden. * Die Skripte enden mit der Dateierweiterung ``*.vim.`` * Es gibt globale und dateityp spezifische Vim Skripte. * Die Skripte liegen in Unterverzeichnissen des Vim Installationspfades und des ``~/.vim`` Verzeichnisses im Nutzer Home. ---- Mögliche Skriptverzeichnisse ---------------------------- * ``plugin``: Vim Plugins * ``ftplugin``: dateityp spezifische Plugins * ``syntax``: dateityp spezifische Syntaxschemas * ``indent``: dateityp spezifische Indent-Definitionen * ``colors``: Farbschemas * ``autoload``: ermöglicht bei Bedarf das Laden von einzelnen Funktionsdefinitionen anstatt von kompletten vim Skripten * ``after``: Funktionen und Einstellungen, die nach dem Laden aller Plugins direkt vor der Anzeige des Buffers geladen werden * ``doc``: Dokumentationen zu Plugins (Zugriff über :help) * ... ---- Globale Plugins =============== Plugins sind nicht in Vim einkompiliert, werden aber automatisch beim Vim Start geladen. Aktive Plugins sind nicht einfach so anzeigbar, da sie aus einzelnen ``*.vim`` Skripte bestehen, die lediglich geladen werden. Stattdessen können die geladenen ``*.vim`` Skripe aufgelistet werden. :: :scriptnames Zeigt die geladenen Skripte in der Reihenfolge in der sie geladen wurden. ---- Standard Plugins ---------------- Werden automatisch geladen. Liegen im Vim-Installationspfad unter ``plugin``. * netrw: stellt einen Dateibrowser zur Verfügung und ermöglicht den Zugriff auf Dateien über das Netzwerk. * paren: Zeige zugehörige Klammern Vim-Installationspfad anzeigen: :: :echo $VIMRUNTIME ---- User Plugins ------------ Installationpfad im Nutzerverzeichnis: ``~/.vim/plugin`` (Unix/Linux, Mac OS X) Zur besseren Organisation sind Unterverzeichnisse für Plugins erlaubt. ---- filetype Plugins ================ Erweitern Vim um Funktionalitäten abhängig vom Filetyp einer geöffneten Datei. Wird aktiviert mit: :: :filetype plugin on ---- Standard Plugins ---------------- Installationspfad: ``/ftplugin`` ---- User Plugins ------------ Installationspfad: ``~/.vim/ftplugin`` ---- autoload ======== Verzeichnis das Vim-Skripte enthält, die direkt mittels: :: call scriptname#function(param) aufgerufen werden können. ---- Einfache Vim Konfiguration ========================== ``.vimrc`` :: syntax on " syntax highlighting filetype indent on " activates indenting for files " backspace in insert mode works like normal editor. allow backspace over: set backspace=indent,eol,start " indenting set smartindent " indenting as function of filetype set autoindent " std. auto indenting " wild mode for tab completion in command mode: like in the bash set wildmode=longest,list `vimrc-basic`__ ---- Vim interne Plugins =================== * netrw * paren ---- netrw ===== Zugriff auf Dateien über das Netzwerk: *Beim Vim-Start*: :: vim scp://[user@]hostname//path/to/file ---- *Innerhalb von Vim*: * Datei editieren. Hier über scp :: :e scp://[user@]hostname//path/to/file * Datei schreiben: Hier über ftp :: :w ftp://[user@]hostname//path/to/file * Browsen im Filesystem: :: :e . ---- paren ===== Hebt zugehörige Klammern hervor. ---- Vims User Plugins ================= * pathogen * NERDTree * BufExplorer * gundo * VimWiki ---- pathogen ======== Ein Vim Plugin Manager. Es wird empfohlen einen Plugin Manager zu nutzen, da die meisten Plugins sich in den Vim Konfigurationspfaden verteilen. Mit Hilfe eines Plugin Managers wird jedes Plugin in ein eigenes Unterverzeichnis installiert. Bei pathogen werden die Plugin-Verzeichnisse in das ``~/.vim/bundle`` Verzeichnis installiert. Das pathogen Plugin selbst, wird in das ``~/.vim/autoload`` installiert. ---- Installation laut pathogen README: :: mkdir -p ~/.vim/autoload ~/.vim/bundle && \ curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim Der folgende Aufruf startet pathogen und lädt alle Plugins, die in dem ``bundle`` Verzeichnis installiert sind. :: execute pathogen#infect() ---- Zusätzliche Konfigurationen um Syntaxhighlighting, Plugins und Indent Konfigurationen zu aktivieren: :: syntax on filetype plugin indent on Die aktuelle filetype Konfiguration kann mit :: :filetype ausgegeben werden. ---- Snippit für die ``.vimrc`` :: " load pathogen execute pathogen#infect() syntax on " syntax highlighting filetype plugin indent on " activates plugins and indenting for files `vimrc-pathogen`__ ---- Später, sobald ein neues Plugin in das ``~/.vim/bundle`` Verzeichnis installiert wurde, sollte: :: :Helptags aufgerufen werden, um die Plugin-Dokumentation verfügbar zu machen. ---- Ergebnis der pathogen Installation prüfen: Wie sieht ``filetype`` und welche Skripte wurden geladen? - ``:filetype`` - ``:scriptnames`` ---- NERDTree ======== Komfortabler Datei-Browser. * Zeigt Dateien und Verzeichnisse in hierarchischer Baumstruktur an. * Unterstützt Lesezeichen. * Unterschiedliche Farben für verschiedene Strukturelemente wie Dateien, Links, Verzeichnisse, u.a. * Einfache Tastaturkommandos zum Navigieren ---- Installation ------------ Installationsanweisung von: http://www.vim.org/scripts/script.php?script_id=1658 -> besser den Vim-Plugin-Manager-Ansatz nehmen. Git Repository in das ``bundle`` Verzeichnis installieren: :: cd ~/.vim/bundle git clone https://github.com/scrooloose/nerdtree.git Vim starten und Hilfe aktualisieren: :: :Helptags ---- Benutzen -------- NERDTree öffnen/schließen: - ``:NERDTree`` - Side-by-Side Ansicht öffnen - ``q`` - NERDTree schließen - ``e .`` - Aktuelles Verzeichnis im aktuellen Fenster öffnen. Hilfe: - ``?`` - Kurzhilfe anzeigen und verstecken ---- Navigation: - Cursortasten oder hjkl-Tasten - ``o``, ```` - Verzeichnis öffnen und schließen - ``O`` - Verzeichnis rekursiv öffnen - ``x`` - übergeordnetes Verzeichnis schließen - ``p`` - das Übergeordneten Verzeichnis anwählen - ``P`` - die Basis des Verzeichnisbaumes anwählen ---- Datei zum Editieren öffnen: - ``o``, ```` - Datei öffnen - ``t`` - Datei in neuen Tab öffnen - ``s``, ``i`` - Datei im vertikalen oder horizontalen Split öffnen ---- Bookmarks: - ``B`` - Lesezeichen anzeigen - ``o``, - zu Lesezeichen springen - ``:Bookmark `` - neues Lesezeichen erstellen - ``D`` - Lesezeichen löschen Arbeitsverzeichnis wechseln: - ``u`` - die Baumwurzel auf deren übergeordnetes Verzeichnis setzen - ``C`` - Ändere Basis des Verzeichnisbaumes im NERDTree - ``cd`` - setzte Arbeitsverzeichnis neu Ansicht: - ``I`` - versteckte Dateien anzeigen oder wieder verstecken ---- BufExplorer =========== Listet die Vim Buffers und ermöglicht die einfache Auswahl eines der Buffer. Normales arbeiten mit Buffer: - ``:buffers`` - Liste vorhandene Buffer - ``:b[uffer] [N]`` - bearbeite Buffer N - ``:bn[ext]`` - wähle nächsten Buffer - ``:bp[rev]`` - wähle vorherigen Buffer - ``:bd[elete] [N]`` - schließt Buffer N ---- Installation ------------ Auch hier, das Git Repository in das ``bundle`` Verzeichnis installieren: :: cd ~/.vim/bundle git clone https://github.com/jlanzarotta/bufexplorer.git Vim starten und Hilfe aktualisieren: :: :Helptags ---- Benutzen -------- BufExplorer öffnen/schließen: - ``:BufExplorer`` oder ``\be`` - öffnen und vorhandene Buffer anzeigen - ``q`` - BufExplorer schließen Hilfe: - ``F1`` - Kurzhilfe anzeigen und verstecken ---- Navigation: - Cursortasten oder hjkl-Tasten - ``o``, ```` - Buffer öffnen - ``t`` - Buffer in neuem Tab öffnen - ``d`` - Buffer schließen ---- gundo ===== Vim legt nicht nur eine lineare Editier-History an, sondern speichert die Änderungen in einen Baum, so dass sämtliche gemachten Änderungen wiederhergestellt werden können. Arbeiten mit der Vim-Editier-History: - ``u`` - (undo) letzte Änderung rückgängig machen - ``Ctrl-R`` - (redo) eine Rückgängig gemachte Änderung zurücknehmen - ``:undolist`` gundo hingegen zeigt den Vims History-Baum und lässt den Nutzer durch die History browsen. ---- Installation ------------ Git Repository in das `bundle` Verzeichnis installieren: :: cd ~/.vim/bundle git clone http://github.com/sjl/gundo.vim.git Vim starten und Hilfe aktualisieren: :: :Helptags ---- Benutzen -------- Öffnen/Schließen: - ``:GundoShow`` - öffnen - ``:GundoToggle`` - öffnen/schließen - ``:GundoHide``, ``q`` - schließen Navigation: - Cursortasten oder jk-Tasten - ``o``, ```` - Änderung auswählen ---- Zusätzliche Undo Konfiguration ------------------------------ - ``undofile`` - Lege Undo-Dateien an - ``undodir`` - Verzeichnis für undo Dateien :: " undofile and undodir settings if exists("+undofile") " undofile - This allows you to use undos after exiting and restarting. " This uses .vim-undo first, then ~/.vim/undo " :help undo-persistence " This is only present in 7.3+ if isdirectory($HOME . '/.vim/undo') == 0 :silent !mkdir -p ~/.vim/undo > /dev/null 2>&1 endif set undodir=./.vim-undo//,~/.vim/undo// set undofile endif ---- vimwiki ======= Unterstützt das Anlegen und Verwalten von Projektdokumentationen. Funktionalität: * Benutzt eigenen aber einfachen Markdown Syntax. * Einfaches Anlegen und Verwalten von ToDo-Listen. * Komfortables Erstellen und Bearbeiten von Tabellen. * VimWiki Dokumente können untereinander verlinkt werden. * Aus den VimWiki Dokumenten können HTML Seiten generieren werden. ---- Installation ------------ Git Repository in das ``bundle`` Verzeichnis installieren: :: cd ~/.vim/bundle git clone https://github.com/vimwiki/vimwiki.git Vim starten und Hilfe aktualisieren: :: :Helptags ---- Benutzen anhand eines Beispiels ------------------------------- *Markdown* - Syntax: :: = Header1 = == Header2 == === Header3 === *bold* -- bold text _italic_ -- italic text * Bullet List Item - Bullet List item - Bullet List item ---- *Markdown* - Syntax: :: [[VimWiki-Link|Bescheibung]] | Nummer | Beschreibung | |--------|--------------| | 1 | Eins | | 2 | Zwei | ---- Als Beispiel ein neues Projekt anlegen. Datei: ``readme.wiki`` *Überschrift und Beschreibung* einfügen. Überschriften lassen sich mittels ``=`` und ``-`` in ihrer Hierarchiestufe festlegen. Hier mal die Projektbeschreibung als *fetter* Text. ---- *TODO Liste anlegen*: - Unterseite für - Liste - Tabelle - HTML generieren ---- Checkboxen in Listen -------------------- Checkboxen zur TODO Liste hinzufügen: - ```` - Checkbox an, toggle Status: offen, erledigt - ``gl`` - Checkbox entfernen Hierarchieebene des Listeneintrag ändern: - ``gll`` - Listen Eintrag nach Rechts verschieben (``gLl`` - mit Untereinträgen) - ``glh`` - Listen Eintrag nach Links verschieben (``gLh`` - mit Untereinträgen) ---- Unterseite für Liste anlegen ---------------------------- Seite erstellen: und Verlinkung zeigen. - ````, ``+`` auf Wort oder Markierung - Link anlegen - ```` auf Link - Link folgen - ```` - Seite zurück gehen - ````, ```` - gehe zum nächsten oder vorherigen Link der Seite Liste mit ``-``, ``*`` und Nummern erstellen. ---- Unterseite für Tabelle anlegen ------------------------------ Seite erstellen. Einfache Tabelle manuell erstellen. :: | Nr | Name | |----|------| | 1 | eins | | 2 | zwei | ---- Sich zwischen den Zellen bewegen (im Insert Mode): - ```` - nächste Zeile, oder neue Zeile erstellen - ```` - zur nächsten Zelle springen - ```` - zur vorherigen Zelle springen Die Größe der Zellen wird automatisch an deren Inhalt angepasst. ---- Tabelle mit 3 Spalten und 4 Zeilen erstellen. :: :VimwikiTable 3 4 Lässt sich dann füllen mit: :: | Nr | Name | Beschreibung | |-----|------|--------------| | 1 | eins | ne eins | | 2 | zwei | ne zwei | | ... | | | | | | | ---- HTML generieren --------------- generieren: :: :Vimwiki2HTML :VimwikiAll2HTML generieren und im Browser aufrufen: :: :Vimwiki2HTMLBrowse ---- Extra Konfigurationen ===================== Zum einfacheren Aufrufen der Plugin-Funktionen. :: nmap \g :GundoToggle nmap \n :NERDTreeToggle " \bs, \be, .. Are already used by BufExplorer nmap \bb :b# Alternativ können die Funktionen auf die -Tasten gemappt werden.