Using Vim for Tricky Regular Expressions

So, I was trying to convert an orgmode file to html. There is an orgmode-export-as-html function, but it was choking on something, so I needed to do the conversion by hand. I tried many, many times to convert the file with emacs regular expressions, but was unsuccessful. The difficulty was the orgmode headlines, which look like this:

*** Use the sort function

I wanted to simply transform this into

<h3>Use the sort function</h3>

Vim Regexp

I was finally able to match the headline in vim with the following regular expression:

\*\*\* \(\(w*\).*\)

  • The literal asterisks had to be matched with *.
  • Next, to match to the end of the line I used: ((w).)
  • ( ) creates a matching group, which can be used later in the replacement string with \1 or \2 etc.
  • Also (w). matches 1 or more words

    Vim Substitution Expression

    %s/\*\*\* \(\(w*\).*\)/<h3>\1<\/h3>/
    

  • The % matches the entire file
  • The \1 matches the first matching group in the search string That is, \1 will match everything on the line after the 3 literal asterisks.

    Testing Matching String

    Its easy to test a regular expression in vim. While in command mode (hit Esc if you are in input mode), type a / and then type your regular expression and then press "return", like so:

    /\*\*\* [RETURN]
    

    Your matches will be highlighted. Click 'n' to jump to the next match.

    Getting back to previous substitution

    Vim has a cool, intuitive way to explore your command history. In command mode, type ":" as for typing an ex command, and then press the up arrow to scroll up to through your command history. This is really handy for using previous, complex regular expressions.

    Here's a gist with some more regular expressions

  • Tags:

    Add new comment