-
-
Save inhies/5145663 to your computer and use it in GitHub Desktop.
A plugin for rendering markdown and loading it in your web browser for viewing. This has been modified a few times and this version is geared towards Ubuntu and the blackfriday markdown processor. To use, just open a markdown file in vim and press ,p (comma then p) and it will render it to an html file and load it in your default browser.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" | |
" While editing a Markdown document in Vim, preview it in the | |
" default browser. | |
" | |
" Author: Nate Silva | |
" | |
" To install: Place markdown.vim in ~/.vim/ftplugin or | |
" %USERPROFILE%\vimfiles\ftplugin. | |
" | |
" To use: While editing a Markdown file, press ',p' (comma p) | |
" | |
" Tested on Windows and Mac OS X. Should work on Linux if you set | |
" BROWSER_COMMAND properly. | |
" | |
" Requires the `blackfriday-tool` command to be on the system path. | |
" If you do not have the `markdown` command, install it from here: | |
" | |
" https://github.com/russross/blackfriday-tool | |
" | |
" inhies, 12MAR2013, tweaked to work with blackfriday-tool, a | |
" utility for testing blackfriday, a golang | |
" markdown parsing engine: | |
" https://github.com/russross/blackfriday | |
" | |
" MOD, PP June 2011, slight changes to make it work on Ubuntu, | |
" mainly BROWSER_COMMAND and some other little | |
" things, less important ones. | |
function!PreviewMarkdown() | |
" ************************************************************** | |
" Configurable settings | |
let MARKDOWN_COMMAND = 'blackfriday-tool -page=true' | |
if has('win32') | |
" note important extra pair of double-quotes | |
let BROWSER_COMMAND = 'cmd.exe /c start ""' | |
else | |
let BROWSER_COMMAND = 'gnome-open' | |
endif | |
" End of configurable settings | |
" ************************************************************** | |
silent update | |
let output_name = tempname() . '.html' | |
" Some Markdown implementations, especially the Python one, | |
" work best with UTF-8. If our buffer is not in UTF-8, convert | |
" it before running Markdown, then convert it back. | |
let original_encoding = &fileencoding | |
let original_bomb = &bomb | |
if original_encoding != 'utf-8' || original_bomb == 1 | |
set nobomb | |
set fileencoding=utf-8 | |
silent update | |
endif | |
" Write the HTML header. Do a CSS reset, followed by setting up | |
" some basic styles from YUI, so the output looks nice. | |
let file_header = ['<html>', '<head>', | |
\ '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">', | |
\ '<title>Markdown Preview</title>', | |
\ '<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/3.3.0/build/cssreset/reset-min.css">', | |
\ '<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/3.3.0/build/cssbase/base-min.css">', | |
\ '<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/3.3.0/build/cssfonts/fonts-min.css">', | |
\ '<style>body{padding:20px;}div#container{background-color:#F2F2F2;padding:0 20px;margin:0px;border:solid #D0D0D0 1px;}</style>', | |
\ '</head>', '<body>', '<div id="container">'] | |
call writefile(file_header, output_name) | |
let md_command = '!' . MARKDOWN_COMMAND . ' "' . expand('%:p') . '" >> "' . | |
\ output_name . '"' | |
exec md_command | |
if has('win32') | |
let footer_name = tempname() | |
call writefile(['</div></body></html>'], footer_name) | |
silent exec '!type "' . footer_name . '" >> "' . output_name . '"' | |
exec delete(footer_name) | |
else | |
silent exec '!echo "</div></body></html>" >> "' . | |
\ output_name . '"' | |
endif | |
" If we changed the encoding, change it back. | |
if original_encoding != 'utf-8' || original_bomb == 1 | |
if original_bomb == 1 | |
set bomb | |
endif | |
silent exec 'set fileencoding=' . original_encoding | |
silent update | |
endif | |
exec '!' . BROWSER_COMMAND . ' "' . output_name . '"' | |
"exec input('Press ENTER to continue...') | |
"echo | |
exec delete(output_name) | |
endfunction | |
" Map this feature to the key sequence ',p' (comma lowercase-p) | |
map ,p :call PreviewMarkdown()<CR> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment