Looking for Markdown Plugin

  • I’m looking for a Markdown plugin for NPP 6.8.3. NppMarkdown didn’t work, I got an error like “There is an error in the DLL file”.
    Basically I want to highlight some words, hit a control key combination, like CTL-SH-B, and bold the words in Markdown (this puts ** on either side of the highlighted words).


  • Hello Chuck-Roberts,

    if you want only adding two asteriks in front and after the words then this pyhton script can do it as well.
    Here is described what needs to be done first.

    for i in range(editor.getSelections()):
        start = editor.getSelectionNStart(i)
        end = editor.getSelectionNEnd(i)
        word = editor.getTextRange(start,end)
        editor.setTarget(start, end)


  • I developed this a few years ago for the PythonScript plugin… Try it out… I never heard any complaints… :)


  • @Ethan-Piliavin

    thx for doing it.


  • I was doing a slew of posts here and on superuser.com the other day, and found myself wishing for the same thing that @Chuck-Roberts wanted: the ability to easily apply markdown syntax, so I was glad I had recently read this thread, and was able to come back, and study it and related links more.

    I cleaned up my results and posted them as PryrtMarkdown.md. Basically, I integrated multiple copies of @Claudia-Frank’s script into the “Python script” menu, and described how to add those scripts to both the Context Menu and call them via keyboard shortcuts.

    Since I liked @Ethan-Piliavin’s Markdown-to-HTML converter, I made sure to add that to the Context Menu I described, as well. :-)

    For those who don’t want to follow a random link, or in case of link rot, I’ve pasted my writeup here, as well.


    Restart Notepad++ after installing your plugins.

    Create Python Scripts

    We need Python scripts to take the currently-selected text, and add the markdown notation to make it bold, emphasized, etc.

    You may download the directory of scripts from my dropbox (at least until I hit bandwidth limitations). You can grab the files individually, or grab the whole folder using “Download as .zip” from the Dropbox interface. Save the scripts in in %ProgramFiles%\Notepad++\Plugins\Scripts\PryrtMarkdown\ or %AppData%\Notepad++\Plugins\config\PythonScript\scripts\PryrtMarkdown.

    If you prefer, you can create and edit the scripts manually:

    1. Create new script(s) using Plugins > Python Script > NewScript

    2. Save script(s) in %ProgramFiles%\Notepad++\Plugins\Scripts\PryrtMarkdown\ or %AppData%\Notepad++\Plugins\config\PythonScript\scripts\PryrtMarkdown

    3. Copy/Paste the content from Claudia’s script, quoted here with attributions and a link for markdown syntax help:

       for i in range(editor.getSelections()):
           start = editor.getSelectionNStart(i)
           end = editor.getSelectionNEnd(i)
           word = editor.getTextRange(start,end)
           editor.setTarget(start, end)
    4. For each script, edit the last line to use the appropriate Markdown command:

      • bold: **{0}**

      • emphasis: _{0}_

      • inline code: ` {0} `

      • link:URL: [link text]({0} "OptionalTitle") => Will use selected text as the link URL

        • just delete the space ane "OptionalTitle" if you don’t want the optional hover/title for your link
      • link:Text: [{0}](URL "OptionalTitle") => Will use selected text as the link TEXT

        • just delete the space ane "OptionalTitle" if you don’t want the optional hover/title for your link

    You may freely edit or extend these scripts to create any other Markdown syntax you would like; these are just the ones I found easiest to copy/tweak from the script that Claudia provided. I am sure it wouldn’t be that much more effort to have it automatically select the whole row and surround by sets of # blah # for various levels of headers. (I just don’t know the API well enough to do more than simple tweaks to the script, for now.)

    Context Menus

    Notepad++ has an extensible Right-Click Context menu, and you can add these commands into

    1. To enable the scripts so the Right-Click Context Menu can access them, you need to add the scripts to the main Python Script menu, rather than leaving them only in the sub-menus:
    * `Plugins > Python Script > Configuration`
    * Select either `(*) User Scripts` (%AppData%) or `(*) Machine Scripts` (%ProgramFiles%)
    * Select each script you want to add to the menu, then click the `Add` button on the left `Menu Items` side
    * Select `okay` when all the scripts have been added to the menu.
    1. To add it to Right-Click Context Menu:
    * Open `%ProgramFiles%\Notepad++\contextMenu.xml` or `%AppData%\Notepad++\contextMenu.xml` (as appropriate for your configuaration) or choose `Settings > Edit Popup Context Menu` to edit the `AppData` directly.
    * Insert the following code where you'd like it to appear in the context menu
            <Item id="0"/>
            <Item FolderName="Markdown commands" PluginEntryName="Python Script" PluginCommandItemName="MarkBold"           ItemNameAs="Mark Selection as Bold"           />
            <Item FolderName="Markdown commands" PluginEntryName="Python Script" PluginCommandItemName="MarkEm"             ItemNameAs="Mark Selection as Emphasis"       />
            <Item FolderName="Markdown commands" PluginEntryName="Python Script" PluginCommandItemName="MarkCodeInline"     ItemNameAs="Mark Selection as Inline-Code"    />
            <Item FolderName="Markdown commands" PluginEntryName="Python Script" PluginCommandItemName="MarkKbd"            ItemNameAs="Mark Selection as Keyboard"       />
            <Item FolderName="Markdown commands" PluginEntryName="Python Script" PluginCommandItemName="MarkLinkInlineURL"  ItemNameAs="Mark Selection as URL of Inline-Link"   />
            <Item FolderName="Markdown commands" PluginEntryName="Python Script" PluginCommandItemName="MarkLinkInlineText" ItemNameAs="Mark Selection as Text of Inline-Link"  />
            <!-- optional: Ethan Piliavin's Markdown to HTML converter -->
            <Item FolderName="Markdown commands" PluginEntryName="Python Script" PluginCommandItemName="Markdown"           ItemNameAs="Convert Markdown to HTML"         />
    * Exit NPP and reload.
    1. You should have a new section, “Markdown Commands”, in your Right-Click Context Menu.

      • Highlight Text

      • Choose one of the commands, and the script will surround your selection appropriately

      • “Convert Markdown to HTML”:

        • If you have text selected, it will only convert the selected text

        • If you have no text selected, it will convert the entire document

    Keyboard Shortcuts

    If you also want keyboard shortcuts, use the Settings > Shortcut Mapper..., and select the Plugin Commands tab. You can assign shortcuts to the “MarkBold”, “MarkEm”, … rows as per normal. (They will probably be near the end of the list, since they were the most-recently added.)


    I knew I could copy the results of the Markdown to HTML conversion into an HTML file, then use “Preview HTML” plugin (Ctrl+Shift+H). But while searching around for alternatives, I had run across this superuser.com answer, which shows a way to pipe the markdown source directly into Preview HTML

    • you need to have standalone Python excecutable installed

    • you need to install the python markdown package:

      • pip install markdown


      • easy_install markdown

        depending on your python setup.

    • Plugins > Preview HTML > Edit filter definitions: add

      ; Content of Filters.ini file
      Extension=.md .markdown
      Command=python -m markdown "%1"

    I did a restart of NPP; I don’t know if that was necessary. Thereafter, if I am editing a .md or .markdown file, and have the Preview HTML window open using Ctrl+Shift+H, the markdown is automatically converted to HTML and into the Preview window. :-)

  • Perl Script “MSI” Installer” should, of course, read “Python Script “MSI” Installer”. (Sorry to all the Python aficionados out there; my Perl roots are showing.)

    Speaking of Perl, if that’s your scripting language of choice, installing Text::Markdown will install markdown.pl and markdown.bat (genererally into ...\site\bin\markdown.bat or similar). If you don’t have the Python standalone executable, but do have Perl, you can change the Preview HTML filter definition for Markdown to

    Extension=.md .markdown
    Command=markdown.bat "%1"

    If your various perl bin directories aren’t in your path, you will need to use the full path to those directories (such as Command=\strawberry\perl\site\bin\markdown.bat "%1").

    If you use extensions beyond the original daringfireball syntax in your markdown, you will probably want Text::MultiMarkdown with its associated multimarkdown.pl/multimarkdown.bat for your filter, instead.

Log in to reply