From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Vim für Fortgeschrittene Status: RO Content-Length: 2194 Lines: 48 X-File: http://www.guckes.net/talks/vim/vim_advanced.txt = Vim für Fortgeschrittene = == Vim Advanced == Titel: Vim für Fortgeschrittene Untertitel: Reiter+Register, Tags+Textobjekte, Fenster+Viminfo Untertitel: Fenster+Reiter+Register+Tags+Textobjekte, Session+Viminfo Zielgruppe: Für jene, die den Vimtutor gelesen haben, mit ein paar Kommandos den Curors bewegen können, und ihren Text auch abzuspeichern wissen. Das sollte schon ausreichen, um die Kommandos in diesem Workshop hinzuzufügen. Abstract: "Barrieren einreissen". Eine grosse Barriere ist es ja immer wieder, dass man bei Programmen nach jeden Neustart wieder von vorne beginnen muss. Man sucht nach denselben Worten/Mustern, man gibt dieselbe Textbausteine wieder erneut sein. Wenn wir Vim aber nur anweisen, die bereits eingegeben Daten vor dem Beenden zu speichern, dann können wir das alles wiederverwenden. Und die Barriere des "alle nochmal machen" verschwindet dann so langsam - und spart Zeit! Beschreibung (kurz): Wir weisen Vim an von nun ab die Daten zu speichern. Wir machen uns Abkürzungen per "Tags", um immer wieder verwendete Dateien über ein Bookmark/Tag anzuspringen. Wir teilen den Bildschirm erst in Tabs und darin in Fenster ein, werden Texte in Clipboards/Registern speichern. Das ganze wird dann als "Session" gespeichert - und wieder aufgenommen. Dazu noch ein bischen die Daten durch externe Programme "filtern" und Textbausteine/Textobjekte schneller kopieren, löschen und verschieben. Das dürfte für alle, die Vim auch zu Editieren von Emails verwenden, sehr von Hilfe sein. Beschreibung (lang): Startet ihr den "vi" immer nur mit einer Datei - "vim dateiname"? Danach nur noch Speichern und sofort wieder Beenden? Und dann müßt ihr immer wieder dieselben Suchanfragen eintippen? Das ist schon ein bisserl mühsam, oder nicht? Wusstet ihr, dass der Vim 26 Register ("Clipboards") hat und sowohl Eure Kommandos und Suchanfragen als auch die Einteilung von Reitern und Fenster speichern und euch nach dem nächsten Start wieder zur Verfügung stellen kann? Leute - all das könnt ihr *wieder-ver-wenden*. Weniger Tippen - mehr Spaß! :-) Darum werden wir oft verwendete Texte (zB Begrüßung und Unterschrift, Telephonnummer, Signatur) in diese Register hineingeben und jene dann in der "viminfo datei" (~/.viminfo) speichern lassen. [Dazu reicht es, der Option "viminfo" noch ein "n" hinzuzufügen per ":set vi+=n". Das geben wir noch in die Setupdatei ("vimrc"), damit es beim nächsten Start wieder vorhanden ist.] Auch Befehle und Suchmuster, sowie die Liste der Puffer die lokalen und globalen Markierungen sind dann wieder verwendbar. \o/ Dann werden wir den Bildschirm in Reiter (Tabs) und diese in Fenster einteilen. [Mit ":mks!" schreiben wir diese Daten dann in die Datei "Session.vim". Vim wird jene dann beim Start mit "vim -S" wieder aufnehmen.] Die Einteilungen sind nach dem Start wieder da - und das Arbeiten kann weitergehen! Wenn noch Zeit ist, dann machen wir uns noch Abkürzungen per "Tags" (Bookmarks), um direkt auf Orte in Dateien zuzugreifen. Dann kann man mit ":tag pw" in die Passwortdatei springen, oder mit ":tag note" in die eigene Datei mit den Notizen. Ich verwende zB ":tag cal", um in meinen Kalender zu gehen. Und ratet mal, was ":tag todo" macht. ;-) Das dürfte für alle, die Vim auch zum Editieren von Code und Emails verwenden, sehr von Hilfe sein. Denn von nun an gilt: Der Vim rennt weiter - mindestens bis zum Logout - und innerhalb der window manager screen und tmux auch noch weiter: Bis zum nächsten Reboot. Für Logins auf einem Server heißt das: Bis zum nächsten Kernel update oder Tausch des RAM. Oder bis jemand im Rechenzentrum den falschen Stecker zieht. ;-) Und die Dateien (vimrc, viminfo, session file) können natürlich auch auf andere Maschinen mitgenommen und weiterverwendet werden. Hier ist der Plan: http://www.guckes.net/talks/vim/vim_advanced.txt Bitte probiert es aus und laßt mich wissen, ob ihr damit zurechtkommt. Hinweis: Bitte testet die Kommandos in diesem Text und sendet mir eine Rückmeldung - danke! :-) HINT: please try those commands herein and please do send me some feedback - thanks! :-) Beschreibung (OCG): Ziel: Die Wiederverwendung von Kommandos, Suchanfragen, die Liste der Dateien, Markierungen und Sprünge - sowie des Layouts, dh der Tabs (Reiter) und der Fenster darin. Dafür müssen wir nur der Option "viminfo" ein 'n' geben, und den Befehl ":mks" verwenden. Das war's auch schon. Beim Editieren werden wir auch diese Dinge verwenden: Textobjekte (Worte, WORTE, Sätze und Abaätze), Markieren von Texten per Visual Mode (Markieren von ganzen Zeilen, von rechteckigen Blöcken, sowie Anwendung von Kommandos auf denselben); Register (Clipboards), die Texte enthalten und Tags (Bookmarks) mit denen man in Dateien an bestimmte Stellen springen kann. Sie befinden sich hier: http://www.guckes.net/talks/vim/vim_advanced.txt http://www.guckes.net/talks/vim/vim_advanced.html Created: Sun Jan 8 23:42:05 CET 2017 Latest change: Mon Jun 26 03:42:23 CEST 2017 From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Fahrplan Status: RO Content-Length: 639 Lines: 29 = Fahrplan = == Outline == * Start * VimInfo * Tags * Fenster * Reiter (Tabs) * Textobjekte * Register == Hinweise == Kommende Events: 2017-02-10 Fr 18h Vortrag Richard Stallman an der TUB Architektur 2017-03-10/12 Fr/Sa/So Chemnitzer Linux-Tage: Turmbrauhaus, KSP, Workshops 2017-04-14/17 Fr-Mo EasterHegg in Mühlheim a.Rhein (nahe Frankfurt) 2017-05-25/28 Fr-So LUG Camp in Bredstedt 2017-08-04/08 Fr-Di SHA2017 Camp in Zeewolde (NL) Weitere Events -> http://cal.guckes.net == Publikum == ein paar Fragen: * Wer verwendet Vim? * Wer will am Workshop teilnehmen? * Wer hat ein Gerät mitgebracht? From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Weiteres Status: RO Content-Length: 655 Lines: 14 = Weiteres = == More == Eine Sessiondatei beinhaltet die folgenden Dinge: - Die History der Kommandozeile. | The command line history. - Die History der Suchanfragen. | The search string history. - Die History der Inputzeile. | The input-line history. - Inhalte der Register. | Contents of non-empty registers. - Marker in den Dateien. | Marks for several files. - Dateimarker. | File marks, pointing to locations in files. - Die Liste der Suchmuster. | Last search/substitute pattern (for 'n' and '&'). - Die Liste der Puffer. | The buffer list. - Globale Variablen. | Global variables. From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Start Status: RO Content-Length: 506 Lines: 24 = Start = == Boot == Vorbereitungen für einen effizienten Start. == zuhause == Hilfreiche Tools installieren: curl, wget screen, tmux mosh+ssh+scp bash, zsh Den "vimtutor" aufrufen, lesen und ausprobieren (ca 20min - 1h). $ vimtutor == workshop == Einen Sitzplatz auswählen, den Computer mit Strom verbinden, Computer booten, Einloggen, ein Terminal öffnen, dann screen oder tmux, und schliesslich Vim starten. Mit dem Netzwerk verbinden. dem Nachbarn "hallo" sagen. :-) "here we go..." From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Zusammenfassung Status: RO Content-Length: 87 Lines: 8 = Zusammenfassung = $ vim -u NONE vim ohne setupdatei starten :set nocp non-compatible :ls list all buffers q: open the command line window :q close that window q/ open the search string window :q close that window :set viminfo+=n :se vi+=n in die setupdatei schreiben -> ~/.vimrc Fenster: :e /etc/passwd Editiere Passwortdatei :split Aktuelles Fenster horizontal teilen :new Neues Fenster aufmachen :tabnew Mach ein neues Tab auf :e /usr/share/common-licenses/LGPL-3 LGPL Text editieren :vsplit Aktuelles Fenster vertikal teilen :new Neues Fenster aufmachen :enew neuen Puffer im aktuellen Fenster aufmachen :mks! Generiere eine Datei "Session.vim" From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Setup File vimrc Status: RO Content-Length: 327 Lines: 16 = Setup File vimrc = Einlesen eines minimalen Setups: :r http://www.guckes.net/Setup/vimrc.minimal Abspeichern als "vimrc" im "Heimatverzeichnis" ($HOME): :w ~/.vimrc Ausführen des Inhalts: :so % Wohlgemerkt: Wir müssen Vim eigentlich nicht verlassen. Es darf weiterlaufen bis der Rechner rebootet wird. ;-) From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: VimInfo Status: RO Content-Length: 2229 Lines: 71 = VimInfo = Die "Viminfo" ist eine Datei, in der all die Daten gespeichert werden, die sich im Laufe von Editing Sessions so ansammeln. Per Grundeinstellung wird keine Viminfo-Datei angelegt. Das sollten wir gleich mal ändern.. Erst ":set vi=" eingaben - und dann mal TAB drücken. Das sollte dann den aktuellen Wert der Option anzeigen. :set vi='100,<50,s10,h Der Cursor sollte dann am Ende der Zeile sein. Hier nun ein ",n" hinzufügen: :set vi='100,<50,s10,h,n Damit ist Vim angewiesen all die weiteren Infos zu speichern. Der Name der Datei ist "~/.viminfo". :help viminfo-n Die Zeichen "'" (tick), "<" (kleiner), "s" und "h" bedeuten: ' Markierungen, jumplist, changelist :help viminfo-' < max Zeilen für Register :help viminfo-< h hlsearch Effekt abschalten :help viminfo-h s max size für Register in Kilobyte :help viminfo-s In Worten: "Speichere die Markierungen, die jumplist und die changelist, sowie die Register mit maximal 50 Zeilen bzw 10KB, und schalte den hlsearch Effekt ab." Die Liste der Änderungen (changelist) und Sprünge (jumplist) kann kann man mit ":changes" und ":jumps" anzeigen lassen. TODO Markierungen erklären. TODO hlsearch erklären. Meine Einstellung ist diese: :set vi=<200,%,'200,/100,:100,@100,f1,h,n~/.vim/viminfo <200 max 200 Zeilen für Register '200 max 200 Markierungen, jumplist, changelist /100 max 100 Einträge der Suchmuster :100 max 100 Einträge der Kommandozeile @100 max 100 Einträge der Input-Line f1 Dateimarkierungen speichern h hlsearch Effekt abschalten n der Name der viminfo Datei == Aufgaben == * Die Option "vi" anpassen (mit einem "n" in der Liste), ein paar Kommandos und Suchen ausführen, vim beenden, und vim wieder neu starten. * Existiert die Datei ~/.viminfo nun? Mal mit "less" anschauen. * und dann nachsehen, ob die Daten auch wieder geladen wurden und verfügbar sind, zB ':' bzw '/' eingeben und mit PfeilHoch in der History zurückgehen === Hilfe === :help viminfo :help :changes :help :jumps :help hlsearch :help changelist :help jumplist From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Tags Status: RO Content-Length: 2287 Lines: 82 = Tags = "Tags" sind Abkürzungen (Bookmarks) für "Orte" in Dateien, zu denen man mit dem ":tags" Befehl springen kann. Legen wir mal ein tags-datei an. Ich nehme da "~/.vim/mytags": $ mkdir -p ~/.vim; cd ~/.vim; touch mytags Damit liegt die Datei schonmal im Verzeichnis ~/.vim, dass man sehr leicht zusammen kopieren kann, um es dann in den Account auf einem anderen Rechner zu kopieren. Dem Vim macht man diese Datei über die Option "tags" bekannt: :set tags=~/.vim/mytags Nun legen wir ein "Tag" an. Dieser besteht aus drei Teilen: tag: pw file: /etc/passwd command: $ Und die werden in die tagsdatei in einer Zeile eingetragen: pw /etc/passwd $ Wohlgemerkt: Die drei Angaben sind jeweils durch ein TAB voneinander getrennt: tagname TAB dateiname TAB kommando pw TAB /etc/passwd TAB $ Wenn man ":set list" einschaltet, dann sollte man die TABs als "^I" (CTRL-I) sehen: pw^I/etc/passwd^I$ Und mit ":set listchars=>." sieht man die TABs dann mit '>' beginnen - und die Zeichen in der Expansion als Punkte: pw>..../etc/passwd>....$ Nach dem Eintrag können wir nun das Tag verwenden: :tag tagname Beispiel: :tag pw Dieser Befehl öffnet mir die Passwortdatei /etc/passwd - und zwar am Ende der Datei, da das Kommando ":$" dorthin springt. Das Ganze kann man also lesen wie einen "bookmark", dh eine Abkürzung, die auf eine Datei verweist - zusammen mit einem auszuführenden Befehl. Vim erwartet, dass die Einträge sortiert sind, um so schneller ein Tag finden zu können. Aber solange man nicht hunderte davon hat, lohnt es sich nicht, die Datei zu sortieren. Also schaltet man das "tagbsearch" aus: :set notbs Damit ist Vim nun der Ort der eigenen Tagsdatei bekannt, und die Einträge zielen dann auf die Dateien - mitsamt den Kommandos, um den richtigen Ort anzuspringen. == Aufgaben == * Erzeuge ein Tag "h", das auf /etc/hosts zeigt und dort in die Zeile #3 springt. * Erzeuge ein Tag "v", das auf deine Vim Setupdatei (aka "vimrc") zeigt und dort auf die erste Zeile mit "NEU" springt. * Erzeuge ein Tag "b", das auf die Setupdatei deiner Login Shell "bash" (also "~/.bashrc") zeigt und dort in die Zeile #23 springt. === Hilfe === :help tags-and-searches From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Fenster Status: RO Content-Length: 1044 Lines: 31 = Fenster = == Windows == Es gibt einige Befehle, die Fenster öffnen, teilen, bzw verschieben. zB ":new", ":split", ":vsplit", sowie ":close" und ":quit". Einfacher geht das mit den Window Commands, die mit CTRL-W beginnen: :new edit a new buffer -> CTRL-W n :sp split buffer -> CTRL-W s :vsp split vertically -> CTRL-W v :only only this window -> CTRL-W o :close close window -> CTRL-W c :quit quit window -> CTRL-W q [2017-02-05] Der Unterschied zwischen ":close" und ":quit" ist: Ein ":close" kann das letzte Fenster *nicht* schliessen. Eventuell will man sich daher ":close" angewöhnen, damit man Vim damit nicht aus Versehen schliesst. ;) == Aufgaben == * Öffne ein neues Fenster, teile es mehrfach horizontal und vertikal, und schließe die Fenster wieder. * Bewege den Cursor in andere Fenster mit "CTRL-W hjkl". * Finde heraus was "CTRL-W f" bzw "CTRL-W F" macht. * Finde heraus was "CTRL-W HJKL" macht. TODO: Fenster vergrößern bzw verschieben === Hilfe === :help CTRL-W From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Reiter Status: RO Content-Length: 903 Lines: 38 = Reiter = == Tabs == Mit dem ":tabnew" Kommando öffnet man einen "Tab" aka "Reiter". :tabnew Innerhalb jedes Tabs kann man dieses mit den vorher beschriebenen Fensterkommandos diese "splitten" und arrangieren. Und mit den Kommandos ":tabprev" und ":tabnext" geht man zu dem Tab nach links bzw rechts. Am Anfang bzw am Ende der Tableiste geschieht dann jeweils ein "wrap around" zum Ende bzw Anfang. :tabnext :tabprev Schneller geht es mit den Befehlen "gt" für ":tabnext" und "gT" für ":tabprev". gt -> :tabnext gT -> :tabprev Ich habe mir "Bild^" (PgUp) und "Bildv" (PgDn) zum Wechseln zwischen den Tabs definiert: :map :tabp :map :tabn Und mit den folgenden Farbdefinitionen sehe ich die Titel besser: :hi tablinesel ctermbg=black ctermfg=yellow :hi tabline ctermbg=black ctermfg=green === Hilfe === :help tabpage :help key-notation From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Textobjekte Status: RO Content-Length: 1636 Lines: 50 = Textobjekte = == text objects == Vim kennt "Textobjekte", dh Wort, WORT, Satz und Absatz. Diese können einfach kopiert, gelöscht bzw geändert werden. Beim Kopieren sieht man keine Änderung, darum verwende ich in den Beispielen hier nur Löschung (Kommandos initiiert mit 'd') und Änderung (Kommandos initiiert mit 'c'). diw delete inner Word ciW change inner WORD Unterschied "Word" vs "WORD": "Words" bestehen aus den Zeichen, die in der Option "iskeyword" angegeben sind. Default ist "@,48-57,_,192-255" @ die Zeichen des Alphabets, "a-zA-Z" 48-57 die Ziffern 0 bis 9 _ der Unterstrich 192-255 À-ÿ (high-bit Zeichen) Unterschied "change" vs "delete": Bei "change" wird zwar genauso gelöscht, aber danach in den Insert Mode gewechselt. Also kann man gleich die Ersetzung tippen. Unterschied "inner" vs "all": dip delete inner paragraph dap delete all paragraph Bei "all" werden die nachfolgenden Leerzeilen mitgelöscht. Diese möchte man als "Trenner" zu anderen Absätzen mitnehmen, wenn man den Absatz dann woanders wieder einfügt. == Aufgaben == * Öffne /usr/share/common-licenses/GPL-3 (zB so: Platziere den Cursor auf den Dateinamen und tippe "gf"), dann liste alle Zeilen, die das Wort "freedom" enthalten (":g/freedom/nu"), springe zu einer dieser Zeilen (":22" oder "22G"), selektiere den aktuellen Satz ("vis"), kopiere diesen ("y"), öffne einen neuen Puffer ("CTRL-W n") und für den kopierten Satz dort ein ("p"). * Aktuellen Absatz ein- bzw ausrücken mit ">ip" und " http://cal.guckes.net -> Sven Guckes chemnitz2017@guckes.net GPG-Schlüssel: 8000R/EAB97F200185391B From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Kür Status: RO Content-Length: 164 Lines: 7 = Kür = == Filtering == Idee: Zeilenblock wird als Eingabe eines externen Kommandos gegeben - und dessen Ausgabe ersetzt dann die Eingabe. TODO: link From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Sessions File Status: RO Content-Length: 827 Lines: 29 = Sessions File = Eine "Session" ist eine Datei, die alle Einstellungen (Optionen) enthält - und dann noch einiges mehr, wie zB Mappings, die Liste der Puffer, die Fenster mit ihren Positionen, und globale Variablen. Einfach mal den Befehl ":mks" ("make session") aufrufen. Dieser sollte dann die Datei "Session.vim" erzeugen. Vim beenden - und erneut aufrufen. Dann das Session.vim mittels ":source" einlesen lassen zur Wiederherstellung. also so: :mks :qa $ vim :so Session.vim Für verschiedene Projekte kann man somit auch andere Layouts haben. == Aufgaben == * Ein paar Änderungen vornehmen. Fenster erzeugen - vergrößern und verkleinern. Andere Dateien laden. Dann mit ":mks vim-session" ein neue Session abspeichern. === Hilfe === :help session-file :help viminfo-file :help :mks From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: 2017-06-24 Tuebix Status: RO Content-Length: 451 Lines: 24 TUEBIX 2017-06-24 fragen+antworten: Wie kopiert man Text *in* die Kommandozeile? Text kopieren und dann per "register insert", "CTRL-R + Registername" aus dem Register holen, zB "CTRL-R 0". Wortzusammensetzung hand + schuh -> handschuh so werden worte schnell lang.. zB: Heizölrückstoßabdämpfung die Eingabe von langen Wörtern kann man sicher erleichtern mit Abkürzungen: iab YDD Donaudampfschifffahrtgesellschaftskapitaenwitwenrentengesetzzusatzparagraph Philipp Kammerer: "Vim: The First contact" page: http://www.tuebix.org/2017/programm/philipp-kammerer-vim-the-first-contact link: http://tinyurl.com/tuebix2017-vim-party Beispieldateien in der ownCloud suche+ersetze -> substitution -> :s :s/[fF]oo[0-9]/bar/ ":s" ersetzt nur in der aktuellen zeile. "substitution range" ("von,bis"): ":23,42s" ersetzte von zeile #23 bis zeile #42. ":1,$s" ersetzt von der ersten bis zur letzten zeile. ":%s" ersetzt von der ersten bis zur letzten zeile. "1,$" == "%" ":s" ersetzt per default nur den ersten treffer (first match) in jeder zeile. mithilfe des "flag" 'g' sucht man dann bis jeweils zum zeilenende "global" nach allen weiteren treffern. ":s/IN/OUT/g" nein, man kann keine minimale/maximale trefferanzahl angeben. (bei "sed" geht da aber.) mit dem flag 'c' wird man nach bestätigung (confirmation) gefragt. "global command" :g/re/p -> "grep" anwendung des globals commands: http://www.guckes.net/Setup/vimrc.forall http://www.guckes.net/Setup/vimrc.mine diese Dateien enthalten viele Kommentare. alle kommentierte zeilen kann man löschen mit dem "global command" ":g/^ *"/d" -> sehr viel kleiner! From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: TODO Status: RO Content-Length: 451 Lines: 24 = TODO = * grepping through all open buffers.. ":grep"? * Eine Setupdatei für diesen Workshop erzeugen * nützliche Einstellungen: :set hidden :set showcmd :set list listchars=tab:>_,trail:_ :read ~/.signature * Kommandos zum Schreiben+Beenden :w write into file :w! write! into file :wq write+quit :x write+quit ZZ write+quit :q quit current window :qa quit all windows :qa! quit all - no saving :q! quit - no saving ZQ quit - no saving From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Credits Status: RO Content-Length: 77 Lines: 5 = Credits = * Bjørn Bürger (master of penguins) - Korrekturlesen DANKE! :) From 2017-04-28-graz@guckes.net Fri Apr 28 15:45:00 2017 From: Vim Advanced Subject: Events Status: RO Content-Length: 740 Lines: 15 = Events = date: 2017-02-01 18-21h @BeLUG event: "Vim Advanced" - Berliner Linux User Group (BeLUG) place: http://www.in-berlin.de/space Lehrter Str. 53, 10557 Berlin url: http://www.belug.de/aktivitaeten-kalender/vim20170201.html contact: Sven Guckes 2017-02-01-belug@guckes.net announce: https://twitter.com/guckes/status/826483482285182977 date: 2017-03-11 Sat 14:00-17:00 Raum W3 event: "Vim Advanced" - Chemnitzer LinuxTage (CLT) "Barrieren einreissen" url: https://chemnitzer.linux-tage.de/2017/de/programm/beitrag/342 contact: Sven Guckes chemnitz2017@guckes.net announce: https://twitter.com/guckes/status/826483482285182977 textpad: https://titanpad.com/1tehwzCABd date: 2017-04-26 Wed 19-22h OCG.at Heinz-Zemanek-Saal event: "Vim für Fortgeschrittene" - url: http://luga.at/veranstaltungen/vim-2017-04-26/ contact: Sven Guckes 2017-04-26-luga-wien@guckes.net announce: https://twitter.com/guckes/status/854811976450670598 Ort: Österreichische Computer Gesellschaft (OCG) Wollzeile 1-3, 1010 Wien - 1. Stock http://www.osm.org/relation/2446068 Organisation: Linux User Group Austria (LUGA) www.luga.at http://luga.at/veranstaltungen/ textpad: https://events.titanpad.com/2016-04-26-vim-advanced date: 2017-04-28 Fri 15:45-17:45 Raum G.AP149.105 event: "Vim für Fortgeschrittene" - Grazer Linuxtage 2017 (GLT17) url: https://glt17-programm.linuxtage.at/events/241.html https://glt17-programm.linuxtage.at/speakers/159.html contact: Sven Guckes graz2017@guckes.net announce: https://twitter.com/guckes/status/... TODO textpad: TODO vim: set et fenc=latin1 ft=sven tw=999 nowrap: THPXRF EOF