Verschiedene Undo- und Redo-Möglichkeiten für Vim

31. Mai 2009 von

Neben den Standardvarianten, die jeder Editor beherrscht bietet vim noch mehr Kommandos für Undo und Redo. Die beiden geläufigsten Kommandos sind wohl u für Undo und Strg+r für Redo, die beide mit Quantifizierern aufgerufen können (z.B. 3u nimmt 3 Änderungen zurück). Mit U nimmt man alle letzten Änderungen der aktuellen Zeile zurück.

Einige kennen vielleicht das Problem, wenn man etwas mit Undo Rückgängig macht und dafür etwas anderes hinschreibt und irgendwann möchte man in den Zustand vor dem Undo zurück. Doch das ist mit den beiden “Standardkommandos” nicht möglich. Daher gibt es bei Vim die Befehle g- und g+, sie gehen zeitlich gesehen je einen Zustand zurück oder vor und können ebenfalls mit Quantifizierern verwendet werden.

Ein Beispiel:
Man schreibt folgenden Satz wobei man nach jedem Wort ESC drückt, damit jedes Wort per Undo zurückgenommen werden kann:

Dies ist ein Beispiel

Nun nimmt man mit u das letzte Wort zurück und ersetzt es mit dem Wort “Test”.

Dies ist ein Test

Jetzt kann man mit u und Strg+r zwar jedes Wort zurück nehmen und wieder setzen, aber man kommt nicht zum ersten Satz mit “Beispiel” zurück. Drückt man statt dessen g-, wird zum ersten Satz mit “Beispiel wieder hergestellt (solange vorher nicht u gedrückt wurde, sonst muss man mit g+ arbeiten).

Vim speichert die Undo und Redo Schritte in einer Baumstruktur, wobei Undo nur eine Stufe höher geht und Redo in den jeweils neuesten Zweig. Dadurch kommt man im obigen Beispiel mit diesen Kommandos nicht mehr in den Zweig, wo der Text das Wort “Beispiel” enthielt. g+ und g- hingegen traversieren den gesamten Baum, wodurch jeder Zustand, der einmal existierte hat wieder hergestellt werden kann.

Ähnlich funktionieren die Kommandos :earlier und :later. Sie haben ohne Argument (oder nur mit Quantifizierer wie z.B. :earlier 3) die gleiche Funktionen wie g+ und g-. Man kann ihnen aber auch Zeitangaben in Sekunden, Minuten und Stunden mitgeben, zu denen gesprungen werden kann:

  • :earlier 30s – springt zum Zustand,der vor 30 Sekunden herrschte.
  • :earlier 5m – stellt den Zustand von vor 5 Minuten wieder her.
  • :earlier 2h – läd den Zustand von vor 2 Stunden.
  • :later 20m – Zeigt den Text, wie er 20 Minuten später aussah.

Das Kommando later kennt natürlich auch die Sekunden- und Stundenangaben.

Mit dem Befehl :undol bzw. :undolist kann man sich die Liste aller Änderungen anzeigen lassen. Dabei werden einem alle Zweige des Baumes aufgelistet und angegeben wieviele Änderungen es in dem Zweig gab sowie der Zeitpunkt, an dem die Änderung gemacht wurde.

zInformatik ist jetzt auch bei Twitter

24. Mai 2009 von

Ich glaub es selbst kaum, aber ich bn jetzt bei Twitter. Vor einigen Wochen noch habe ich mir noch gesagt, dass ich sowas wohl nie machen werde und die Leute nicht verstehe, die da öffentlich ihr Leben ausbreiten (das ist auch der Grund warum ich sonst in keinem sozialen Netzwerk Mitglied bin).
Vor einem knappen Jahr hatte ich mir Twitter mal angesehen, ein paar sinnlose Dinge reingeschrieben und es dann gelassen.
Dann vor einigen Monaten las ich darüber, dass man Twitter auch dazu nutzen könnte, sich über interessante Neuigkeiten und ähnliches zu informieren. Mein Problem dabei war jedoch, dass ich nur Twitterer/Tweeter/Tweets (oder wie die Leute auch immer heißen, die twittern bzw. deren Mikroblogs, ich nenn sie jetzt mal Tweeter, da ein Tweet afaik ein einzelner Twitter-Eintrag ist) gefunden habe, die auf Twitter ihr Leben ausbreiten oder mit anderen Leuten am Chatten sind. Somit habe ich dann endgültig für mich beschlossen, das Twitter nichts für mich ist – dachte ich.

Gestern Abend fragte meine Freundin, ob ich ihr nicht Twitter einrichten könne, da sie gehört hat, dass dies mehr Besucher auf ihrem Blog bringen soll. Man kann nämlich mit dem Plugin Twitter Tools automatisch die Überschriften seiner Blogbeiträge twittern.
Das habe ich ihr natürlich gleich eingerichtet und dabei ist mir die Idee gekommen, wofür ich twitter sinnvoll nutzen könnte.
Einmal natürlich als RSS-Ersatz, für Leute, die lieber über Twitter informiert werden statt RSS.
Zum anderen kann ich dort interessante Webseiten und kleine Tipps Posten, die für einen Blogeintrag nicht reichen.

Und genau dies habe ich nun angefangen. Ich nahm meinen alten Twitter-Account und habe mir auch das Twitter Tools Plugin installiert. Nun schreibe ich alle möglichen Tipps und Tricks, die mir so unterkommen sowie Webseiten und interessante Blogposts auf Twitter. Diese werden auch auf dem Blog in der Sidebar angezeigt (dies wird auch von Twitter Tools unterstützt). Wie lange und wie regelmäßig ich so twittern werde kann ich noch nicht sagen, ich probiere es erstmal aus.

