Was des Maurers Kelle, des Malers Pinsel und des Mechanikers Schraubenschlüssel ist bei mir (neben InDesign und Photoshop) TextWrangler.
Mit keinem anderen Programm habe ich schon so viele Stunden verbracht. Sämtliche Websites und Skripte werden von mir in TextWrangler getippt.

Was hatte ich schon andere Texteditoren getestet – nur um sicher zu gehen, dass ich doch nichts besseres verpasse – keiner war so flexibel wie TextWrangler. Besonders wichtig ist es für mich, Dateien direkt via FTP zu öffnen und bearbeiten (ohne Umwege wie eine Verzeichnis-Synchronisation oder temporärer Datei-Müll) und ein schlankes Programm zu haben (krasse Gegenbeispiele: Atom oder Brackets).
Meiner Ansicht nach könnte es nur ein Programm mit TextWrangler aufnehmen: BBEdit (natürlich)!

Sowohl TextWrangler wie auch BBEdit haben eine praktische Funktion namens "Text Filters" (Menü Window > Palettes > Text Filters): Mit Hilfe von Bash/Perl/Python/Ruby-Skripten lässt sich der Text des aktiven Fensters oder der Auswahl manipulieren.

Ein paar meiner eigenen Text Filter möchte ich an dieser Stelle veröffentlichen.

Die Skripte sind im Verzeichnis ~/Library/Application Support/TextWrangler/Text Filters/ zu platzieren (für BBEdit gilt natürlich ein anderes Verzeichnis). Über die Palette aus dem Menü Window > Palettes > Text Filters lässt sich jedem Skript (nach einem TextWrangler-Neustart dort zu finden) ein Tastenkürzel zuordnen.

Calculate

Manchmal will man schnell etwas ausrechnen. Der Taschenrechner auf dem Dashboard ist ist nur ein Tastenkürzel entfernt (aber meist dauert es dann doch länger, bis das ganze Dashboard geladen ist), ebenso die Google-Suche, die seit einigen Jahren auch rechnen kann.
Aber wieso nicht gleich nativ in TextWrangler rechnen? Dafür ist folgendes Skript Calculate.pl, dem ich das Testenkürzel ctrl = zugewiesen habe

#!/usr/bin/perl -w
use strict;
while (<>) {
  if ($_ =~ m/[^-0-9\+\*\/^\(\)\s\.,:]/) {
    print $_;
  } else {
    $_ =~ s/,/./g;
    $_ =~ s/:/\//g;
    print eval($_);
    }
  }

Wandelt die Zeile 10*(15+1*3) in 180 um.

Es empfiehlt sich, diese Zeile zu markieren, bevor man den Text Filter ausführt, sonst wird der Text Filter auf das gesamte Dokument angewendet.
Das Skript ignoriert zwar Zeilen, die etwas anderes als Zahlen und Rechen-Zeichen enthalten, aber man weiß ja nie...

CSV tabellarisch darstellen

Natürlich kann man eine CSV-Datei in Excel öffnen, wenn man sie etwas übersichtlicher darstellen möchte. Mit dem folgenden Skript Col-o-nize.pl wird eine CSV-Datei wie rechts abgebildet im TextWrangler-Fenster dargestellt.

#!/usr/bin/perl -w
use strict;
my @lengths;
my @row;
my @doc;
my $colnr;
my $txt;

while (<>) {
  push(@doc, $_);
  @row   = split(/;/, $_);
  $colnr = 0;
  foreach (@row) {
    if (!$lengths[++$colnr] || $lengths[$colnr] < length($_)) {$lengths[$colnr] = length($_);}
    }
 
  }

foreach (@doc) {
  @row   = split(/;/, $_);
  $colnr = 0;
  foreach (@row) {
    $txt = $_;
    $txt =~ s/\n//;
    $txt =~ s/^ //;
    $txt =~ s/[^!-~\s]//g;
    print $txt;
    print " "x($lengths[++$colnr]-length($txt)+2);
    }
  print "\n";
  }

Mail-Hyperlink

Will man eine E-Mail-Adresse auf einer Website als Link darstellen, hat man immer eine rum-Kopiererei, weil die Adresse sowohl im href als auch als später angezeigter Text erscheinen soll.
Markiert (!) man eine E-Mail-Adresse und führt danach folgenden Text-Filter aus, hat man mit einem Textenkürzel eine E-Mail-Adresse als Link.

#!/usr/bin/perl -w
use strict;
while (<>) {
  print "<a href='mailto:", $_, "'>", $_, "</a>";
  }

Als $_POST-Variable

$_POST-Variablen-Namen zu tippen kann manchmal nerven.
Einfacher geht es mit folgendem Text-Filter, der $test und test in
$_POST['test']
umwandeln würde.
Wichtig auch hier, dass man den zu wandelnden Text vor Ausführung des Filters markiert.

#!/usr/bin/perl -w
use strict;
while (<>) {
  $_ =~ s/\$//;
  print "\$_POST['", $_, "']"
  }

Regex-ize

Manchmal möchte man sich etwas Denkerei beim Erstellen einer Regular Expression sparen. Folgender Textfilter wandelt Zeichenfolgen in einen RegEx-Ausdruck, für den diese Zeichenfolge zutreffen würde.

Beispiele:

45631205451          => \d{11}
Test-Text            => \w{4}-\w{4}
0190/54563121        => \d{4}\/\d{8}
info@mailadresse.net => \w{4}@\w{11}\.\w{3}

#!/usr/bin/perl -w
use strict;
sub charToPlaceholder($) {
  my ($c) = shift;
  if ($c =~ m/\d/) {return "\\d";}
  elsif ($c =~ m/\w/) {return "\\w";}
  elsif ($c =~ m/\//) {return "\\/";}
  elsif ($c =~ m/\[/) {return "\\[";}
  elsif ($c =~ m/\]/) {return "\\]";}
  elsif ($c =~ m/\(/) {return "\\(";}
  elsif ($c =~ m/\)/) {return "\\)";}
  elsif ($c =~ m/\./) {return "\\.";}
  elsif ($c =~ m/\+/) {return "\\+";}
  elsif ($c =~ m/\*/) {return "\\*";}
  elsif ($c =~ m/\?/) {return "\\?";}
  else {return "$c";}
 
  }

while (<>) {
  my @chars = split(//, $_);
  my $preChar = "";
  my $similarCount = 1;
  foreach my $char (@chars) {
    $char = charToPlaceholder($char);
    if ($preChar eq "") {$preChar = $char;}
    elsif ($char eq $preChar) {$similarCount++;}
    else {
      print $preChar;
      if ($similarCount > 1) {print "{$similarCount}";}
      $similarCount = 1;
      $preChar = $char;
      }
    }
  print $preChar;
  if ($similarCount > 1) {print "{$similarCount}";}
}

Noch ein paar weitere Text-Filter, die ich so gefunden habe...

JSON Pretty Print formatter

jsbeautifier (Macht minified JavaScript wieder etwas lesbarer)

JavaScript-Minifier (Hier geht's in die andere Richtung)

Entable (Hier hatte jemand so eine ähnliche Idee, wie ich mit meinem Col-o-nize-Skript)