Mittlerweile schreib ich ja so ziemlich alles mit Markdown. Das hat einfach den Vorteil, dass ich keine aufwändigen Schreibprogramme brauche wie zum Beispiel Word oder Libre Office und Konsorten, sondern es reicht ein ganz normaler Texteditor. Und den gibt es auf jedem System ist grunsätzlich immer gleich zu bedienen… Man tippt einfach.
Markdown ist gut strukturiert und damit dann auch ohne Zusatzprogramme gut lesbar. Wenn man dennoch eine “schöne” Formatierung haben will mit verschiedenen Schriftarten, -Größen oder -Farben, kann man diese Markdown-Files auch noch mit relativ wenig Aufwand in verschiedene Formate, wie Html oder Pdf konvertieren.
Ja, man kann sogar auch ganze Bücher damit schreiben, aber da komme ich in einem späteren Artikel vielleicht darauf, wenn ich dazu Zeit habe.

Jetzt aber zu meinem aktuellen Anliegen:
Ich schreibe wie gesagt nahezu alles mit Markdown. Auch meine Notizen, auf meinen Linux-Servern. Jetzt kann es aber vorkommen, dass ich die Notizen gerne mal sauber formatiert ausgeben will. Und zwar auf der Konsole, da man per ssh nunmal in der Regel nur eine Konsole zur Verfügung hat.
Das ist dann schon nicht mehr so einfach, aber auch machbar, da es mittlerweile einige netten Tools gibt, die Markdown entsprechend für die Konsole aufbereiten.
Eines davon ist zum Beispiel der Terminal Markdown Viewer, den man auf Guthub unter folgender Adresse findet: https://github.com/axiros/terminal_markdown_viewer

Installation von Terminal Markdown Viewer

Die Installation ist an sich auf der github-Seite recht gut beschrieben. Dennoch will ich sie hier nochmal zusammenfassen.

Zuerst benötigen wir python und python pip. Python ist ja in den meisten Fällen schon installiert, aber falls nicht, kann man hier einfach eine Standard-Installation durchführen:

sudo apt install python python-pip

Anschließend braucht man verschiedene Python-Module, die man dann per pip installieren kann:

sudo pip install markdown
sudo pip install pygments
sudo pip install pyyaml
sudo pip install docopt
sudo pip install tabulate

Dann holt man sich mal das Paket aus Github:

git clone https://github.com/axiros/terminal_markdown_viewer

und wechsel ist das entsprechende Verzeichnis, das damit angelegt wurde. Hier kann man dann das Setup starten:

sudo ./setup.py install

Jetzt kann man das Tool schon verwenden. Legen wir dazu einfach mal eine Sample-Markdown-Datei an:

# header 1

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

## header 2

  * list1
  * list2
  * list3

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

Wenn man jetzt auf der Kommandozeile das folgende Kommando ausführt, wird der Markdown-Text aufbereitet ausgegeben:

mdv sample.md

Bessere Integration

Das ist jetzt schon alles recht schön. Aber mich stört hier jetzt noch eine Kleinigkeit. Der Text wird nämlich einfach ausgegeben, aber man kann nicht wirklich scrollen (lediglich das herkömmliche Scrollen mit Bild auf/ab) und man kann auch nicht gezielt an eine Stelle springen.
In der Regel verwende ich zum Anzeigen von Textdateien immer less. Damit kann man dann schön vor- und zurückblätter und man kann auch durch die Suche an bestimmte Stellen innerhalb der Datei springen.
Durch das Command Piping kann man das alles ja recht schön verbinden:

mdv sample.md | less

Allerdings wird man jetzt feststellen, dass die Ausgabe jetzt nicht mehr farbig ist, sondern seltsame Steuerzeichen stattdessen angezeigt werden. Das hängt damit zusammen, dass less standardmäßig keine Farbcodes ausgibt, sondern stattdessen die Steuerzeichen ausgibt. Mit dem Parameter -R kann man das ändern. Das Kommando würde also jetzt so aussehen:

mdv sample.md | less -R

Und siehe da… Jetzt sieht das auch alles nach was aus.
Das Einzige, was mir immer noch nicht gefällt ist, dass ich jetzt relativ viel eingeben muss, um eine Datei anzuzeigen (ja, ich bin schreibfaul). Das heißt, ich würde mir für dieses Kommando ein alias anlegen. Allerdings wüsste ich jetzt nicht, wie man ein alias mit einem Parameter dazwischen drin anlegt.
Es gibt aber auch noch eine andere Möglichkeit: Die Bash-Functions.
Dazu lege ich mir eine Datei in meinem Homeverzeichnis an:

nano ~/.bash_functions

Der Inhalt sieht folgendermaßen aus:

function view { mdv "$1" | less -R; }
export -f view

Ich erzeuge also eine Funktion mit dem Namen view. Die Funktion selbst enthält genau das Kommando, das ich mir vorher erarbeitet habe.
Anschließen wird diese Funktion noch exportiert, wie man es bei Systen-Variablen auch macht. Der Parameter -f gibt an, dass es sich dabei um eine Funktion handelt.
Jetzt muss man diese Funktion nur noch bekannt machen. Dazu muss man in der .bashrc einen kleinen Eintrag machen, der die Datei beim Start der Shell in den Speicher lädt, so dass sie künftig ausgeführt werden kann. Ich hab es dabei so gemacht, dass ich einfach den Block kopiert habe, mit dem die .bash_aliases geladen wird. Im Grunde ist es nämlich genau das gleiche und nur eine andere Datei.

if [ -f ~/.bash_functions ]; then
    . ~/.bash_functions
fi

Kurz beschrieben: Wenn die Datei existiert, soll sie geladen werden.

Wenn man jetzt eine neue Konsole öffnet, wird die Datei geladen und es steht absofort das Kommando view zur Verfügung und stellt dabei genau das erarbeitete Kommando zur Verfügung.

view sample.md

Das Quellcode-Verzeichnis, das wir aus Github geladen haben, kann man übrigens auch wieder löschen, da das Programm selbst ja mittlerweile installiert ist.