Allerdings habe ich immer noch das Problem, Tweeter zu finden, die überwiegend interessante Dinge posten und weniger darüber erzählen, was sie gerade so tun (Kaffee holen, Programmieren, …). Wenn jedoch nur Blogeinträge getwittert werden, so abonniere ich mir lieber den RSS-Feed des Blogs. Einige habe ich schon gefunden. Wenn jemand noch mehr kennt, würde ich mich über einen Kommentar darüber freuen.
Bisher finde ich folgende Tweeter recht interessant:

  • http://twitter.com/ChrisZwitschert – schreibt viel über News rund um die IT-Welt sowie Tipps. Schwerpunkt auf Ubuntu/Linux
  • http://twitter.com/peddy76 – hat zwei Mal meinen Blog verlinkt :-) und schreibt meist über Vim. Twittert aber nur, wenn es wirklich was zu sagen gibt.
  • http://twitter.com/aptgetupdate – Twittert auch viele IT-News
  • zInformatik ist nun bei Twitter unter http://twitter.com/zInformatik erreichbar

    [UPDATE]Ist manchmal garnicht so leicht etwas in 140 Zeichen auszudrücken.
    Ich werde wahrscheinlich – wie schon in den Kommentaren erwähnt – die Twitterbeiträge Teilweise in Blogbeiträgen zusammen fassen (z.B. zu einem 2. Teil der Vim Tipps) oder etwas genauer auf einige Dinge eingehen.
    Wer sich nicht bei Twitter anmelden möchte um mir zu folgen, kann dort auch den RSS-Feed Abonnieren (in der Seitenleiste).[/UPDATE]

Less is more (than more) – weniger ist manchmal mehr

23. Mai 2009 von

Viele kennen less, das Programm zum Anzeigen von Textdateien. Ich habe es mir nun einmal etwas genauer angesehen.
Mit less lassen sich auch große Textdateien sehr schnell anzeigen, da es schon mit der Darstellung des Textes beginnt, wenn die Datei noch nicht vollständig geladen ist.
Auch zum Anzeigen von Kommandozeilenausgaben ist less sehr nützlich. Dafür braucht man die Ausgabe nur in less zu pipen, z.B. so:

ls -lh | less

Die vim-User wird es freuen, dass viele Kommandos die gleichen wie bei vim sind oder ihnen zumindest ähneln.

Navigation
Navigieren kann man in less neben den Pfeiltasten wie in vim mit h,j,k und l. (Strg+)u und (Strg+)d sowie (Strg+)f und (Strg+)b haben die Funktion, halbe bzw. ganze Bildschirmseiten herunter und hoch zu springen. Die Strg-Taste ist dabei optional. Auch mit Space kann man einen Bildschirm herunter scrollen.
g springt zum Anfang und G zum Ende des Dokuments.

Man kann sich auch anzeigen lassen, welche Zeile die erste ungelesene im Text ist, wenn man mehr als eine Zeile hinunter scrollt. Diese wird dann markiert. So findet man schnell die Stelle wieder, an der man aufgehört hat zu lesen. Dazu startet man less mit der Option -W.

