<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.5" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>[pimp my shell]</title>
	<link>http://blog.pimpmyshell.de</link>
	<description>leben im text-modus</description>
	<pubDate>Sat, 17 May 2008 12:45:56 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.5</generator>
	<language>en</language>
			<item>
		<title>NoPaste/pastebin-Service über die Shell mit curl und sprunge.us</title>
		<link>http://blog.pimpmyshell.de/2008/05/16/nopastepastebin-service-uber-die-shell-mit-curl-und-sprungeus/</link>
		<comments>http://blog.pimpmyshell.de/2008/05/16/nopastepastebin-service-uber-die-shell-mit-curl-und-sprungeus/#comments</comments>
		<pubDate>Fri, 16 May 2008 13:59:22 +0000</pubDate>
		<dc:creator>Mattelacchiato</dc:creator>
		
		<category>allgemein</category>

		<category>berichte</category>

		<category>webseiten</category>
<category>curl</category><category>nopaste</category><category>pastebin</category><category>pipe</category><category>shell</category>
		<guid isPermaLink="false">http://blog.pimpmyshell.de/2008/05/16/nopastepastebin-service-uber-die-shell-mit-curl-und-sprungeus/</guid>
		<description><![CDATA[ 	NoPaste-Services sind &#8216;ne feine Sache. Wenn man im IRC oder in Foren unterwegs ist, kann man auf einer Webseite lange Ausgabe von der Shell oder ganze Configfiles dort hinterlegen, damit sich andere der Fehlersuche annehmen können, ohne das Forum oder IRC zuzuspammen. Bisher musste man allerdings das Copy und Paste noch per Hand erledigen.
Mit [...]]]></description>
			<content:encoded><![CDATA[<p> 	NoPaste-Services sind &#8216;ne feine Sache. Wenn man im IRC oder in Foren unterwegs ist, kann man auf einer Webseite lange Ausgabe von der Shell oder ganze Configfiles dort hinterlegen, damit sich andere der Fehlersuche annehmen können, ohne das Forum oder IRC zuzuspammen. Bisher musste man allerdings das Copy und Paste noch per Hand erledigen.</p>
<p>Mit sprunge.us kann man super eine einfache Shell-Ausgabe auf dem NoPaste-Service von sprunge pipen. Als Rückgabewert bekommt man die URL, unter der die Ausgabe zu finden ist.</p>
<p>Auf der <a title="Homepage" href="http://sprunge.us">Homepage</a> ist die sehr übersichtliche manpage zu finden. Just try it!
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2008/05/16/nopastepastebin-service-uber-die-shell-mit-curl-und-sprungeus/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Die Heirloom-Tools - Unix unter Linux</title>
		<link>http://blog.pimpmyshell.de/2008/04/15/die-heirloom-tools-unix-unter-linux/</link>
		<comments>http://blog.pimpmyshell.de/2008/04/15/die-heirloom-tools-unix-unter-linux/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 03:54:30 +0000</pubDate>
		<dc:creator>CuleX</dc:creator>
		
		<category>berichte</category>

		<category>programme</category>

		<category>shells</category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2008/04/15/die-heirloom-tools-unix-unter-linux/</guid>
		<description><![CDATA[ 	&#8220;Häh? UNIX unter Linux?! Ich dachte, Linux sei ein Unix?&#8221;

Linux ist doch kein UNIX. Nur ein UNIX-Klon.
Die eigentliche Toolchain (Wenn es EMACS-Benutzer sind, auch EMACS) kommt von GNU.

Das ist für den kleinsten Teil der Leser neu, doch die Frage ist, was ist nun mit &#8220;Unix unter Linux&#8221; gemeint ist. Ein gutes Beispiel, dies zu [...]]]></description>
			<content:encoded><![CDATA[<p> 	&#8220;Häh? UNIX unter Linux?! Ich dachte, Linux <em>sei</em> ein Unix?&#8221;</p>
<ol>
<li>Linux ist doch kein UNIX. Nur ein UNIX-Klon.</li>
<li>Die eigentliche Toolchain (Wenn es EMACS-Benutzer sind, auch EMACS) kommt von <a href="http://www.gnu.org">GNU</a>.</li>
</ol>
<p>Das ist für den kleinsten Teil der Leser neu, doch die Frage ist, was ist nun mit &#8220;Unix unter Linux&#8221; gemeint ist. Ein gutes Beispiel, dies zu demonstrieren, ist ps. Für die gleiche/sehr ähnliche Ausgabe, muss ich völlig andere Parameter benutzen.<br />
<code>ps -A</code> unter BSD/OS X entspricht (Evtl. nicht ganz die selbe Ausgabe) <code>ps -ef</code> unter Linux.</p>
<p>Die <a href="http://heirloom.sourceforge.net">Heirloom-Tools</a> umgehen dieses Problem auf eine (Für den Benutzer) einfache Weise, sie stellen einfach alte Software kompilierfähig zur verfügung.</p>
<p>Beinhaltet sind Programme, die sich wie unter:</p>
<ul>
<li>SVID3/SVR4-Unix verhalten</li>
<li>SVID4/SVR4.2-Unix verhalten</li>
<li>POSIX.2 verhalten</li>
<li>POSIX.1-2001 verhalten</li>
</ul>
<p>Ausserdem werden auch Binaries im UCB-Stil installiert.<br />
Klingt ja alles schön und toll (Ganz im Gegensatz zu gewissen Ideen Schäubles&#8230;), aber, <em>was soll ich denn damit?</em></p>
<p>Nun, du hast eventuell steinalte Shellskripte auf der Arbeit gefunden, kannst sie aber nicht laufen lassen, da die Optionen inkompatibel sind.<br />
Oder, du hattest nie Kontakt zu einem echten Unix, lediglich zu Minix/GNU/Linux und willst die feinen Unterschiede sehen.<br />
Was auch sein kann ist, dass du Skripte für UnixWare oder BSD schreiben musst und diese sollte man ohne ein solches System testen können, besonders bei UnixWare.<br />
Die Neugier kann auch einfach zuschlagen.<br />
Auf der Webseite sind mehrere Dinge zu finden, nicht nur die Heirloom Toolchest, sondern auch die alte Bourne Shell, sowie die Packaging Tools.</p>
<p>Anmerkung am Rande: Alles auf der Webseite wurde aufpoliert, um heutigen Standards zu genügen. *roff kann nun auch OpenType und alle Tools (Toolchain, Packaging Tools, Doctools, Bourne Shell, Devtools, mailx) beherrschen UTF-8, also keine Sorge, dass deine Textdateien auf einmal aussehen, als würden sie durch den Fleischwolf gejagt wurden.</p>
<p>Die Bourne Shell hat wirklich eigentlich nichts, nur grundlegenden Skriptsupport, keine History, keine Tabcompletion. Dafür eine solide Shell, die nicht wegen falscher Konfiguration völlig falsch funktioniert (Und Jobs, YAY!).<br />
Mir persönlich hilft die Shell, vernünftig zu arbeiten und mich nicht ablenken zu lassen. Ich hab dafür sogar mein ganzes Home-Directory (5GB Daten!) aufgeräumt!</p>
<p>Die Packaging Tools sind sehr eigentümlich. Eigentlich erwartet man nicht, dass sie vorhanden sind, sind sie aber. Da pkgadd fragt, ob etwas überschrieben werden soll, kann es problemlos zu einem anderen Paketsystem verwendet werden.</p>
<p>Äusserst langweilig ist, dass die meisten Dinge auf einem anderen Teil der Heirloom-Tools aufbauen. Will man beispielsweise nur die Packaging Tools benutzen, muss die ganze Toolchest installiert werden, da die Tools sich nach einem Teil dieser verhalten.</p>
<p>Nichtsdestotrotz ist es äussert intressant, mit älterer Software zu arbeiten. (Ausserdem generiert troff viel schöneren Postscript output als groff :P)</p>
<p><a href="http://sam.zoy.org/wtfpl/">Dieser Artikel ist unter der WTFPL lizensiert.</a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2008/04/15/die-heirloom-tools-unix-unter-linux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>dvtm - dwm für die Konsole</title>
		<link>http://blog.pimpmyshell.de/2008/02/13/dvtm-dwm-fur-die-konsole/</link>
		<comments>http://blog.pimpmyshell.de/2008/02/13/dvtm-dwm-fur-die-konsole/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 10:43:04 +0000</pubDate>
		<dc:creator>CuleX</dc:creator>
		
		<category>programme</category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2008/02/13/dvtm-dwm-fur-die-konsole/</guid>
		<description><![CDATA[ 	Zunächst einige Zeilen, um das nachfolgende zu verstehen.
dwm ist ein minimalistischer Windowmanager, der das Ziel hat, nie mehr als 2000 Codezeilen zu überschreiten.
dvtm bezeichnet sich selbst als Windowmanager für die Konsole, der sich als Vorbild dwm genommen hat. Dvtm existiert noch nicht lange. Von ihm Wind bekommen habe ich durch die dwm Mailingliste.
GNU Screen [...]]]></description>
			<content:encoded><![CDATA[<p> 	Zunächst einige Zeilen, um das nachfolgende zu verstehen.<br />
<a href="http://dwm.suckless.org">dwm</a> ist ein minimalistischer Windowmanager, der das Ziel hat, nie mehr als 2000 Codezeilen zu überschreiten.<br />
<a href="http://www.brain-dump.org/projects/dvtm">dvtm</a> bezeichnet sich selbst als Windowmanager für die Konsole, der sich als Vorbild dwm genommen hat. Dvtm existiert noch nicht lange. Von ihm Wind bekommen habe ich durch die dwm Mailingliste.</p>
<p>GNU Screen und dvtm existieren parallel. Doch dvtm hat ein anderes Ziel: dwm auf der Konsole. Screen dagegen ist ein Terminalmultiplexer.</p>
<p>Nun, zu dvtm selber. Dvtm kann sich wirklich der dwm der Konsole nennen, denn es gibt schlichtweg keine Konfigurationsdateien. Jegliche Modifikation oder Konfiguration geschieht in der config.h/im Code. Ausserdem besteht er aus &#8220;nur&#8221; 2369 Codezeilen. Zieht man nun aber die Library madtty hab, so sind es nur noch 1175. Dies befindet sich ungefähr im bereich des X11 dwm. Dafür gibt es kein oberes Zeilenlimit, d.h. er könnte auch mal aufgebläht werden, wie die GNU readline Library (Über 20000 Zeilen Sourcecode!).<br />
Unterstützt werden vier &#8220;Arten&#8221; von Terminalmanaging: Vertikales Teilen, Teilen im unteren Bereich (Siehe Screenshot), Grid (Alle Fenster bekommen gleich viel Platz) und Fullscreen</p>
<p>So könnte dvtm aussehen, nach erfolgter Installation und Konfiguration: <a href="http://blog.pimpmyshell.de/uploads/2008/02/2008-02-13-104240_1280x1024_scrot.png"><img src="http://blog.pimpmyshell.de/uploads/2008/02/2008-02-13-104240_1280x1024_scrot.thumbnail.png" alt="dvtm" /></a></p>
<p>Nun, dvtm aufzusetzen ist kein Mysterium. Zumindest ist es einfacher als Kopfstehend auf den Füssen zu laufen.<br />
Zunächst holt man sich den Code von <a href="http://www.brain-dump.org/projects/dvtm/">http://www.brain-dump.org/projects/dvtm</a> und entpackt ihn. Man sollte nun ein Verzeichnis dvtm-VERSIONSNUMMER vorfinden. In diesem führt man &#8220;make unicode&#8221; aus. Als root noch fix &#8220;make install&#8221; ausgeführt, sind im Path zwei neue Kommandos: Dvtm (Dank der deutschen Rechtschreibung muss ich hier &#8220;Dvtm&#8221; schreiben, es lautet jedoch &#8220;dvtm&#8221;) und dvtm-status. Dvtm ist das eigentliche Kommando, dvtm-status ist ein Beispielscript für eine Statusbar.</p>
<p><strong>Warnung:</strong> Dvtm ist im Alphastadium und hat einiges an Bugs! Für die meisten gibt es allerdings einen Workaround.</p>
<p>Nun. Startet man dvtm sieht man gleich, dass es eine Titelleiste für das Kommando hat. Toll. Für das hätte man sich dvtm auch sparen können. Der Standardprefix ist Ctrl-g. Mit &#8220;C-g c&#8221; (Ich benutze hier die Emacsnotation. C = Control, SPC = Space, Leertaste. Ein Leerzeichen steht für alles loslassen) öffnet man ein neues Terminal, welches direkt neben dem ersten, schon geöffneten erschent. Öffnen Sie ruhig noch zwei, um die Wirkung zu sehen.<br />
Drücken Sie nun &#8220;C-g SPC&#8221;. Sie befinden sich nun im Grid-Modus. Ein weiteres mal diese Prozedur ausgeführt und Sie sind im Modus, in dem alle Fenster sich den unteren Platz teilen müssen. Wiederholen Sie dies noch einmal, sind Sie im Fullscreenmodus. Danach beginnt es wieder von Vorne.<br />
Um ein anderes Terminal zu aktivieren, wird &#8220;C-g NUMMER&#8221; verwendet. Die Nummer erhalten Sie aus der Titelleiste. Zum beenden &#8220;C-g q&#8221; benutzen.<br />
So viel zum Crashkurs. C-g als Prefix können Sie, wie viele andere Dinge, in der config.h-Datei verändern.</p>
<p>Und das Beste kommt zum (fast) Schluss: Solange Screen und dvtm nicht den selben Prefix haben, können mehrere dvtm-Instanzen in screen laufen. Beispielsweise hat Screen fünf Terminals geöffnet und in diesen wird dann jeweils dvtm mit vier Unterterminals gestartet. Das macht unter dem Strich 20 Terminals.</p>
<p><strong>Bugs:</strong></p>
<ul>
<li>In vim funktionieren die Pfeiltasten nicht. Lösung: TERM=linux vim (Der Autor versucht dies zu lösen)</li>
<li>In emacs funktionieren die Home, End und Delete Tasten nicht. Lösung: TERM=linux emacs (Siehe vim)</li>
</ul>
<p>Aber warum sollte man dvtm einsetzen, GNU Screen kann das doch weitaus Bugfreier! Nun, generell gilt, dass die meisten dwm-Benutzer die Meinung, die auf <a href="http://www.suckless.org">suckless.org</a> repräsentiert wird, teilen. Das heisst: Wenig Codezeilen und nur das nötigste.<br />
Somit ist das auch Meinungssache. Ausserdem ist dvtm geeignet für Leute mit Spieltrieb, die etwas neues ausprobieren wollen.<br />
Ausserdem: Der Code von dvtm ist einfacher zu verstehen, als der von GNU Screen.</p>
<p><a href="http://sam.zoy.org/wtfpl/">Dieser Artikel ist unter der WTFPL lizensiert.</a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2008/02/13/dvtm-dwm-fur-die-konsole/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wohin ist mein Speicherplatz: ncdu</title>
		<link>http://blog.pimpmyshell.de/2008/02/12/wohin-ist-mein-speicherplatz-ncdu/</link>
		<comments>http://blog.pimpmyshell.de/2008/02/12/wohin-ist-mein-speicherplatz-ncdu/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 12:13:28 +0000</pubDate>
		<dc:creator>Gregor</dc:creator>
		
		<category>programme</category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2008/02/12/wohin-ist-mein-speicherplatz-ncdu/</guid>
		<description><![CDATA[ 	ncdu - das ist keine neue Abspaltung der Christlich Demokratischen Union, sondern ein Programm welches in einem netten ncurses Interface anzeigt, wie groß welche Dateien auf der Festplatte oder sonstigen Speichermedien sind. 
ncdu bedeutet: NCurses Disk Usage
Ein solches Tool habe ich schon sehr lange gesucht, da es schnell vorkommen kann, dass man mehr Speicherplatz [...]]]></description>
			<content:encoded><![CDATA[<p> 	ncdu - das ist keine neue Abspaltung der Christlich Demokratischen Union, sondern ein Programm welches in einem netten ncurses Interface anzeigt, wie groß welche Dateien auf der Festplatte oder sonstigen Speichermedien sind. </p>
<p><a href="http://dev.yorhel.nl/ncdu/">ncdu bedeutet: <strong>NCurses Disk Usage</strong></a></p>
<p>Ein solches Tool habe ich schon sehr lange gesucht, da es schnell vorkommen kann, dass man mehr Speicherplatz benötigt - mit ncdu weiß man dann auch welche Verzeichnise oder Dateien es wert sind gelöscht zu werden.</p>
<p>Ich habe das Programm über das Paketmanagement meiner Distrubution ohne Probleme installieren können:</p>
<p>Nach dem Start fragt das Programm welches Verzeichnis er analysieren soll. Hat man dieses eingegeben berechnet es den Speicherplatz und stellst diese in einer übersichtlichen Liste dar. Ausprobieren lohnt sich - <a href="http://dev.yorhel.nl/ncdu/userguide/">eine detaillierte Beschreibung befindet sich auf der Projektwebseite.</a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2008/02/12/wohin-ist-mein-speicherplatz-ncdu/feed/</wfw:commentRss>
		</item>
		<item>
		<title>gcalcli - google calendar auf der shell</title>
		<link>http://blog.pimpmyshell.de/2008/02/12/gcalcli-google-calendar-auf-der-shell/</link>
		<comments>http://blog.pimpmyshell.de/2008/02/12/gcalcli-google-calendar-auf-der-shell/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 11:53:08 +0000</pubDate>
		<dc:creator>Gregor</dc:creator>
		
		<category>how-tos</category>

		<category>programme</category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2008/02/12/gcalcli-google-calendar-auf-der-shell/</guid>
		<description><![CDATA[ 	Wenn man auf mehr als nur einem PC arbeitet und damit vielleicht sogar verschiedene Plattformen vor sich hat, gibt es oft das Problem, dass Daten nicht synchron sind. Nehmen wir als Beispiel Terminverwaltung: Wie kann man ein Microsoft Outlook, einen Windows Mobile Gerät, den Mozilla Sunbird synchronisieren, dass jeder dieser Instanzen die gleichen Termine [...]]]></description>
			<content:encoded><![CDATA[<p> 	Wenn man auf mehr als nur einem PC arbeitet und damit vielleicht sogar verschiedene Plattformen vor sich hat, gibt es oft das Problem, dass Daten nicht synchron sind. Nehmen wir als Beispiel Terminverwaltung: Wie kann man ein Microsoft Outlook, einen Windows Mobile Gerät, den Mozilla Sunbird synchronisieren, dass jeder dieser Instanzen die gleichen Termine empfängt und eintragen kann? Die Antwort ist der Google-Calendar, man kann die Kalender über das Internet abbonieren auch mit Terminen füttern.</p>
<p>Nun, da ich mich wieder auf die Shell konzentriere, hatte ich das Problem, das ich unter der Shell die Termine nicht abrufen und eintragen konnte. Doch mit einem kleinen Python-Skript kann ich nun auch diese Hürde überwinden: <a href="http://code.google.com/p/gcalcli/">gcalcli</a></p>
<p>Leider war die installation von gcalcli nicht so trivial.</p>
<p><strong>How-To:</strong></p>
<ul>
<li>gcalcli von der <a href="http://code.google.com/p/gcalcli/">Projektwebseite herunterladen</a></li>
<li>tarball entpacken</li>
<li>nach /usr/local/bin kopieren</li>
<li>.gcalclirc im Home-Verzeichnis anlegen</li>
</ul>
<p><strong>Die .gcalclirc sollte folgendermaßen aussehen:</strong></p>
<blockquote><p>[gcalcli]<br />
user: benutzer@googlemail.com<br />
pw: passwort<br />
cals: owner</p></blockquote>
<ul>
<li>Abhängigkeiten erfüllen:</li>
<p><a href="http://code.google.com/p/gdata-python-client/">Gdata-Python</a>, <a href="http://effbot.org/zone/element-index.htm">Elementree</a>, <a href="http://www.labix.org/python-dateutil">Dateutil-Python<br />
</a></p>
<li>jeweils aktuellste Versionen der Abhängigkeiten herunterladen und entpacken. In die jeweiligen Verzeichnise wechseln und mit &#8220;python setup.py install&#8221; als Superuser die Module installieren.</li>
<li>Sind die Module installiert kann man testen ob die Abfrage funktioniert: als user &#8220;gcalcli agenda&#8221; eingeben</li>
<ul>
<p>Bekommt man als Belohnung keine aktuellen Termine auf der Shell sondern mehrere Zeilen Fehlermeldungen, liegt es - wie in meinem Fall Wahrscheinlich an der Codierung:</p>
<p>Dies lässt sich mit folgendem Bugfix des Scripts beheben:</p>
<p><strong>Die Zeilen 66+67 sollte man folgendermaßen anpassen:</strong></p>
<blockquote><p>sys.stdout =  codecs.getwriter(&#8217;utf-8&#8242;)(sys.stdout)<br />
sys.stdin = sys.stdin = codecs.getreader(&#8217;utf-8&#8242;)(sys.stdin)</p></blockquote>
<p><strong>Im oberen Teil des Skripts sollten sie noch Atom-Support aktivieren durch einfügen von:</strong></p>
<blockquote><p>import atom<br />
atom.XML_STRING_ENCODING = None</p></blockquote>
<p>Nach dem Speichern sollte das Skript einwandfrei funktionieren. Folgende Abfragemöglichkeiten gibt es:</p>
<p><code><strong>gcalcli agenda</strong></code><br />
Zeigt die aktuellen Termine an, die anstehen.</p>
<p><code><strong>gcalcli calw</strong></code><br />
Zeigt einen ASCII Kalender, mit den Terminen der aktuellen Woche an</p>
<p><code><strong>gcalcli calm</strong></code><br />
Zeigt den aktuellen Monatskalender mit allen Einträgen an</p>
<p><strong>Termine werden über den quick-command eingetragen:</strong></p>
<blockquote><p>gcalcli quick &#8220;Termintext Uhrzeit TT.MM.YYYY&#8221;</p></blockquote>
<p>Ein kleines Schmankerl am Rand: Man kann in den Einstellungen des Google-Calendars eine SMS-Benachrichtigungsfunktion aktivieren, mit der man dann kostenlos per SMS an die eingetragenen Termine erinnert wird. Viel Spaß beim konfigurieren und Termine verwalten auf der Shell.
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2008/02/12/gcalcli-google-calendar-auf-der-shell/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Eine Kurztippkollektion mit Fokus auf VI(M)</title>
		<link>http://blog.pimpmyshell.de/2008/02/10/eine-kurztippkollektion-mit-fokus-auf-vim/</link>
		<comments>http://blog.pimpmyshell.de/2008/02/10/eine-kurztippkollektion-mit-fokus-auf-vim/#comments</comments>
		<pubDate>Sun, 10 Feb 2008 14:23:04 +0000</pubDate>
		<dc:creator>CuleX</dc:creator>
		
		<category>programme</category>

		<category>vim</category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2008/02/10/eine-kurztippkollektion-mit-fokus-auf-vim/</guid>
		<description><![CDATA[Es sind die kleinen Dinge im Leben, die es erst so schön machen, zumindest ist dies meine Meinung. Eine Mehrheit wird die hier vorgestellten Tipps bereits kennen, doch wer sie nicht kennt - so ist es zumindest mir ergangen - wird sich fürchterlich darüber freuen.]]></description>
			<content:encoded><![CDATA[<p> 	Es sind die kleinen Dinge im Leben, die es erst so schön machen, zumindest ist dies meine Meinung. Eine Mehrheit wird die hier vorgestellten Tipps bereits kennen, doch wer sie nicht kennt - so ist es zumindest mir ergangen - wird sich fürchterlich darüber freuen.</p>
<p><strong>VIM: Abkürzungen</strong><br />
Ich habe gerade erst kürzlich davon erfahren, dass man Abkürzungen in VIM benutzen kann. Diese Dinger sind extrem nützlich, da sie haufenweise Tipparbeit ersparen können. Dabei lautet die Syntax des Kommandos so:<br />
<code>ab Abürzungsname Einzufügender Text</code></p>
<p>Dabei gilt, dass der Abkürzungsname keine Leerzeichen enthalten darf, der Einzufügende Text kann, aber wie sieht es mit Zeilenumbrüchen aus?<br />
Dies ist etwas trickreicher, aber dennoch zu bewerkstelligen. Hierzu benutzt man im Einfügemodus Ctrl-V und danach die Taste Enter. Als Platzhalter wird ^M erscheinen, welches zudem farblich gekennzeichnet ist.</p>
<p><em>Ab</em> (Aus Gründen der deutschen Rechtschreibung musste das A gross geschrieben werden, das kommando heisst aber dennoch <em>ab</em>, kleingeschrieben) kann entweder während dem Editieren verwendet werden, oder in der .vimrc benutzt werden, wie jedes andere Feld-und-Wiesen-Kommando auch.</p>
<p>Ich benutze VIM um meine E-Mails zu schreiben. Mir persönlich ist es ja zu lange, immer &#8220;Mit freundlichen Grüssen, <em>Enter</em> Fabio Scotoni&#8221; auszuschreiben. Ein gefundenes Fressen für eine Abkürzung, nicht? Umzusetzen ist dies so:</p>
<p><code>ab mfg Mit freundlichen Grüssen, <strong>Ctrl-V Enter</strong> Fabio Scotoni</code></p>
<p><strong>VI(M) Modus für Readline/Die Shell</strong><br />
Nichts schlimmer für einen VI(M)-Freund, als GNU Readline mit der EMACS-Einstellung zu benutzen. Aber selbst dafür gibt es Abhilfe. In der Shell kurz eingetippt:<br />
<code>set -o vi</code><br />
Uuund&#8230; TADA, es hat sich nichts verändert. Von wegen! Man ist nur Standardmässig im Einfügemodus. Drückt ihr nun aber Escape, könnt ihr den Befehl wie unter VI(M) bearbeiten. Natürlich ist dies kein Vollständiger Klon, aber immerhin etwas.</p>
<p>Um diese Änderung rückgängig zu machen, wird das folgende Kommando benutzt:<br />
<code>set -o emacs</code></p>
<p>Wenn&#8217;s gefällt, einfach in die .zshrc/.bashrc/.whateverrc aufnehmen und sich freuen.</p>
<p><strong>Alpine (Eventuell auch Pine) - anderer Editor</strong><br />
Pico hat mir als Editor für meine E-Mails nicht gefallen, ich wollte meinen VIM und damit Punkt. Ich habe mich mal durch die Zahlreichen Optionen gewälzt und auch was gefunden.</p>
<p>Um VIM oder auch einen anderen Editor einzubinden, durchsuche man mit <em>w</em> die Optionen nach &#8220;editor&#8221;, setze ein Häkchen bei &#8220;Enable Alternate Editor Command&#8221;, &#8220;Enable Alternate Editor Implicitly&#8221; und setze die Variable &#8220;Editor&#8221; auf &#8220;vim&#8221; (Oder einen anderen Editor).</p>
<p><a href="http://sam.zoy.org/wtfpl/">Dieser Artikel ist unter der WTFPL lizensiert.</a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2008/02/10/eine-kurztippkollektion-mit-fokus-auf-vim/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Meillos Umzug in die Shell</title>
		<link>http://blog.pimpmyshell.de/2008/01/04/meillos-umzug-in-die-shell/</link>
		<comments>http://blog.pimpmyshell.de/2008/01/04/meillos-umzug-in-die-shell/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 09:52:52 +0000</pubDate>
		<dc:creator>meillo</dc:creator>
		
		<category>berichte</category>

		<category>shells</category>
<category>shell berichte</category>
		<guid isPermaLink="false">http://blog.pimpmyshell.de/2008/01/04/meillos-umzug-in-die-shell/</guid>
		<description><![CDATA[ 	Ich bin nicht nur in dieser Community, weil ich ein gewisses Interesse für die Shell habe, sondern auch weil Gregor eben der Auslöser für meinen Umzug in die Shell war!
Die meisten von euch dürften wohl wissen, dass Gregor (auch bekannt als Anaxagoras) im Jahr 2005 auf linuxlog.de (das es inzwischen leider nicht mehr gibt), [...]]]></description>
			<content:encoded><![CDATA[<p> 	Ich bin nicht nur in dieser Community, weil ich ein gewisses Interesse für die Shell habe, sondern auch weil Gregor eben der Auslöser für meinen Umzug in die Shell war!<br />
Die meisten von euch dürften wohl wissen, dass Gregor (auch bekannt als Anaxagoras) im Jahr 2005 auf linuxlog.de (das es inzwischen leider nicht mehr gibt), einen tollen Artikel über seinen Umzug in die Shell geschrieben hat.</p>
<p>Wer den Artikel noch nicht kennt, kann ihn <a href="http://blog.pimpmyshell.de/2006/11/19/gnuscreen/">hier</a> noch lesen.</p>
<p>Jedenfalls habe ich, nachdem ich den Artikel gelesen hatte, selbst mit meinem Umzug begonnen.<br />
Und das war eine der besten Entscheidungen meines Lebens! :-)</p>
<p>Früher oder später wäre ich sooderso umgezogen &#8230; Gregors Artikel hat es aber angestoßen und mich sehr motiviert.</p>
<p>Inzwischen fühle ich mich sehr heimisch und wohl in meinem (nun ja nicht mehr ganz so) neuen Zuhause (,denn schon seit über einem Jahr lebe ich inmitten von Text).</p>
<p>Weshalb ich euch das alles erzähle:<br />
Das ist der Hintergrund und die Einführung zu einem Vortrag, den ich im Dezember bei der LUG Ulm gehalten habe.<br />
Darin erzähle ich von der Unix-Philosophie, von eben meinem Umzug in die Shell und vom dynamic window manager &#8220;dwm&#8221;.</p>
<p>Keinesfalls möchte ich vergessen, euch auch an dieser Präsentation teilhaben zu lassen. Deshalb hier also der Link auf die Folien:</p>
<p><a href="http://marmaro.de/docs">Gimme Shellter</a></p>
<p>(Und dieser Artikel auch, um die Aktivität auf pms.de wieder etwas anzuregen: Leute postet mehr Artikel! Diese Website lebt von euren Beiträgen! Auf geht&#8217;s, haut in die Tasten! :-) )
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2008/01/04/meillos-umzug-in-die-shell/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pimp your (Bash) Prompt</title>
		<link>http://blog.pimpmyshell.de/2007/12/10/pimp-your-prompt/</link>
		<comments>http://blog.pimpmyshell.de/2007/12/10/pimp-your-prompt/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 22:17:00 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
		
		<category>how-tos</category>

		<category>shells</category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2007/12/10/pimp-your-prompt/</guid>
		<description><![CDATA[ 	Du bist gelangweilt von dem hans@wurst:~$ - Prompt deiner Bash? Möchtest gerne mehr Informationen gezeigt bekommen? Du hättest gerne Augenschmerzen vor lauter Farben?
In folgendem Artikel werde ich erklären, wie du

Deinen Prompt personalisieren,
einfärben,
und visuell vollkommen verunstalten kannst.


(Kleiner Hinweis vorweg: Der eine oder andere mag es bereits bemerkt haben, ich beziehe mich im ganzen Artikel ausschliesslich [...]]]></description>
			<content:encoded><![CDATA[<p> 	Du bist gelangweilt von dem <em>hans@wurst:~$</em> - Prompt deiner Bash? Möchtest gerne mehr Informationen gezeigt bekommen? Du hättest gerne Augenschmerzen vor lauter Farben?</p>
<p>In folgendem Artikel werde ich erklären, wie du</p>
<ul>
<li>Deinen Prompt personalisieren,</li>
<li>einfärben,</li>
<li>und visuell vollkommen verunstalten kannst.</li>
</ul>
<p><a id="more-96"></a><br />
<small>(Kleiner Hinweis vorweg: Der eine oder andere mag es bereits bemerkt haben, ich beziehe mich im ganzen Artikel ausschliesslich auf die <acronym title="Bourne again Shell">Bash</acronym>.  Selbstverständlich lassen sich die meisten anderen Shells ebenfalls über ihre Variablen individualisieren. Das soll keinerlei Wertung sein, ich habe einfach keine Zeit, mich mit anderen Shells wie der <em>zsh</em> zu beschäftigen. Sollte also jemand von euch Zeit und Lust haben einen Artikel dazu loszuwerden, lade ich ihn hiermit herzlich ein. :) )</small></p>
<h3>Grundlagen</h3>
<p>In der <acronym title="Bourne again Shell">Bash</acronym> wird der primäre Prompt über die Variable <strong>PS1</strong> gesteuert. Neben PS1 existieren noch PS2, PS3 und PS4, wobei für uns nur die ersten Beiden interessant sind.</p>
<ul>
<li><strong>PS1</strong> - In dieser Variable wird der primäre Prompt der <acronym title="Bourne again Shell">Bash</acronym> gespeichert. Der Standardwert ist in dem meisten Linuxdistributionen <em>\u@\h:\w\$</em>.</li>
<li><strong>PS2</strong> - Der sekundäre Prompt. Dieser Prompt wird ausgegeben, wenn auf eine Eingabe des Users gewartet wird. Der Standardwert ist <em>&gt;</em>. Der sekundäre Prompt lässt sich beispielsweise mit einem unvollendeten Befehl wie &#8220;ls |&#8221; ausgeben.</li>
<li><strong>PS3</strong> -  wird vom internen select Befehl verwendet.</li>
<li><strong>PS4</strong> - Die Variable &#8220;PS4&#8243; wird vor den Debug-Meldungen ausgegeben, die durch die Shell-Option &#8220;-x&#8221; [execute trace] ausgegeben werden. Der Standardwert ist hier meist <em>+</em>.</li>
</ul>
<p><strong>Die Veränderungen treten sofort ein, bleiben jedoch erst dann erhalten, wenn der &#8220;export&#8221;-Befehl in die Datei <em>~/.bashrc</em> eingetragen wird.</strong></p>
<p>Zunächst löschen wir einfach mal den Inhalt von PS1:</p>
<pre><code>unset $PS1</code></pre>
<p>Nun fehlt jegliche Eingabeaufforderung. Das bedeutet natürlich nicht, dass keine Befehle mehr eingegeben werden können. Es gibt einfach keinen Prompt mehr, der ausgegeben werden könnte.</p>
<p>Mit <kbd>export</kbd> können Umgebungsvariablen gesetzt werden. Ein schnelles:</p>
<pre><code>export $PS1="pimp my shell &gt;"</code></pre>
<p>zum Beispiel erzeugt folgenden sinnlosen aber witzigen Prompt:</p>
<pre><code>pimp my shell &gt;</code></pre>
<p>Aber wie lasse ich mir Informationen statt nur einfachen Text <del>prompten</del> <ins>ausgeben</ins>? Über so genannte Escape-Sequenzen. Nun wird es interessant. Es gibt einen ganzen Haufen Escape-Sequenzen, welche etwa Arbeitsverzeichnis, Benutzername oder Uhrzeit ausgeben:</p>
<table width="100%">
<tr>
<td><strong>\a</strong></td>
<td>Das ASCII-Zeichen für eine Glocke (&#8221;\007&#8243; sollte auch funktionieren). Dies erzeugt einen Ton, welcher (falls vorhanden) aus dem PC-Speaker tönt. Das ist aber nicht zu empfehlen, da dieser dann bei jedem ausgegebenen Prompt mit dieser Escape-Sequenz der Speaker einen nervigen Ton von sich gibt.</td>
</tr>
<tr>
<td><strong>\d</strong></td>
<td>Zeigt das Datum im &#8220;Wochentag Monat Datum&#8221;-Format (<abbr title="Beispielsweise">Bspw.</abbr> &#8220;Tue May 26&#8243;)</td>
</tr>
<tr>
<td><strong>\D{format}</strong></td>
<td>Der Inhalt der beiden geschweiften Klammern wird an <a href="http://opengroup.org/onlinepubs/007908799/xsh/strftime.html">strftime</a> gesendet und das Ergebnis zurück in den Prompt-String. Leer gelassen erzeugt das meist ein locale-Spezifisches Datum. Die geschweiften Klammern sind pflicht.</td>
</tr>
<tr>
<td><strong>\e</strong></td>
<td>Ein ASCII Escape-Zeichen (&#8221;\033&#8243; sollte auch funktionieren.)</td>
</tr>
<tr>
<td><strong>\h</strong></td>
<td>Der Hostname bis zum ersten &#8220;.&#8221;</td>
</tr>
<tr>
<td><strong>\H</strong></td>
<td>Der komplette Hostname</td>
</tr>
<tr>
<td><strong>\j</strong></td>
<td>Gibt die Anzahl der Hintergrundprozesse aus.</td>
</tr>
<tr>
<td><strong>\l</strong></td>
<td>Name der Shell</td>
</tr>
<tr>
<td><strong>\n</strong></td>
<td>Erzeugt eine neue Zeile (Ja, Prompts können mehrzeilig sein).</td>
</tr>
<tr>
<td><strong>\r</strong></td>
<td><a href="http://en.wikipedia.org/wiki/Carriage_return" title="Link zum englischen Wikipedia-Artikel">Carriage-Return</a></td>
</tr>
<tr>
<td><strong>\s</strong></td>
<td>Der Name der Shell. Logischerweise <em><acronym title="Bourne again Shell">Bash</acronym></em></td>
</tr>
<tr>
<td><strong>\t</strong></td>
<td>Die Zeit im 24-Stunden <em>HH:MM:SS</em> Format</td>
</tr>
<tr>
<td><strong>\T</strong></td>
<td>Die Zeit im 12-Stunden <em>HH:MM:SS</em> Format</td>
</tr>
<tr>
<td><strong>\@</strong></td>
<td>Die Zeit im 12-Stunden <em>AM/PM</em> Format</td>
</tr>
<tr>
<td><strong>\A</strong></td>
<td>Die Zeit im 24-Stunden <em>HH:MM</em> Format</td>
</tr>
<tr>
<td><strong>\u</strong></td>
<td>Name des Benutzers</td>
</tr>
<tr>
<td><strong>\v</strong></td>
<td>Versionsnummer der <acronym title="Bourne again Shell">Bash</acronym> (<abbr title="Beispielsweise">Bspw.</abbr> 3.2)</td>
</tr>
<tr>
<td><strong>\V</strong></td>
<td>Wie /v, jedoch mit Patch-Level (<abbr title="Beispielsweise">Bspw.</abbr> 3.2.25)</td>
</tr>
<tr>
<td><strong>\w</strong></td>
<td>Das aktuelle Arbeitsverzeichnis, wobei $HOME mit einer Tilde (~) abgekürzt wird.</td>
</tr>
<tr>
<td><strong>\W</strong></td>
<td>Das aktuelle Arbeitsverzeichnis (, jedoch ohne höhere Ebenen), wobei $HOME mit einer Tilde (~) abgekürzt wird.</td>
</tr>
<tr>
<td><strong>\!</strong></td>
<td>Die History-Nummer des Befehls. Dies kann natürlich je nach <em>.bash_history</em> variieren.</td>
</tr>
<tr>
<td><strong>\#</strong></td>
<td>Anzahl der bereits aufgerufenen Kommandos während der Shell-Session</td>
</tr>
<tr>
<td><strong>\$</strong></td>
<td>Wenn <acronym title="User IDentification Number">UID</acronym> = 0, ein #, andernfalls ein $. Zu deutsch: Normale User sehen ein &#8220;$&#8221;, Root ein &#8220;#&#8221;.</td>
</tr>
<tr>
<td><strong>\nnn</strong></td>
<td>Zeichen entsprechend der oktalen Zahl <em>nnn</em></td>
</tr>
<tr>
<td><strong>\\</strong></td>
<td>Ein Backslash</td>
</tr>
<tr>
<td><strong>\[</strong></td>
<td>Beginn einer Sequenz von nicht-darstellbaren Zeichen.</td>
</tr>
<tr>
<td><strong>\]</strong></td>
<td>Ende einer Sequenz von nicht-darstellbaren Zeichen</td>
</tr>
</table>
<p>Damit lässt sich schon viel anstellen. Sinnvoll sind und bleiben natürlich Benutzername, Verzeichnis und Hostname. Nach ein wenig herumspielen könnte der Inhalt von <strong>PS1</strong> zum Beispiel so aussehen:</p>
<pre><code>[&#92;d &#92;A, Bash Version &#92;V, &#92;# Commands, &#92;j Jobs, tty #&#92;l]&#92;n[&#92;u@&#92;H:&#92;w] &#92;$</code></pre>
<p>, was bei mir in etwa folgenden Prompt erzeugt:</p>
<pre><code>[Mo Dez 10 23:05, Bash Version 3.2.25, 116 Commands, 0 Jobs, tty #2]
[jxn@david:~] $</code></pre>
<p>Die eckigen Klammern sind übrigens reine Kosmetik ;)</p>
<h3>Farben</h3>
<div style="float:right;">
<table>
<tr>
<td><strong>Farbe</strong></td>
<td><strong><acronym title="Vordergrund">VG</acronym> / <acronym title="Hintergrund">HG</acronym></strong></td>
</tr>
<tr>
<td>Schwarz</td>
<td>30 / 40</td>
</tr>
<tr>
<td>Rot</td>
<td>31 / 41</td>
</tr>
<tr>
<td>Grün</td>
<td>32 / 42</td>
</tr>
<tr>
<td>Braun</td>
<td>33 / 43</td>
</tr>
<tr>
<td>Blau</td>
<td>34 / 44</td>
</tr>
<tr>
<td>Violett</td>
<td>35 / 45</td>
</tr>
<tr>
<td>Cyan</td>
<td>36 / 46</td>
</tr>
<tr>
<td>Weiss</td>
<td>37 / 47</td>
</table>
</div>
<p>Zufrieden mit der Ausgabe? Weiter gehts mit optischer hervorhebung durch Farben.</p>
<p>Farbangaben müssen über die Escape-Sequenz <strong>\e</strong> (/033 sollte auch funktionieren) eingeleitet werden. Diese Escape-Sequenz wird jedoch vom genutzten Terminal verarbeitet, nicht von der <acronym title="Bourne again Shell">Bash</acronym>. Deswegen funktioniert die Einfärbung von Prompts auch nicht überall, selbst wenn die <acronym title="Bourne again Shell">Bash</acronym> genutzt wird.</p>
<p>Eine Farbangabe besteht aus dem Escape-Zeichen &#8220;\e&#8221;, den Farbcodes &#8220;x;yy;zz&#8221; (Eigenschaft;Vordergrund;Hintergrund) und einem abschliessendem &#8220;m&#8221;. Beispiele für Farbcodes können der nebenstehenden Tabelle entnommen werden, wobei die 30er für die Vordergrund- und die 40er für die Hintergrundfarben stehen. Sinnvolle Werte für die Schrifteigenschaft (x) sind: 0 (Standard), 1 (heller), 22 (nicht heller), 4 (unterstrichen), 24 (nicht unterstrichen), 5 (blinkend), 25 (nicht blinkend), 7 (invers), 27 (nicht invers).</p>
<p>Die Codes in der Farbangabe können übrigens in beliebiger Reihenfolge gesetzt werden. Ein &#8220;5;41;32&#8243; ergibt <abbr title="Beispielsweise">Bspw.</abbr> das Gleiche wie ein &#8220;41;5;32&#8243;, das Entscheidende ist der Code, nicht die Reihenfolge.</p>
<p>Färben wir einfach mal den oben erwähnten Standardprompt &#8220;\u@\h:\w\$&#8221; hellgrün mit einem rotem Hintergrund:</p>
<pre><code>export PS1="&#92;e[1;32;41m&#92;u@&#92;h:&#92;w&#92;$ "</code></pre>
<p>Das Problem: Nun ist nicht nur der Prompt hellgrün, sondern der gesamte Text in unserer Shell. Das lässt sich mit einem schliessenden &#8220;\e[0m&#8221; verhindern. Auf diese Weise wird die Farbangabe auf Null zürückgesetzt. Ein</p>
<pre><code>export PS1="&#92;e[1;32;41m&#92;u@&#92;h:&#92;w&#92;$&#92;e[0m "</code></pre>
<p>sieht schon gleich viel besser aus. Aber das reicht leider immer noch nicht. Die sowieso nicht darstellbaren Zeichen unserer Farbangaben müssen mit den Sequenzen &#8220;\[&#8221; und &#8220;\]&#8221; auch als solche gekennzeichnet werden. Sonst gibt es hässliche Darstellungsfehler, sollte ein Kommando einmal das rechte Ende des sichtbaren Bereichs erreichen. Das Ergebnis sollte also wie folgt aussehen:</p>
<pre><code>export PS1="&#92;[&#92;e[1;32;41m&#92;u@&#92;h:&#92;w&#92;$&#92;e[0m&#92;] "</code></pre>
<p>Natürlich können in einem Prompt auch mehrere Farbangaben verwendet werden. Aber jeder sollte für sich entscheiden, wieviel <em>Bunt</em> seine Augen ertragen können. ;)</p>
<h3>Noch nicht genug? Bashish rocks your socks!</h3>
<p><a href="http://bashish.sourceforge.net/">Bashish</a> ist eine Theme-Engine für allerlei Terminals und Shells. Mit Bashish lassen sich Farbe, Schriftart, Transparenz und Hintergrundbild für einzelne Programme unabhängig voneinander personalisieren. Ausserdem kann man mit Bashish die Prompts verbreiteter Shells wie die Bash, zsh und tcsh konfigurieren. Was mit Bashish möglich ist, wird bei <a href="http://bashish.sourceforge.net/screenshot.html">den Screenshots</a> sehr gut veranschaulicht.
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2007/12/10/pimp-your-prompt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>.bash_history für mehrere Shells</title>
		<link>http://blog.pimpmyshell.de/2007/12/03/bash-history-fuer-mehrere-shells/</link>
		<comments>http://blog.pimpmyshell.de/2007/12/03/bash-history-fuer-mehrere-shells/#comments</comments>
		<pubDate>Mon, 03 Dec 2007 21:58:32 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
		
		<category>how-tos</category>
<category>Bash</category><category>history</category><category>Shell</category>
		<guid isPermaLink="false">http://blog.pimpmyshell.de/2007/12/03/bash-history-fuer-mehrere-shells/</guid>
		<description><![CDATA[ 	Du kennst das. Du hast ein Terminal geöffnet und tippst fleißig deine Befehle ein, öffnest ein zweites Terminal und - es erinnert sich nicht an die gerade eben eingetippten Kommandos. Und es kommt sogar noch schlimmer: Wenn du zuerst das erste Terminal und danach das Zweite schließt, werden die Befehle des ersten Terminals aus [...]]]></description>
			<content:encoded><![CDATA[<p> 	Du kennst das. Du hast ein Terminal geöffnet und tippst fleißig deine Befehle ein, öffnest ein zweites Terminal und - es erinnert sich nicht an die gerade eben eingetippten Kommandos. Und es kommt sogar noch schlimmer: Wenn du zuerst das erste Terminal und danach das Zweite schließt, werden die Befehle des ersten Terminals aus der Datei <em>~/.bash_history</em> überschrieben. Doppelt nervig.<br />
<a id="more-113"></a><br />
Die Bash speichert die <em>.bash_history</em> nur beim schließen eines Terminals, und nicht nach jedem eingetippten Kommando. Das lässt sich leicht ändern:</p>
<pre><code>nano ~/.bashrc</code></pre>
<p>(An Ubuntuuser: Man beachte, kein sudo hier. Die Datei gehört dem User, nicht dem System. Und selbstverständlich lässt sich auch jeder andere Texteditor wie gedit, kate, vi oder emacs nehmen.)</p>
<p>Füge nun die folgenden Zeilen hinzu:</p>
<pre><code>shopt -s histappend
PROMPT_COMMAND='history -a'</code></pre>
<p>und speichere das ganze ab (In Nano mit <kbd>Strg+O</kbd>. &#8220;^&#8221; steht in den meisten Fällen für <kbd>Strg</kbd>. Also macht die Statuszeile in Nano doch ein wenig Sinn. ;) )</p>
<p>Dies sorgt dafür, dass der Kommandoverlauf von der Bash <strong>angehängt</strong> (und nicht einfach überschrieben) wird. Ausserdem wird jedes mal, wenn ein Prompt ausgegeben wird, abgespeichert.
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2007/12/03/bash-history-fuer-mehrere-shells/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mehr Vim Tipps</title>
		<link>http://blog.pimpmyshell.de/2007/09/16/mehr-vim-tipps/</link>
		<comments>http://blog.pimpmyshell.de/2007/09/16/mehr-vim-tipps/#comments</comments>
		<pubDate>Sun, 16 Sep 2007 18:04:12 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
		
		<category>allgemein</category>

		<category>vim</category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2007/09/16/mehr-vim-tipps/</guid>
		<description><![CDATA[Ich bin ein neuer Autor und werde gelegentlich Beiträge zu Vim und evtl. anderen Themen schreiben. Hier ein paar kleine Tipps, die mir immer wieder den Alltag erleichtern. ]]></description>
			<content:encoded><![CDATA[<p> 	Hallo zusammen</p>
<p>Ich bin ein neuer Autor und werde gelegentlich Beiträge zu Vim und evtl. anderen Themen schreiben. Hier ein paar kleine Tipps, die mir immer wieder den Alltag erleichtern.</p>
<p>Ich gehe davon aus, dass die Grundkenntnisse bereits vorhanden sind; ansonsten ist das bei Vim mitgelieferte Tutorial empfehlenswert, welches aus der Shell mit </p>
<p><code>
<pre>
$ vimtutor
</pre>
<p></code></p>
<p>gestartet werden kann.</p>
<h5>Rechtschreibung</h5>
<p>Seit Version 7 bietet Vim eine eigene Rechtschreibehilfe an. Nach der Eingabe</p>
<p><code>
<pre>
:set spell spelllang=de,en
</pre>
<p></code></p>
<p>werden alle Wörter, die von Vim nicht als korrekte Deutsche oder Englische Wörter erkannt werden, rot markiert.</p>
<h5>Umlaute</h5>
<p>Manchmal hat es auf einer Tastatur keine Umlaute. Kein Problem mit Vim - die Umlaute können im Insert-Mode mit CTRL-K als Digraph eingegeben werden. Beispiel:</p>
<p><code>
<pre>
CTRL-K U:
</pre>
<p></code></p>
<p>gibt ein Ü ein. Die weiteren Digraphe lassen sich mit</p>
<p><code>
<pre>
:digraph
</pre>
<p></code></p>
<p>anzeigen.</p>
<h5>Automatische Komprimierung</h5>
<p>Hat eine Datei eine Endung .gz oder .bz2, so wird sie von Vim automatisch (de-)komprimiert. Dies funktioniert auch beim Erstellen einer neuen Datei, z.B.:</p>
<p><code>
<pre>
$ vim notizen.txt.bz2
</pre>
<p></code></p>
<h5>Makros</h5>
<p>Ein Makro kann dazu verwendet werden, eine oft wiederholte Editiersequenz abzukürzen. Die Aufnahme eines Makros hat immer die Form qX[Editiersequenz]q. Abgespielt wird es mit @X. Dabei ist X der Bezeichner der Sequenz - dies kann ein Buchstabe oder eine Ziffer sein. Die Editiersequenz darf auch Wechsel in andere Modi beinhalten, muss aber im Normal-Mode starten und enden. Ein Beispiel:</p>
<p><code>
<pre>
qayypVr-q
</pre>
<p></code></p>
<p>Nun wird durch Eingabe von</p>
<p><code>
<pre>
@a
</pre>
<p></code></p>
<p>der Text einer ganzen Zeile unterstrichen.</p>
<h5>Verschlüsselung</h5>
<p>Will man in Vim einen Text verschlüsseln, so genügt es, Vim mit -x aufzurufen oder bei laufendem Vim</p>
<p><code>
<pre>
:X
</pre>
<p></code></p>
<p>einzugeben. Vim fragt dann nach einem Schlüssel und speichert die Datei ab sofort nur noch verschlüsselt. Der verwendete Algorithmus ist allerdings nicht besonders sicher. Besser - und auch eher der Unix-Philosophie entsprechend - wäre es, ein externes Tool für die Verschlüsselung zu verwenden. Vim bietet die Möglichkeit, einen Teil (Selektion) oder den ganzen Inhalt (% Operator) einer Datei durch ein externes Programm zu filtern. Möchte ich z.B. eine Textdatei vor dem Speichern mit GPG verschlüsseln (wozu GPG natürlich vorher eingerichtet werden muss), so gebe ich einfach</p>
<p><code>
<pre>
:%!gpg -e -a -r andreas
</pre>
<p></code></p>
<p>ein. Damit wird der Text von GPG mit meinem eigenen öffentlichen Key verschlüsselt. Da RSA asymmetrisch ist, wird die Passphrase nur zum entschlüsseln benötigt, was mit</p>
<p><code>
<pre>
:%!gpg -d -q
</pre>
<p></code></p>
<p>bewerkstelligt wird.</p>
<p>In beiden Fällen sind Swap- und Viminfo-Dateien aber immer noch unverschlüsselt. Sie können entweder mit den Kommandozeilen-Parametern -n -i /dev/null oder mit dem Kommando</p>
<p><code>
<pre>
:set noswapfile viminfo=
</pre>
<p></code></p>
<p>deaktiviert werden.</p>
<p>Die Möglichkeit, so einfach externe Programme einsetzen zu können ist auch sonst immer wieder äusserst nützlich. Möchte ich beispielsweise einige Zeilen alphabetisch sortieren, so markiere ich sie einfach (Visual-Mode) und gebe</p>
<p><code>
<pre>
:!sort
</pre>
<p></code></p>
<p>ein.</p>
<h5>Mappings</h5>
<p>Für oft verwendete Kommandos lohnt es sich, eigene Mappings zu erstellen (diese können in der Datei .vimrc gesammelt werden). Ein Beispiel:</p>
<p><code>
<pre>
:map &lt;F2&gt; :execute '!links http://dict.leo.org/?search='.expand("&lt;cword&gt;")&lt;CR&gt;
</pre>
<p></code></p>
<p>Nun kann mit F2 auf einen Tastendruck die Übersetzung für das Wort, das sich aktuell unter dem Cursor befindet, bei Leo nachgeschlagen werden.</p>
<p>So, das ist im Moment alles was mir so einfällt. Ich hoffe es hat ein paar nützliche Tipps dabei und freue mich natürlich über Feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2007/09/16/mehr-vim-tipps/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
