If you haven't seen any markdown document yet, just head over to GitHub and enter any open-source project. The README file almost certainly will be written using Markdown. Basically, you use some 'code' before your text and your text will be formatted for display accordingly.
You can use the -a option and it will find all the Markdown files in the current directory and its subdirectories. You can use the arrow keys to scroll the files in the display. Up and down keys to move up and down, left and right arrow keys to move by pages.
md extension and then you can toggle the visualization of the editor between the code and the preview of the Markdown file; obviously, you can also open an existing Markdown file and start working with it. To switch between views, press Ctrl+Shift+V in the editor.
Markdown View is a Progressive Web App that lets you open . md files and view them in a non-geeky human-friendly form without anything extra. You can use it right there on the web, add it to your home screen on Android or iOS or get it from the Microsoft Store and get shell integration to open .
Pandoc can convert Markdown to groff man pages.
This (thanks to nenopera's comment):
pandoc -s -f markdown -t man foo.md | man -l -
should do the trick. The -s
option tells it to generate proper headers and footers.
There may be other markdown-to-*roff converters out there; Pandoc just happens to be the first one I found.
Another alternative is the markdown
command (apt-get install markdown
on Debian systems), which converts Markdown to HTML. For example:
markdown README.md | lynx -stdin
(assuming you have the lynx
terminal-based web browser).
Or (thanks to Danny's suggestion) you can do something like this:
markdown README.md > README.html && xdg-open README.html
where xdg-open
(on some systems) opens the specified file or URL in the preferred application. This will probably open README.html
in your preferred GUI web browser (which isn't exactly "less-style", but it might be useful).
I tried to write this in a comment above, but I couldn't format my code block correctly. To write a 'less filter', try, for example, saving the following as ~/.lessfilter
:
#!/bin/sh
case "$1" in
*.md)
extension-handler "$1"
pandoc -s -f markdown -t man "$1"|groff -T utf8 -man -
;;
*)
# We don't handle this format.
exit 1
esac
# No further processing by lesspipe necessary
exit 0
Then, you can type less FILENAME.md
and it will be formatted like a manpage.
If you are into colors then maybe this is worth checking as well:
terminal_markdown_viewer
It can be used straightforward also from within other programs, or python modules.
And it has a lot of styles, like over 200 for markdown and code which can be combined.
It is pretty alpha there may be still bugs
I'm the author of it, maybe some people like it ;-)
A totally different alternative is mad. It is a shell script I've just discovered. It's very easy to install and it does render markdown in a console pretty well.
I wrote a couple functions based on Keith's answer:
mdt() {
markdown "$*" | lynx -stdin
}
mdb() {
local TMPFILE=$(mktemp)
markdown "$*" > $TMPFILE && ( xdg-open $TMPFILE > /dev/null 2>&1 & )
}
If you're using zsh
, just place those two functions in ~/.zshrc
and then call them from your terminal like
mdt README.md
mdb README.md
"t" is for "terminal", "b" is for browser.
Using OSX I prefer to use this command
brew install pandoc
pandoc -s -f markdown -t man README.md | groff -T utf8 -man | less
Convert markupm, format document with groff, and pipe into less
credit: http://blog.metamatt.com/blog/2013/01/09/previewing-markdown-files-from-the-terminal/
alias mdless='_mdless() { if [ -n "$1" ] ; then if [ -f "$1" ] ; then cat <(echo ".TH $1 7 `date --iso-8601` Dr.Beco Markdown") <(pandoc -t man $1) | groff -K utf8 -t -T utf8 -man 2>/dev/null | less ; fi ; fi ;}; _mdless '
alias mdless='...'
: creates an alias for mdless
_mdless() {...};
: creates a temporary function to be called afterwards_mdless
: at the end, call it (the function above)Inside the function:
if [ -n "$1" ] ; then
: if the first argument is not null then...if [ -f "$1" ] ; then
: also, if the file exists and is regular then...cat arg1 arg2 | groff
... : cat sends this two arguments concatenated to groff; the arguments being:
<(echo ".TH $1 7
date --iso-8601Dr.Beco Markdown")
: something that starts the file and groff
will understand as the header and footer notes. This substitutes the empty header from -s
key on pandoc
.<(pandoc -t man $1)
: the file itself, filtered by pandoc
, outputing the man
style of file $1
| groff -K utf8 -t -T utf8 -man 2>/dev/null
: piping the resulting concatenated file to groff
:
-K utf8
so groff
understands the input file code-t
so it displays correctly tables in the file-T utf8
so it output in the correct format-man
so it uses the MACRO package to outputs the file in man
format2>/dev/null
to ignore errors (after all, its a raw file being transformed in man by hand, we don't care the errors as long as we can see the file in a not-so-much-ugly format).| less
: finally, shows the file paginating it with less
(I've tried to avoid this pipe by using groffer
instead of groff
, but groffer
is not as robust as less
and some files hangs it or do not show at all. So, let it go through one more pipe, what the heck!Add it to your ~/.bash_aliases
(or alike)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With