Less kennt auch Markierungen wie vim. Allerdings sind diese immer Dateiübergreifend und es können nur Kleinbuchstaben genutzt werden. Mit m{Marke} (wobei {Marke} ein Kleinbuchstabe ist) kann eine Zeile Markiert werden und mit {Marke} zu ihr hingesprungen werden ( ist das Hochkomma mit Shift+#). Mit (zwei Hochkommata)kann man zwischen zwei Markierungen hin- und her springen.

Anzeigen von mehreren Dateien
Indem man less mehrere Dateinamen als Argumente übergibt, kann man sich auch viele Dateien anzeigen lassen. Zwischen den Dateien springt man mit :n (zur nächsten) und :p (zur vorherigen). Natürlich kann man auch die Markierungen nutzen um zwischen den Dateien zu springen. Um aus less heraus eine neue Datei zu öffnen, kann man :e <Dateiname> eingeben. Mit :x gelangt man zur ersten Datei, während man mit :d die aktuelle Datei schließt.

Suchen im Dokument
Die Suche bei less funktioniert wie bei vim mit /<Suchpattern>. Mit n und N kann man zum nächsten bzw. vorherigen Treffer springen. Um die bei der Suche Groß- und Kleinschreibung zu ignorieren startet man less mit der Option -i. Dies entspricht der intelligenten Suche, die Groß- Kleinschreibung nur dann beachtet, wenn im Suchbegriff auch Großbuchstaben vorkommen. -I entspricht dann einem wirklichen ignore-case.
Wie in vim wird mit ? in die entgegengesetzte Richtung gesucht.

Coole Funktionen
Less wäre nicht more wenn es nicht mehr gäbe.
Alle Aufrufoptionen (die, die mit - anfangen) lassen sich auch einfach bei laufendem Programm eingeben (einfach eintippen), während Kommandos beim Aufruf durch ein vorangestelltes + mitgegeben werden können (z.B. öffnet less +G <Dateiname> eine Datei und springt sofort ans Ende).

  • Mit v öffnet man vim mit der aktuellen Datei. (Bzw. den in der Umgebungsvariablen EDITOR angegebenen Editor)
  • Mit F wird ans Ende der Datei gesprungen und diese bei jeder Änderung aktualisiert. Damit kann man sehen, wenn etwas z.B. in Logdateien hinzukommt. Dies entspricht einem tail -f. Zurück zm normalen Modus kommt man mittles Strg+c
  • Mit der Option -M gibt less mehr Informationen (Zeilennummer und Länge sowie relative Position im Dokument) aus.
  • Die Funktion = gibt noch mehr Informationen aus.
  • Die Option -e veranlasst less dazu sich zu beenden, sobald das Dateiende zwei mal erreicht wurde. Mit -E wird less schon beim ersten Erreichen des Dateiendes geschlossen.
  • Sehr praktisch finde ich auch die Option -F, bei der sich less automatisch schließt, wenn der Text auf eine Bildschrimseite passt. So wird der Text ausgegeben und less dann beendet.
  • Durch !<Kommando> kann man ein Shell-Kommando ausführen, wobei man die Variable % für den aktuellen Dateinamen nutzen kann.
  • Mit s <Dateiname> wird (wenn man sich die Ausgabe eines Programms anzeigen lässt) die Ausgabe in der angegebenen Datei gespeichert.
  • Durch die Option -R zeigt less auch die Farben an, wenn man ein grep oder ls mit der option –colors=always hinein piped.

Eigene Tastenkombinationen definieren
Less hat auch eine eigene Konfigurationsdatei: ~/.less mit der man eigene Keybindings definieren kann.
Diese wird im Format Keybinding Action angegeben, wobei jede Zeile nur ein Keybinding besitzen darf.
Beispiele und mögliche Keys und Aktionen findet man in der manpage zu lesskey.

Eigenen Prompt definieren
Statt der Option -M kann man sich auch einen eigenen Prompt mit der Option -P definieren. Dafür gibt es jede Menge Variablen und Abfragen, dass man z.B. nur dann den Dateinamen ausgibt, wenn auch eine Datei gelesen wird und nicht von STDIN. Hier ein Beispiel:

?f%f:Standard input

gibt den Dateinamen aus oder “Standard input” wenn ein Kommando in less gepiped wurde.
Die ganzen Variablen und Abfragen sind in der manpage dokumentiert.

Preprozessor-Funktionen
Ich möchte noch kurz erwähnen, dass man für less Funktionen definieren kann, die vor dem Öffnen eines bestimmten Dateityps ausgeführt werden. So kann man z.B. eine Datei zuerst entschlüsseln oder dekomprimieren, bevor man sie anzeigen lässt. Eine entsprechende Funktion, der vor dem Schließenausgeführt wird um z.B. temporäre Dateien zu löschen kann ebenfalls definiert werden.
Weitere Infos dazu gibt es in der manpage.



Weitere Funktionen und Informationen bekommt zu less man wie immer in der manpage.

Das Hubble Space Telescope HST – Ein Weltraumteleskop im All

21. Mai 2009 von
Hubble Space Telescope im Februar 1997

Hubble Space Telescope im Februar 1997

Das Hubble Space Telescope ist ein Gemeinschaftsprojekt der NASA und ESA. Es wurde 1990 in eine Umlaufbahn in Höhe von 590 km gebracht und wird (aufgrund der letzten Servicemision vor einigen Tagen) noch bis mindestens 2014 in Betrieb bleiben. Aufgrund seiner Bahnneigung (28,45°) ist es von Mitteleuropa aus leider nicht zu sehen.

Der Vorteil von Weltraumteleskopen gegenüber den hier auf der Erde existierenden ist, dass es keine atmosphärischen Störungen gibt. So wird von der Atmosphäre das Ultraviolette und Infrarote Spektrum zum Teil ausgefiltert. Auch Störungen durch Luftbewegungen erschweren die Beobachtungen auf der Erde.

Technische Daten
Das HST ist zylinderförmig und hat eine Länge von 13,1 Meter mit einem Durchmesser von 4,3 Meter. Es wiegt 11,6 Tonnen. Der Durchmesser des Hauptspiegels beträgt 2,4 Meter, wodurch eine effektive Brennweite von 57,6 Metern erreicht wird. Solarzellen sichern die Stromversorgung von 2800 Watt.
6 Gyroskope dienen der Lageregelung. Daneben dienen 3 Sternensensoren (Fine Guidance Sensors FGS) der Ausrichtung. Das Teleskop wurde so konstruiert, dass Reparaturen sowie das Einsetzen neuer Gräte durch bemannte Servicemissionen möglich ist.

Aufbau des Hubble Teleskops

Aufbau des Hubble Teleskops - Bild: Andrew Buck (Quelle: Wikimedia Commons)

Das HST kann 5 wissenschaftliche Instrumente aufnhemen und verfügt derzeit über folgende:

Wide Field Camera 3

Wide Field Camera 3

  • Wide Field / Planetary Camera 2 (WFPC-2) – bestehend aus 4 800×800 Pixel CCD-Sensoren (nun durch WFC-3 ersetzt)
  • Wide Field Camera 3 (WFC-3) – bestehend aus 2 2048×2048 Pixel CCD-Sensoren
  • Near Infrared Camera and Multiobject Spectrometer (NICMOS) – mit Kameras und Spektrometer für den nahen Infrarot-Bereich
  • Space Telescope Imaging Spectrograph (STIS) – Ein Spektrograph, der während der letzten Servicemission repariert wurde. Ob er nun wieder funktioniert ist noch nicht klar.
  • Advanced Camera for Surveys (ACS) – das meistgenutzte Instrument
  • Cosmic Origins Spectrograph (COS) – Ein Spektrograph, der das Licht im ultravioletten Bereich analysieren kann und STIS ergänzen soll.

Probleme und Servicemissionen
Durch eine Abweichung des Spiegels von 2,5µm zum Rand hin lieferte das Teleskop bis 1993 nur sehr unscharfe Bilder. Ein neues Spiegelsystem (Corrective Optics Space Telescope Axial Replacement COSTAR) konnte diesen Fehler jedoch ausgleichen.

2 Aufnahmen der Galaxie M100 links ohne und rechts mit COSTAR

2 Aufnahmen der Galaxie M100 links ohne und rechts mit COSTAR

Dieses System wurde auf der ersten Wartungsmission im Dezember 1993 eingebaut. Auch die WPFC-2 wurde auf dieser Mission installiert.

Danach gab es noch 4 weitere Servicemissionen, von denen die letzte am 11. Mai 2009 startete. In dieser Mission wurden die Batterien und Gyroskope gewechselt sowie neue Instrumente angebracht. Dabei wurde COSTAR durch den Spektographen COS ersetzt, da nun alle Geräte selbstständig den Spiegelfehler korrigieren können. In dieser Mission wurde die WPFC-2 durch die WFC-3 ersetzt. Auch STIS wurde repariert, hat sich beim Funktionstest jedoch in einen Wartungsmodus geschaltet weil die Temperatur zu stark abgesunken ist. Ein weiterer Test soll folgen.

Bilder
Das Hubble-Teleskop hat eine Reihe beeindruckender Bilder geschossen. Viele Bilder von Nebeln in Star Trek sind nicht am Computer generiert sondern stammen von Hubble. Nebel finde ich persönlich auch am schönsten anzuschauen.

Die wohl bekanntesten Bilder, die Hubble je erstellt hat sind wohl das Hubble Deep Field und Das Hublle Ultra Deep Field. Das sind die tefsten Bilder unseres Universums, die je aufgenommen wurden. Das Hubble Deep Field wurde innerhalb von 10 Tagen im Dezember 1995 aufgenommen. Dafür hat ein Wissenschaftler seine gesammte zur Verfügung stehende Zeit zur Benutzung des Teleskops auf dieses Bild verwendet.

Hubble Deep Field mit eingezeichneten Sensoren

Hubble Deep Field mit eingezeichneten Sensoren

Es ist ein winziger Ausschnitt in der Nähe des großen Bärens, welches von jedem Punkt in der Umlaufbahn von Hubble gesehen werden konnte. Die 342 Einzelbilder wurden mit jedem Sensor der WPFC-2 aufgenommen. Die Belichtungszeit betrug insgesammt ca. 100 Stunden. Dieses Bild wurde sehr populär in der gesammten Astonomischen gemeinschaft. Es beinhaltet über 3000 klar erkennbare Galaxien. Über 400 wissenschaftliche Artikel wurden über dieses Bild und dessen Interpretation geschrieben.
Die ca 2 MB große Datei des ca. 3000×3000 Pixel Bildes kann in den Wikimedia-Commons heruntergeladen werden. (Ob es noch eine größere Version gibt weis ich nicht, ich habe keine gefunden.)

Aufgrund der großen Bedeutung des Deep Fields wurde neben dem Hubble Deep Field South (welches mit der WPFC-2 eine von der Südhalbkugel der Erde sichtbare Region abbildet) das Hubble Ultra Deep Field von September 2003 bis Januar 2004 generiert. Dieses wurde mit den beiden Instrumenten ACS (ingesammt 11,3 Tage Belichtungszeit) und NICMOS (insgesammt 4,5 Tage Belichtungszeit) aufgenommen. Es ist das tiefste Bild des Universums was im sichtbaren Bereich je geschossen wurde.
Auch dieses 6000×6000 Pixel große Bild von ca. 20 MB gibt es in den Wikimedia-Commons

Neben den Deep Fields hat das Hubble Teleskop viele wunderschöne Aufnahmen von Nebeln und Galaxien geschossen. Davon möchte ich hier die schönsten und bekanntesten zeigen.

Der Krebsnebel M1 im Sternbild Stier

Der Krebsnebel M1 im Sternbild Stier

Planetarische Nebel haben nichts mit Planeten zu tun. Sie sind Überreste von Supernova-Explosionen.

Orionneble M42 im Sternbild Orion

Orionnebel M42 im Sternbild Orion

Wenn ein Stern ab einer gewissen Größe seinen gesammten Wasserstoff zu Helium fusioniert hat und dieses weiter die ganze Reihe der Elemente durch bis Eisen, explodiert er als Supernova und zurück bleibt ein weißer Zwerg. Zwischenzeitlich werden die Hüllen aus Gas ins All geschleudert, die diese wunderschönen Nebel bilden. Auf einigen der Bilder kann man die weißen Zwerge noch sehen (vor allem im Katzenaugen-Nebel).

Der Orionnebel kann schon mit einem einfachen Fernglas ausgemacht werden. er Befindet sich etwas unterhalb des Schwerts des Orions.

Katzenaugen-Nebel NGC 6543 im Sternbild Drache

Katzenaugen-Nebel NGC 6543 im Sternbild Drache

Pferdekopfnebel B 33 im Sternbild Orion

Pferdekopfnebel B 33 im Sternbild Orion

Der Krebsnebel kann leider nur mit einem Teleskop beobachtet werden.

Meine Lieblingsnebel sind der Katzenaugen-Nebel sowie der Eskimonebel. Aber ich finde fast alle Nebel wunderschön und faszinierend. Der Carinanebel sowie der Orionnebel sind Emissionsnebel während der Pferdekopfnebel eine Dunkelwolke ist. Alle anderen hier gezeigten Nebel sind planetarische Nebel.

Eskimonebel NGC 2392 im Sternbild Zwillinge

Eskimonebel NGC 2392 im Sternbild Zwillinge

Helixnebel NGC 7293 im Sternbild Wassermann

Helixnebel NGC 7293 im Sternbild Wassermann

eta Carinae-Nebel NGC 3372 im Sternbild Kiel des Schiffs

eta Carinae-Nebel NGC 3372 im Sternbild Kiel des Schiffs



Antennen-Galaxien im Sternbild Rabe

Antennen-Galaxien im Sternbild Rabe

Viele Galaxien wurden früher auch als Nebel bezeichnet (z.B. Andromedanebel – eigentlich Andromeda-Galaxie),

Blackeyegalaxy M64 im Sternbild Haar der Berenike

Blackeyegalaxy M64 im Sternbild Haar der Berenike

da sie mit damaligen Fernrohren nicht von Nebeln zu unterschieden waren. Es gab nur “neblige Objekte”. Während planetarische Nebel überreste von Sternen sind, sind Galaxien Sternhaufen wie unsere Milchstraße. Besonders Spektakulär ist es, wenn 2 Galaxien zusammentreffen und ihre gewaltigen Massen wechselwirken, wie es bei den Antennen-Galaxien der Fall ist.

Warped Galaxy ESO 510 G13

Warped Galaxy ESO 510 G13

Alle Bilder in diesem Artikel sind (wenn nicht anders angegeben) von der NASA und somit Public Domain. Natürlich kann man auch auf die Bilder klicken um sie größer angezeigt zu bekommen. Trotzdem haben die meisten Bilder hier nicht die volle Auflösung. Aber ich denke es reicht um sich die Objekte einmal anzuschauen. Für Bilder mit höherer Auflösung am besten mal in den Wikimedia-Commons gucken. Ansonsten gibt es bei http://heritage.stsci.edu eine Sammlung aufbereiteter Hubble Bilder.

Weitere Weltraumteleskope

Grafik des Herschel-Weltraumteleskops

Grafik des Herschel-Weltraumteleskops

Es gibt noch eine Reihe weiterer Weltraumteleskope wie z.B. SOHO (Solar and Heliospheric Observatory) zur Beobachtung der Sonne oder das Spitzer-Weltraumteleskop. Alleine dieses Jahr wurden drei weitere Weltraumteleskope ins All gebracht (zwei davon diesen Monat von der ESA):

Als Nachfolger des HST gilt das James Webb Space Telescope, welches von der NASA für 2013 geplant ist.
Auf Wikipedia gibt es eine Übersicht über die meisten Weltraumteleskope.
[UPATE]Das Spitzer-Weltraumteleskop hat diesen Monat sein Kühlmittel aufgebraucht und somit seine Hauptmission abgeschlossen.[/UPDATE]

Links

vim Completion – Text vervollständigen mit WordCompletition, LineCompletition, FileCompletition und CodeCompletition

20. Mai 2009 von

vim bietet jede Menge Funktionen an, um durch Vervollständigung Tipparbeit zu sparen. Mit einigen Tastendrücken können sich so schon einmal geschriebene Wörter und ganze Zeilen vervollständigen lassen. Aber auch Dateinamen im Dateisystem und Methodenaufrufe beim Programmieren lassen sich ergänzen. Wenn es mehrere Möglichkeiten gibt, etwas zu vervollständigen, so wird eine Reihe von Vorschlägen unterbreitet, von denen man sich die passende Ergänzung mit den Pfeiltasten auswählen und mit Enter bestätigen kann. Wird direkt der gewünschte Teil vervollständigt (unabhängig davon ob noch mehr vorgeschlagen wird oder nicht), kann man einfach weiter schreiben.
Statt den Pfeiltasten kann man auch mit Strg+n und Strg+p durch die Vorschläge navigieren.

WordCompletition
Die wohl häufigste und einfachste Möglichkeit der Vervollständigung ist die Wortvervollständigung. Hat man angefangen ein Wort zu tippen, was bereits in einem geöffneten Dokument existiert, so kann man Strg+n drücken um es zu Vervollständigen. Dabei geht vim im Text nach unten und fängt – wenn die Option wrapscan gesetzt ist – danach von oben wieder an. Möchte man die Vorschläge in umgekehrter Reihenfolge angezeigt bekommen, so wird mit Strg+p rückwärts nach Wörtern zur Vervollständigung gesucht.

LineCompletion
Sehr praktisch kann es auch sein, komplette Zeilen zu vervollständigen. Ich habe auch erst überlegt, wie selten man soetwas wohl brauchen mag, doch jedes mal wenn man nach oben geht um mit yy eine Zeile zu kopieren und sie unten wieder mit p einfügen möchte kann man dies auch mittels LineCompletion erreichen. Und das meist einfacher. Da erst viel mir auf wie häufig ich diese Funktion verwenden könnte (und mittlerweile auch verwende).
Hat man den Anfang einer Zeile geschrieben, drückt man Strg+x Strg+l (kleines L) und schon macht vim einem Vorschläge bzw. vervollständigt die Zeile automatisch, wenn es eindeutig ist.

FileCompletition
Wer sich schoneinmal gewünscht hat beim aufschreiben von Pfaden und Dateien in vim eine Möglichkeit zur Vervollständigung zu haben, der kann diese nun einfach mittels Strg+x Strg+f einleiten.

DictionaryCompletion
Über die Variable dictionary können Dateien angegeben werden, die nach Wörtern zum kompletieren durchsucht werden. Dann kann man mittels Strg+x Strg+k Wörter über ein Wörterbuch vervollständigen. Die Variable dictionary kann dabei z.B. auf /usr/share/dict/ngerman gesetzt werden, wenn aspell installiert ist.

CodeCompletion
Die CodeCompletion (OmniCompletion) wird normalerweise über Plugins der entsprechenden Sprache hinzugefügt. Diese kann man in den offiziellen Scripten suchen (am besten nach “omni” oder omnicompletion” suchen). Ist das Script der gewünschten Sprache installiert, kann man mit der Tastenkombination Strg+x Strg+o die Code-Vervollständigung einleiten. Dabei werden meist auch die Klassen nach ihren Methoden und Attributen durchsucht, so dass man diese auch vervollständigen kann.

Es werden aber auch schon von vim einige Möglichkeiten zur CodeCompletition geboten. So kann man mit Strg+x Strg+i Schlüsselwörter ergänzen, die in der aktuellen und allen inkludierten Dateien gesucht werden.
Mit Strg+x Strg+d werden Definitionen und Makros vervollständigt, die in der aktuellen und den inkludierten Dateien definiert sind.
Für diese Funktionen muss die Option include und für Definitionen zusätzlich die define Option einen regulären Ausdruck enthalten, der entsprechende Zeilen matched.

Automatische WordCompletion beim Schreiben
Mit dem Plugin autocomplpop kann man in vim schon beim Schreiben mögliche Vervollständigungen angezeigt bekommen ohne extra Strg+n oder Strg+p zu drücken. Die Autocompletion beginnt sobald man zwei oder mehr Zeichen getippt hat. Dateinamen werden vervollständigt, sobald ein Pfad erkannt wird. Auch CodeCompletion für Ruby und Python (wenn die entsprechenden Plugins installiert sind) sowie (X)HTML und CSS wird unterstützt. Um die vorgeschlagene Ergänzung zu nutzen, kann man sie mit Enter bestätigen. Mit den Pfeiltasten (oder Strg+n und Strg+p) kann man in den Vorschlägen navigieren.



Es gibt noch weitere Vervollständigungsfunktionen, die man in der Hilfe mit :h completion nachschlagen kann.

Praktische alias-Kommandos für die Bash

17. Mai 2009 von

Sehr praktisch bei der Bash ist die Möglichkeit sich alias-Befehle zu konfigurieren. Damit kann man bestehende Befehle überschreiben oder Abkürzungen hinzufügen. Ich habe mal einige praktische alias-Kommandos zusammen gestellt. Es wären natürlich noch viel mehr denkbar, aber vielleicht regen die hier genannten ja beim einen oder anderen die Phantasie an.

Übrigens kann man die “Ursprungsversion” eines Kommandos, welches durch einen Alias überschrieben wurde durch ein Vorrangestelltes \ aufrufen. Also wenn es z.B. folgenden alias gibt:

alias ls="ls --color=auto"

so kann man durch die Eingabe von

\ls

den Befehl ls ohne –color=auto aufrufen.

Grundlegende Kommandos im Dateisystem

# Macht die Ausgabe von ls farbig:
alias ls='ls --color=auto' 
 
# Gibt zu jeder Datei weitere Informationen aus. Größenangaben immer "menschenlich lesbar":
alias ll='ls -lh' 
 
# Wie ll, aber es werden auch versteckte Dateien aufgelistet:
alias la='ls -lha' 
 
# Für Vertipper recht praktisch:
alias cd..='cd ..' 
alias cd-='cd -'
 
# Abkürzung für cd .. :
alias ..='cd ..' 
alias ...='cd ../..'
 
# Alle nicht existierenden Verzeichnisse automatisch erstellen:
alias mkdir='mkdir -p'
 
# Für Anfänger zu empfehlen (es wird bei jeder Datei nachgefragt)
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Befehle die immer mit bestimmten Optionen ausgeführt werden sollen sowie Abkürzungen

# Bei df die Größen immer "menschlich lesbar" anzeigen:
alias df='df -h' 
 
# Bei du die Größen immer "menschlich lesbar" anzeigen:
alias du='du -h' 
 
# Suche in less case-insensitive:
alias l='less -i' 
 
# Zeigt Änderungen einer Datei an (wie tail -f):
alias lf='less -i +F' 
 
# Beispielhafte Abkürzung für ssh
alias meinserver='ssh user@meinserver.tld'
 
# lässt grep case-insensitive arbeiten und markiert die Treffer farbig:
alias grep='grep -i --color=auto'

Die Follow-Option von less (less +F) ist recht praktisch, da sie einfach mit Strg+c unterbrochen und mit F weitergeführt werden kann. So kann man leicht nochmal zurück scrollen.

Befehle zum Suchen, Installieren und Updaten

# Da apt-get ja meist mit sudo aufgerufen wird:
alias apt-get='sudo apt-get' 
 
#Statt dessen kann man auch die folgenden Befehle nutzen:
alias agi='sudo apt-get install'
alias acs='apt-cache search'
 
# Das ganze System updaten:
alias update='sudo apt-get update && sudo apt-get upgrade'

Komplexere Befehle

# Starte Kommando in neuem Screen-Fenster:
alias s='screen -X screen' 
 
# Dateinamen im aktuellen Verzeichnis nach Ausdruck durchsuchen:
alias lg='ls --color=always | grep --color=always -i' 
 
# Timestamp generieren:
alias timestamp='date "+%Y%m%d%H%M%S"' 
 
# Verzeichnis mit aktuellem Timestamp erstellen:
alias tsdir='timestamp | xargs mkdir' 
 
# Änderungen bei allen angegebenen Logdateien live anzeigen:
alias mylogs='sudo tail -f /var/log/{syslog,messages}' 
 
# Einen Prozess (nach Namen) suchen:
alias psg='ps ax | grep -v grep | grep ' 
 
# Die öffentliche IP ausgeben:
alias myip="wget -qO - http://checkip.dyndns.org | sed 's/[a-zA-Z<>/ :]//g'" 
 
# Zuletzt bearbeitete Datei in vim öffnen:
alias lvim="vim -c \"normal '0\"" 
 
# Die 10 Prozesse anzeigen, die den meisten RAM verbrauchen:
alias psram='ps aux | sort -rnk 4 | head'
 
# Zeige alle Prozesse bei ps (außer ps selbst) mit langer Ausgabe
alias ps='ps ax | grep -v "ps ax"'

vim Plugin – gnupg verschlüsselt Dateien

16. Mai 2009 von

Mit dem Plugin gnupg können Dateien sehr leicht gpg-verschlüsselt werden. Zur Installation läd man sich die Datei gnupg.vim herunter und kopiert sie ins Verzeichnis ~/.vim/plugin. Als nächstes fügt man die folgende Zeile zur ~/.bashrc hinzu:

export GPG_TTY=‘tty‘

Um die .bashrc neu einzulesen führt man nun

source ~/.bashrc

aus oder startet eine neue Konsole.

Wenn nun vim neu gestartet wird, werden Dateien mit der Endung .pgp, .gpg oder .asc automatisch verschlüsselt. Dabei wird keine viminfo oder Swapdatei angelegt.
Beim Anlegen einer Datei öffnet sich ein horizontaler Splitscreen, in den man die Empfänger schreiben kann. Sobald dieser geschlossen wird, wird die Liste der Empfänger übernommen. Beim Speichern wird die Datei nun für die angegebenen Empfänger verschlüsselt.
Öffnet man eine Datei, die man (oder jemand anderes) für sich verschlüsselt hat, so wird man nach dem Passwort seines GPG-Schlüssels gefragt. Danach wird die Datei geöffnet.

Man kann aber auch die symmetrische Verschlüsselung von GPG verwenden. Dafür fügt man der Datei ~/.vimrc folgende Zeile hinzu:

let g:GPGPreferSymmetric = 1

Wird nun eine Datei mit einer der oben genannten Endungen angelegt, wird man beim Speichern nach einem Passwort gefragt, um die Datei zu verschlüsseln. Öffnet man eine so gespeicherte Datei, wird man wiederrum nach dem Passwort gefragt. Bei jeder Speicherung muss dann jedoch das Passwort angegeben werden.

Filter unter vim – externe Programme aus vim heraus ausführen

13. Mai 2009 von

vim bietet mit dem Filterkommando ! die Möglichkeit externe Programme zu starten. Damit kann man seine Scripte direkt aus vim heraus testen oder mit Konsolenkommandos den Text manipulieren.

Externe Programme Ausfüren
Um das gerade geöffnete Script (was natürlich Ausführungsrechte besitzen muss) zu starten gibt man also folgenden Befehl ein, den man mit ENTER bestätigt:

:!./%

Die Variable % beinhaltet den aktuellen Dateinamen. Alternativ kann man natürlich auch andere Skripte starten oder den Dateinamen ausschreiben:

:!./script.pl

startet das Script script.pl im aktuellen Ordner.
Bei so gestarteten Programmen wird die Ausgabe des Programms angezeigt. Danach kommt man mit ENTER wieder zurück zu seinem Text. Man kann genausogut ganz gebräuchliche Kommandos wie ps, df, free oder ls ausführen und sich nur die Ausgabe ansehen, wenn man grad nicht die Konsole wechseln will oder kann.
Um die Ausgabe eines Kommandos in seinen Text zu übernehmen kann man das Kommando :r (für read) mit dem Filter kombinieren:

:r !free

fügt die Ausgabe von free in die Datei nach der aktuellen Zeile ein. Ein Quantifizierer kann dabei optional die Zeile angeben, hinter welche die Ausgabe eingefügt werden soll:

:4r !df -h

fügt die Ausgabe von df -h hinter die Zeile 4 ein.
Nebenbei bemerkt kann man mit dem read-Kommando auch komplette Dateien einfügen:

:r ~/.vimrc

fügt die Datei ~/.vimrc hinter die aktuelle Zeile in die Datei ein.

Text mit externen Programmen manipulieren
Um einen Text mit einem externen Kommando zu bearbeiten kann man z.B. im visuellen Modus einen Teil des Textes markieren und dann

:!sort

eingeben um die Zeilen alphabetisch zu sortieren.

Eine andere Möglichkeit ist ein Bewegungskommando mitzugeben, wodurch das externe Programm auf den Text von der aktuellen Cursorposition bis zum Ende der Bewegung ausgeführt wird. Dabei entfällt der Doppelpunkt:

!}sort

sortiert die Zeilen von der aktuellen Cursorposition bis zum Ende des Abschnitts.

Um den gesammten Text mit einem externen Programm zu bearbeiten gibt es die Bereichsangabe %. Das folgende Beispiel formatiert das komplette gerade geöffnete Perlscript mit perltidy:

:%!perltidy

Ansonsten können Bereiche auch durch ihre Zeilennummern angegeben werden. Im nächsten Beispiel werden die Zeilen 5 bis 10 sortiert:

:5,10!sort

Auch die Rechtschreibprüfung mit aspell nutzt Filter.
Praktisch kann auch die Kombination mit awk sein.

Weitere Informationen über Filter gibt es in der Hilfe, die man mit :h filter aufrufen kann.

Tipps und Tricks für die Bash

10. Mai 2009 von

Hier ein paar kleine Tipps und Tricks für die Bash.

Livesuche in der History
Sucht man ein Kommando, welches man schon einmal eingegeben hat, so kann man die History (welche in der Datei ~/.bash_history gespeichert wird) durchsuchen. Die Bash stellt dafür sogar eine Livesuche bereit. Diese wird mit der Tastenkombination Strg+r eingeleitet. Danach kann man eine beliebige Zeichenkette eingeben, die in irgendeinem Befehl schonmal vorgekommen ist. Mit jedem eingegebenen Buchstaben werden Vorschläge gemacht, wobei die Suche immer Rückwärts läuft.
Durch erneutes Drücken von Strg+r kann man weiter suchen. So kann man dann z.b. mit Strg+r sudo Strg+r zum vorletzten sudo-Befehl gelangen.

