Here are some quick tips for writing Fountain screenplays in Vim:
First, turn on syntax highlighting by adding this ~/.vim/syntax/fountain.vim file:
" Vim syntax file " Language: Fountain screenplay " File: .fountain, .spmd, .txt " Reference: http://fountain.io/ " Maintainer: Carson Fire <carsonfire@gmail.com> " Last Change: February 20, 2012 " Version: 2.02 if exists("b:current_syntax") finish endif syn sync minlines=200 syn match fountainSection1 "^\s*# \(\_[^#]\)" fold transparent contains=ALL syn region fountainTitlePage start="\%^\(.*\):" end="^$" contains=fountainBoneyard,fountainNotes syn match fountainCharacter "^\(\L\)*$" syn region fountainDialogue matchgroup=fountainCharacter start="^\(\L\)*$" end="^\s*$" contains=fountainCharacter,fountainParenthetical,fountainBoneyard,fountainNotes,fountainEmphasis syn match fountainParenthetical "^\s*\((.*)\)$" contained contains=fountainBoneyard,fountainNotes syn match fountainTransition "^\(\L\)* TO:$" contains=fountainBoneyard,fountainNotes syn match fountainTransitionForced "^\s*>\(.*\)" contains=fountainBoneyard,fountainNotes syn match fountainCentered "^\s*>\(.*\)<" contains=fountainBoneyard,fountainNotes syn match fountainUnderlined "_[^_]*_" syn match fountainItalic "\*[^\*]*\*" syn match fountainBold "\*\*[^\*]*\*\*" syn match fountainBoldItalic "\*\*\*[^\*]*\*\*\*" syn match fountainPagebreak "^===[=]*$" syn region fountainNotes start="\[\[" end="\]\]" contains=xLineContinue syn region fountainHeader1 start="^\s*# " end="$" contains=fountainBoneyard,fountainNotes syn region fountainHeader2 start="^\s*## " end="$" contains=fountainBoneyard,fountainNotes syn region fountainHeader3 start="^\s*### " end="$" contains=fountainBoneyard,fountainNotes syn region fountainHeader4 start="^\s*#### " end="$" contains=fountainBoneyard,fountainNotes syn region fountainHeader5 start="^\s*##### " end="$" contains=fountainBoneyard,fountainNotes syn region fountainHeader6 start="^\s*###### " end="$" contains=fountainBoneyard,fountainNotes syn region fountainSynopses start="^\s*= " end="$" contains=fountainBoneyard,fountainNotes syn region fountainSceneHeading start="^\s*\(\.\|INT\. \|EXT\. \|INT\./EXT\. \|INT/EXT\. \|INT \|EXT \|INT/EXT \|I/E \|int\. \|ext\. \|int\./ext\. \|int/ext\. \|int \|ext \|int/ext \|i/e \)" end="$" contains=fountainSceneNumber,fountainBoneyard,fountainNotes syn region fountainBoneyard start="/\*" end="\*\/" contains=xLineContinue syn match xLineContinue "\\$" contained syn region fountainSceneNumber start="#" end="#" contained hi def link fountainTitlePage title hi def link fountainSceneHeading title hi def link fountainCharacter identifier hi def link fountainDialogue statement hi def link fountainParenthetical function hi def link fountainTransition todo hi def link fountainTransitionForced todo hi def link fountainCentered character hi fountainUnderlined gui=underline hi fountainItalic gui=italic cterm=italic hi fountainBold gui=bold cterm=bold hi fountainBoldItalic gui=bold,italic cterm=bold,italic hi def link fountainPagebreak conditional hi def link fountainActionForced normal hi def link fountainNotes comment hi def link fountainBoneyard nontext hi def link fountainHeader1 htmlH1 hi def link fountainHeader2 htmlH2 hi def link fountainHeader3 htmlH3 hi def link fountainHeader4 htmlH4 hi def link fountainHeader5 htmlH5 hi def link fountainHeader6 htmlH6 hi def link fountainSynopses number hi def link fountainSceneNumber number let b:current_syntax = "fountain"
Next, add some or more of this ~/.vim/ftdetect/fountain.vim file:
au BufRead,BufNewFile *.fountain set filetype=fountain au BufRead,BufNewFile *.fountain set binary au BufRead,BufNewFile *.fountain set noeol au BufRead *.fountain %s/^Draft date: .*$/\=strftime("Draft date: %m\/%d\/%Y")/
The first line actually enables the syntax highlighting. The second and third make Vim play nicely with Slugline, which doesn't include a trailing newline at the end of the file. The fourth automatically updates the draft date each time you load your screenplay.