After using Markdown daily for many years, including all the content in this blog, I learned there was another way to do line breaks.

I had always thought that the only way to do was to either have a blank line (which is not a line break, but a paragraph break) or add the <br /> HTML tag. I avoided the latter because I think it just plain looks ugly, and erases the elegance of using markdown, formatting without tags.

Today, I learned that you can simply add two spaces at the end of the line to force a line break. When I first heard this, I thought it was one of those newfangled extended markdown syntaxes. That’s not the case, and this syntax is in John Gruber’s original syntax documentation:

When you do want to insert a <br /> break tag using Markdown, you end a line with two or more spaces, then type return.

I must’ve completely missed that every time I’ve read the document.

My elation at learning a new thing was quickly dashed when I remembered that I hate trailing whitespace and use a trailing-whitespace pre-commit hook on every repository I manage. I like this syntax feature so much that I started considering how I would add an exception. A quick look at the hook’s source code showed that someone had already thought of that:

    # preserve trailing two-space for non-blank lines in markdown files
    if is_markdown and (not line.isspace()) and line.endswith(b'  '):
        return line[:-2].rstrip(chars) + b'  ' + eol
    return line.rstrip(chars) + eol

All I needed to do was add an argument to my .pre-commit-config.yaml file for that particular hook:

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
  rev: v4.3.0
  hooks:
  - id: trailing-whitespace
    exclude: .gitignore
    args:
    - --markdown-linebreak-ext=md
...

Now, trailing whitespace is still removed, except when it is used for forcing line-breaks in markdown files.