Weitere History-Funktionen
Mit dem Befehl history werden alle eingegebenen Kommandos, die sich in der History befinden mit Zeilennummer ausgegeben. Gibt man dem Befehl noch eine Zahl x als Parameter mit, so werden nur die letzten x Einträge angezeigt. Mit der Option -c (clear) kann man die History löschen.
Normalerweise wird die Datei ~/.bash_history erst beim beenden der Shell geschrieben. Man kann sie aber auch sofort schreiben, indem man den Befehl history -w ausführt. Umgekehrt kann man die aktuelle History auch mittels history -r aus der Datei ~/.bash_history einlesen.

Praktische Tastenkombinationen

  • Strg+l – (kleines L) löscht den Bildschirm
  • Strg+u – löscht alles vor dem Cursor
  • Strg+t – tauscht die letzten beiden Zeichen
  • Alt+. – fügt das letzte Argument ein
  • Strg+d – beendet die Sitzung bzw. sendet ein EOF (z.B. für at).

Praktische Variablen

  • !! – kompletter letzter eingegebener Befehl
  • !$ – letztes Argument
  • $$ – PID der aktuellen Bash
  • !String – letztes Kommando, das mit String angefangen hat
  • !?String – letztes Kommando, welches String enthielt.

So kann man mit sudo !! den letzten Befehl mit root-Rechten erneut ausführen oder ihn mit echo “!!” > script.sh in eine Datei schreiben.
Nach einem Kopierbefehl wechselt man mit cd !$ in das Verzeichnis, wohin die Datei(en) kopiert wurde(n).
Mit kill -9 $$ wird die Bash geschlossen ohne dass die Historydatei geschrieben werden kann.

vi-Modus
Die Bash beinhaltet einen vi-Modus, wodurch man vi-Befehle in der Bash nutzen kann. Den Modus startet man mittels

set -o vi

Danach kann man mit ESC in den Kommandomodus gelangen und mit hjkl statt Pfeiltasten navigieren. auch dd, D , p , A, 0 und $,… funktionieren.
Die obige Zeile kann man sich auch in die ~/.bashrc schreiben, damit der vi-Modus standardmäßig aktiviert ist.
Leider funktioniert danach die Tastenkombination Strg+l nicht mehr. Diese kann man jedoch mit einem Binding wieder aktivieren. Dafür schreibt man folgendes in die ~/.bashrc:

# Strg+l - clear screen
bind -m vi-insert "\C-l":clear-screen

Geänderte Konfigurationsdatei einlesen ohne neues Terminal aufzumachen
kann man mit folgendem Befehl:

source ~/.bashrc

Prozesskontrolle
Um ein Programm im Hintergrund zu starten hängt man dem Befehl ein & an.
Hat man dies vergessen, so kann man das Programm mit Strg+z anhalten, wodurch man wieder einen Prompt bekommt. Dann kann man den Prozess mittels bg im Hintergrund weiterlaufen lassen. Um ihn wieder in den Vordergrund zu holen genügt ein fg.
Wenn mehrere Prozesse im Hintergrund laufen, so holt fg den letzten Prozess zurück, der in den Hintergrund geschickt wurde. Möchte man einen anderen Prozess in den Vordergrund holen, so kann man fg die entsprechende Job-ID (diese steht in Eckigen klammern, wenn ein Prozess gestoppt oder in den Hintergrund verschoben wird) als Argument mitgeben. Alternativ kann man als Paramter für fg ein % gefolgt von einigen Anfangsbuchstaben des Befehls mitgeben.

