Markdown Viewer
I found a file formatted with Markdown. Could you guys suggest what viewer that I could use to view this type of files? Hopefully one without gui (if it’s possible)
Update
I was actually looking for a viewer that could parse markdown file format that does not need any conversion. But something close to that should be ok.
The following website provides a tool that will translate markdown into HTML:
http://daringfireball.net/projects/markdown/
Once you convert the file to HTML, there are a number of command line tools to use to view the file. Using a test file that contains markdown formatted-text, I found the following worked nicely.
$ wget http://daringfireball.net/projects/downloads/Markdown_1.0.1.zip
$ unzip Markdown_1.0.1.zip
$ cd Markdown_1.0.1/
$ ./Markdown.pl ~/testfile.markdown | html2text
html2text is one of many tools you can use to view html formatted text from the command line. Another option, if you want slightly nicer output would be to use lynx:
$ ./Markdown.pl ~/testfile.markdown | lynx -stdin
If you are an emacs user, someone has written a mode for markdown which is available here: http://jblevins.org/projects/markdown-mode/. This provides nice syntax highlighting as can be seen in the screenshot on that website.
All of these tools should be available for slackware.
I know you said you preferred a non-GUI application, but I am currently working on a GUI application called DownMarker which does this. You can find the source in a mercurial repository here. You can find a stand-alone executable to run with mono or .NET here.
Caveat: It is far from finished and only occasionally tested on linux/mono. Last test I did was on Mono 2.6. If you want to build it yourself will need a recent version of mercurial to clone the repository, and MonoDevelop to compile the application.
There’s also Discount, David Parsons’ C implementation of John Gruber’s Markdown text to html language. Discount consists of several command-line tools including markdown
, mkd2html
, makepage
, mktags
and theme
.
http://www.pell.portland.or.us/~orc/Code/discount/
In addition, there’s an implementation of markdown in C, using a PEG grammar.
https://github.com/jgm/peg-markdown
On Mac OS X you also may have a look at qlmarkdown
, a QuickLook generator for Markdown files.
Here is a commandline script which opens up a markdown file in your browser after converting it into html: http://minhajuddin.com/2012/03/16/markdown-viewer-script-for-your-markdown-documents/
Assuming you want to see what the html looks like: Use a web browser (with an addon) as a viewer.
For example, for Google Chrome there’s TextDown which also lets you edit files straight in the browser and see a live preview.
After adding it, you also need to go to chrome://chrome/extensions/ and check “allow access to file URLs” so you can open local files. A warning though: if you save (shift-ctrl-s) TextDown does not save to the file you opened but to your downloads folder.
Is a GUI program, but I find useful for this task ReText, that is an editor for Markdown and reStructuredText with a preview mode:
However, if you need see the file of ReText from a terminal, one option could be convert the marddown to html with pandoc
and see the html copy in lynx
:
pandoc file.mkd > file.html ; lynx file.html
Edit
There are a few more free markdown editors with preview available for *nix systems. Some in official repositories, others not, and each with their own strengths and weaknesses, but as suitable viewers I would like to highlight these:
-
Typora: It is still in beta phase, but it’s free meanwhile (it’s not clear how will be licensed the stable version). Although it is not FOSS, is perfect as markdown viewer because it work by default nearly as a WYSIWYG editor ("live preview mode") with a Outline panel (table of contents) that is very convenient for large files. The "source code mode" have syntax highlight, including bigger fonts for headings and italics for emphasis. And not only export to HTML, ODT and PDF. Also can import-export to several formats via
pandoc
integration. -
Ghostwriter: HTML preview only (non editable) but also have a nice outline panel and syntax highlight. Without import options, but export to several formats with pandoc and others processors (MultiMarkdown, Discount, or cmark) and have a live spellcheck via
hunspell
/myspell
. -
MdCharm: Similar to Retext, but support markdown (markdown extra) and MultiMarkdown. Show also an outline (ToC) panel.
For R Markdown
users, I should mention also editR. Is not a program, but a R package to edit/html preview of R Markdown in a browser. R Commander and RStudio also allow a easy preview in HTML, PDF or Word.
Now RStudio have a source and visual edit mode. The last is like type in a HTML preview, but we aware that this mode write the source markdown in their own way and rewrite any existing markdown with an alternative syntax. For example, the visual mode will change existing inline footnotes (as ^[text]
) by normal labeled footnotes. This will not change the output, but could be annoyingly that a minimal edit in visual mode might reformat the whole source text.
Using pandoc and lynx without creating temporary files:
pandoc file.md | lynx -stdin
A couple comments asked about or mentioned the possibility of using a browser add-on. I like this approach because I can edit markdown files in any Linux text editor (from nano to vim to Kate) and view the files in Firefox (my browser of choice).
I simply installed this Firefox add-on and it worked out of the box on Kubuntu 12.04 and Firefox 33.0. No tweaks required.
Markdown Viewer :: Add-ons for Firefox
https://addons.mozilla.org/en-us/firefox/addon/markdown-viewer/
(I also like ReText, but I would prefer to see something like ReText implemented as a plugin for Kate. ReText lacks too many features to compete with mature editors like Kate.)
For those who prefer w3m (vi style bindings):
pandoc file.md | w3m -T text/html
I put it in a script, mdview.sh, and put that in my path:
#!/bin/sh
pandoc "$1" | w3m -T text/html
You could have a look at mad which is very easy to use:
mad file.md
I wrote a lightweight terminal markdown viewer in python, for CLI or as lib:
It supports e.g. tables, admonitions and tons of color themes.
Usage:
mdv [-t THEME] [-T C_THEME] [-x] [-l] [-L] [-c COLS] [-f FROM] [-m] [-M DIR] [-H] [-A] [MDFILE]
Options:
MDFILE : Path to markdown file
-t THEME : Key within the color ansi_table.json. 'random' accepted.
-T C_THEME: Theme for code highlight. If not set: Use THEME.
-l : Light background (not yet supported)
-L : Display links
-x : Do not try guess code lexer (guessing is a bit slow)
-f FROM : Display FROM given substring of the file.
-m : Monitor file for changes and redisplay FROM given substring
-M DIR : Monitor directory for markdown file changes
-c COLS : Fix columns to this (default: your terminal width)
-A : Strip all ansi (no colors then)
-H : Print html version
You can use Grip, which renders the Markdown exactly as GitHub would (it uses the GitHub markdown API).
Install it with pip
:
pip install grip
To render a file example.md
:
grip -b example.md
What this looks like:
Privacy note
This solution sends the content of your Markdown document to GitHub.
If you do not trust GitHub/Microsoft and/or have sensitive data in your document, you may want to have a look at Grip’s issue to complete the offline renderer.
Credits
An easy solution for most situations: copy/paste the markdown into a viewer in the “cloud.” Here are two choices:
Nothing to install! Cross platform! Cross browser! Always available!
Disadvantages: could be hassle for large files, standard cloud application security issues.
I suggest taking a look at Atom. It is an excellent text editor with in-built markdown preview. I don’t usually use the markdown preview mode as it has a serious bug – line breaks (unless they come in pairs which indicates a <p>
tag’s contents) are preserved in the preview. But the syntax highlight mode is so good (since Markdown is optimized to be human readable and Atom’s colorization is excellent) that I usually end up reading markdown files in source view mode.
This is an alias that encapsulates a function:
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 '
Explanation
alias mdless='...'
: creates an alias formdless
_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:- arg1:
<(echo ".TH $1 7
date –iso-8601Dr.Beco Markdown")
: something that starts the file andgroff
will understand as the header and footer notes. This substitutes the empty header from-s
key onpandoc
. - arg2:
<(pandoc -t man $1)
: the file itself, filtered bypandoc
, outputing theman
style of file$1
- arg1:
| groff -K utf8 -t -T utf8 -man 2>/dev/null
: piping the resulting concatenated file togroff
:-K utf8
sogroff
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 inman
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 withless
(I’ve tried to avoid this pipe by usinggroffer
instead ofgroff
, butgroffer
is not as robust asless
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)
Readonly Vim with Markdown highlighting & folding
With Vim Markdown highlighting and folding up and running, the most straightforward solution is to evoke vim
in the read only mode with either vim -R
, or (at least on Ubuntu) more elegantly:
$ view filename.md
Add the following at the very bottom of your .vimrc
file, and view
will behave just like less
with the added benefit of your favourite syntax highlighting (not only for markdown!) and folding:
" less behaviour for view
" https://unix.stackexchange.com/a/314184/39845
" http://vim.wikia.com/wiki/Using_vim_as_a_syntax-highlighting_pager
function! LessBehaviour()
if (!&modifiable || &ro)
set nonumber
set nospell
set laststatus=0 " Status line
set cmdheight=1
set guioptions=aiMr " No menu bar, nor tool bar
noremap u <C-u>
noremap d <C-d>
noremap q :q<CR>
endif
endfunction
" https://vi.stackexchange.com/a/9101/3168
augroup ReadOnly
au!
au VimEnter * :call LessBehaviour()
augroup END
There exists also a more rigorous less.sh
script. On my system, it comes packaged with vim
. To find it, use:
$ find /usr/share/vim -name less.sh
However, contrary to the script listed above, folding will not work with this less.sh
.
Use the mdless
gem / command. It displays a Markdown file nicely in the terminal.
gem install mdless
Then run
mdless README.d
Links:
An IMHO heavily underestimated command line markdown viewer is the markdown-cli.
Installation
npm install markdown-cli --global
Usage
markdown-cli <file>
Features
Probably not noticed much, because it misses any documentation…
But as far as I could figure out by some example markdown files, some things that convinced me:
- handles ill formatted files much better (similarly to atom, github, etc.; eg. when blank lines are missing before lists)
- more stable with formatting in headers or lists (bold text in lists breaks sublists in some other viewers)
- proper table formatting
- syntax highlightning
- resolves footnote links to show the link instead of the footnote number (not everyone might want this)
Screenshot
Drawbacks
I have realized the following issues
- code blocks are flattened (all leading spaces disappear)
- two blank lines appear before lists
Just stumbled on this nice, simple and effective markdown editor.
The most painless way for me is to use mdless gem from Ruby.
- Install ruby
sudo apt-get install ruby
- Install mdless
sudo gem install mdless
- Open file via mdless
mdless filename.md
Easy and available in probably every Linux distro’s package repo. You’ll need ‘pandoc’, ‘w3m’ and ‘w3m-img’ packages. With the last w3m can display images.
pandoc -f markdown -t html README.md | w3m -T text/html
‘-f markdown’ is optional. This will give you a nice enough preview with images right in the terminal window, the only downside is that you can’t really distinguish inline code blocks.
You can install calibre software. It can be used to view markdown files.
I know this is a bit late, but KDE’s Okular (sudo apt install okular
on ubuntu) can view markdown quite well, and doesn’t have any conversion.
I use this function:
mdp() {
pandoc -t plain `find . -maxdepth 1 -iname "${1:-readme.md}"` | less
}
Usage:
mdp <file>
Will open parsed .md
file specified as argument
mdp
Will open readme.md
if there’s any
batcat
handles anything, and supports code snippets inside Markdown:
This is an old post but an up to date and far simpler solution, which should be compatible with any OS that supports Python is using the library rich.
After installing the library on your system you can render a markdown file straight from the terminal as follows:
$ python -m rich.markdown README.md
A short example taken directly from the project github page:
You can see the content in raw (on the left) and the rendered markdown (on the right).
You can also choose whether to use a pager or not, in case you wish to use its features or your terminal does not support colors, hyperlinks, etc.
Bit late, but as I was trying to find the same and this was still an open tab, https://github.com/charmbracelet/glow/ looks and works quite well.
It’s a product of https://charm.sh/ which makes terminals look better than they have any right to.
I’m currently checking MkDocs (https://www.mkdocs.org/). A small python app which can run as a server, serving your .md files as HTML in a browser. Any change you make in the .md file is automatically transferred to the HTML page in your browser. It has various plugins and themes, and the ability to build your .md files to HTML pages.
Since MkDocs is started from CLI, it basically is not a GUI. Your webbrowser however… Although Lynx could solve that issue.
It is a GUI option but it is the widely used code editor VS Code. Writing and rendering (viewing) markdown files is pretty easy.
It also renders in real time while you are editing the markdown file. You can also go to cursor position on the rendering or text position from the rendering.
To be honest, I am surprised how this option have not been mentioned earlier considering its popularity.