fg %v

holt zum Beispiel einen vim-Prozess aus dem Hintergrund (wenn keine anderen Prozesse mit v im Hintergrund sind).

Um zwei Befehle nacheinander auszuführen, kann man sie mit einem Semikolon trennen. Möchte man, dass der 2. Befehl nur ausgeführt wird, wenn der erste Befehl erfolgreich war, so trennt man sie mit &&. dies ist praktisch beim compilieren von Programmen:

./configure && make && make install

So wird make nur ausgeführt, wenn das configurescript ohne Fehler durchgelaufen ist. make install wird nur ausgeführt, wenn make auch wirklich compiliert hat.

Einige Tipps und Tricks für vim

9. Mai 2009 von

Normalerweise schreibe ich ja lieber über bestimmte Funktionen von vim, da lange Listen von Befehlen langweilig und schwer zu merken sind. Wenn man sich jedoch immer nur mit einer bestimmten Funktion vertraut macht und diese eine Zeit lang nutzt, hat das einen viel größeren Lerneffekt als alles auf einmal zu versuchen.
Trotzdem gibt es einige kleine Funktionen bzw. Tricks, die sehr praktisch sind jedoch keinen eigenen Artikel ausfüllen können. Solche Tipps werde ich hier aufführen.



Zwischen den Zeilen navigieren
Wer kennt es nicht, man schreibt einen Blog- oder Forenbeitrag und die Zeile wird am Ende des Bildschirms umgebrochen. Wenn man nun mit j und k navigiert, kann man nur relativ große Textblöcke überspringen.
In solchen Fällen kann kann man gj und gk nutzen um eine sichtbare Zeile nach oben oder unten zu springen. Hierfür kann man sich nun folgende Mappings erstellen um mit Strg+j und Strg+k statt gj und gk zu navigieren:

noremap <C-J> gj
noremap <C-K> gk

Diese Zeilen kann man sich einfach in die Datei ~/.vimrc schreiben.



Text aus der Zwischenablage in Ex-Befehl einsetzen
Bei einem Suchen/Ersetzen Befehl ist es häufig lästig, das ganze Wort, welches man ersetzen möchte abzuschreiben. Statt dessen kann man es auch kopieren (z.B. mit yw) und dann wenn es benötigt wird mit Strg+r” in den Ex-Befehl einfügen. Statt ” kann man auch jeden anderen Registernamen benutzen.
Noch einfacher geht es mit Strg+r Strg+w mit dem man das Wort unter dem Cursor einfügt. Strg+r Strg+a fügt hingegen das WORT unter dem Cursor ein.



Spezialregister
Hier noch die Spezialregister, die möglicherweise mit der obigen Funktion Strg+r recht praktisch sein können:

  • – Unbenanntes Register, in dem der letzte gelöschte oder kopierte Text liegt
  • % – Der Dateiname der gerade bearbeiteten Datei
  • * – Zwischenablage der mittleren Maustaste
  • + – Zwischenablage des Systems (von Strg+c oder Strg+x)
  • / – Der letzte Suchausdruck
  • : – Das letzte Kommando im Kommandozeilenmodus
  • . – Der zuletzt eingefügte Text



Weitere praktische Tastenkombinationen für den Kommandozeilen-Modus

  • Strg+w – löscht das Wort unter dem Cursor
  • Strg+u – löscht vom Cursor bis zum Anfang
  • Strg+b – setzt den Cursor auf den Anfang
  • Strg+e – setzt den Cursor ans Ende



Einrücken beim Einfügen verhindern
Ich habe ständig das Problem, dass ich irgendetwas mit der mittleren Maustaste einfügen möchte und durch die autoindent bzw. smartindent Funktionen wird alles treppenartig eingerückt oder auskommentiert. Um dies zu umgehen ohne jedes mal die Optionen zu ändern, kann man einfach die oben beschriebenen Register * und + nutzen. So kann man den Text mit dem Befehl “*p oder “+p einfügen.



Vergessen vim mit sudo aufzurufen
Man will nur mal schnell in eine Konfigurationsdatei rein schaun ohne sie zu ändern. Dann fällt einem etwas auf und man ändert sie doch ohne daran zu denken, dass man sie garnicht mit sudo geöffnet hat. Jetzt alle Änderungen verwerfen und mit sudo öffnen oder die Datei zwischenspeichern? Nein mit folgendem Befehl kann man mit sudo in die Datei schreiben:

:w !sudo tee %

Zuerst wird man nach dem Passwort gefragt, dann muss man noch einmal Enter drücken und die Datei mit l (kleines L) neu einlesen.



Navigieren in der Hilfe
Wenn man mittels :h <Suchbegriff> nicht fündig wird, kann man den Befehl :helpgrep <Suchwort> nutzen, der alle Hilfedateien wie grep durchsucht. Mit :cnext kommt man jeweils zum nächsten vorkommen des Suchwortes. Um sich alle gefundenen Stellen anzeigen zu lassen dient :list. Ein \c ignoriert die Groß- und Kleinschreibung. So sucht :helpgrep foo\c nach “foo”, wobei Groß- und Kleinschreibung ignoriert wird.

Oft sieht man in der Hilfe weiterführende links wie z.B. |:helpgrep|. Um diesen Links zu folgen geht man mit dem Cursor darauf und drückt Strg+]. Um wieder zurück zu springen ist die Tastenkombination Strg+t gedacht.



Während des Einfügens einen Befehl ausführen
Manchmal ist man am Schreiben und würde gerne einen Befehl im Befehlsmodus ausführen wie z.B. ein eine Zeile löschen oder eine Bewegung machen. Dies kann man mit der Tastenkombination Strg+o erreichen. Danach befindet man sich weiterhin im Insert-Modus.

Ein paar Beispiele:

Strg+o dd

löscht die aktuelle Zeile.

Strg+o )

springt zum nächsten Satz.

Strg+o di)

löscht alles innerhalb der aktuellen Klammer.



Praktische Tastenkombinationen im Insert-Modus

  • Strg+i – fügt zuletzt eingefügten Text ein
  • Strg+@ – fügt zuletzt eingefügten Text ein und beendet den Insert-Modus
  • Strg+r – fügt inhalt eines Registers ein (Registername danach eingeben)
  • Strg+u – löscht von der Aktuellen Cursorposition bis zum Zeilenanfang
  • Strg+w – löscht das Wort vor dem Cursor
  • Strg+t – aktuelle Zeile einrücken
  • Strg+d – Einrückung der aktuellen Zeile rückgängig machen



Praktische Tastenkombinationen im Kommando-Modus

  • Strg+a – inkrementiert die Zahl unter dem Cursor (Quantifizierer möglich)
  • Strg+x – dekrementiert die Zahl unter dem Cursor (Quantifizierer möglich)
  • Strg+f – herunterscrollen (Anzahl der Zeilen kann mit der Option scroll definiert werden) Standard: halber Bildschirm (Quantifizierer gibt Anzahl der Zeilen an)
  • Strg+b – wie Strg+f nur zum hochscrollen
  • Strg+g – Zeigt Informationen über die Datei an
  • g Strg+g – Zeigt Informationen über die aktuelle Stelle der Datei an
  • * – Sucht nach dem Wort unter dem Cursor

Wenn man scroll auf 1 setzt gibt das einen ziemlich coolen Effekt, weil dann der Cursor an der Stelle bleibt und nur das Dokument dahinter mittels Strg+f und Strg+b nach unten und oben gescrollt wird.


Bloggeramt.de frisch gebloggt Blogverzeichnis - Blog Verzeichnis bloggerei.de