packages feed

docvim-0.3.1.3: tests/fixtures/integration/ferret/golden/ast.golden

Project
  [ DocBlock
      [ PluginAnnotation "ferret" "Ferret plug-in for Vim"
      , TOC
          [ "Intro"
          , "Installation"
          , "Commands"
          , "Mappings"
          , "Options"
          , "Custom autocommands"
          , "Overrides"
          , "Troubleshooting"
          , "FAQ"
          , "Related"
          , "Website"
          , "License"
          , "Development"
          , "Authors"
          , "History"
          ]
      ]
  , HeadingAnnotation "Intro"
  , Blockquote
      [ Paragraph
          [ Plaintext "\"ferret"
          , Whitespace
          , Plaintext "(verb)"
          , BreakTag
          , Plaintext "(ferret"
          , Whitespace
          , Plaintext "something"
          , Whitespace
          , Plaintext "out)"
          , Whitespace
          , Plaintext "search"
          , Whitespace
          , Plaintext "tenaciously"
          , Whitespace
          , Plaintext "for"
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Plaintext "find"
          , Whitespace
          , Plaintext "something:"
          , Whitespace
          , Plaintext "she"
          , Whitespace
          , Plaintext "had"
          , Whitespace
          , Plaintext "the"
          , Whitespace
          , Plaintext "ability"
          , Whitespace
          , Plaintext "to"
          , Whitespace
          , Plaintext "ferret"
          , Whitespace
          , Plaintext "out"
          , Whitespace
          , Plaintext "the"
          , Whitespace
          , Plaintext "facts.\""
          ]
      ]
  , LinkTargets [ "ferret-features" ]
  , Paragraph
      [ Plaintext "Ferret"
      , Whitespace
      , Plaintext "improves"
      , Whitespace
      , Plaintext "Vim's"
      , Whitespace
      , Plaintext "multi-file"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "four"
      , Whitespace
      , Plaintext "ways:"
      ]
  , SubheadingAnnotation "1. Powerful multi-file search"
  , Paragraph
      [ Plaintext "Ferret"
      , Whitespace
      , Plaintext "provides"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Link ":Ack"
      , Whitespace
      , Plaintext "command"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "searching"
      , Whitespace
      , Plaintext "across"
      , Whitespace
      , Plaintext "multiple"
      , Whitespace
      , Plaintext "files"
      , Whitespace
      , Plaintext "using"
      , Whitespace
      , Plaintext "The"
      , Whitespace
      , Plaintext "Silver"
      , Whitespace
      , Plaintext "Searcher"
      , Whitespace
      , Plaintext "(https://github.com/ggreer/the_silver_searcher),"
      , Whitespace
      , Plaintext "Ack"
      , Whitespace
      , Plaintext "(http://beyondgrep.com/),"
      , Whitespace
      , Plaintext "or"
      , Whitespace
      , Plaintext "Grep"
      , Whitespace
      , Plaintext "(http://www.gnu.org/software/grep/)."
      , Whitespace
      , Plaintext "Support"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "passing"
      , Whitespace
      , Plaintext "options"
      , Whitespace
      , Plaintext "through"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "underlying"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "command"
      , Whitespace
      , Plaintext "exists,"
      , Whitespace
      , Plaintext "along"
      , Whitespace
      , Plaintext "with"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "ability"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "full"
      , Whitespace
      , Plaintext "regular"
      , Whitespace
      , Plaintext "expression"
      , Whitespace
      , Plaintext "syntax"
      , Whitespace
      , Plaintext "without"
      , Whitespace
      , Plaintext "doing"
      , Whitespace
      , Plaintext "special"
      , Whitespace
      , Plaintext "escaping."
      ]
  , Paragraph
      [ Plaintext "Shortcut"
      , Whitespace
      , Plaintext "mappings"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "provided"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "start"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Link ":Ack"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "(<leader>a)"
      , Whitespace
      , Plaintext "or"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "word"
      , Whitespace
      , Plaintext "currently"
      , Whitespace
      , Plaintext "under"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "cursor"
      , Whitespace
      , Plaintext "(<leader>s)."
      ]
  , Paragraph
      [ Plaintext "Results"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "normally"
      , Whitespace
      , Plaintext "displayed"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "window,"
      , Whitespace
      , Plaintext "but"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "also"
      , Whitespace
      , Plaintext "provides"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Link ":Lack"
      , Whitespace
      , Plaintext "command"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "behaves"
      , Whitespace
      , Plaintext "like"
      , Whitespace
      , Link ":Ack"
      , Whitespace
      , Plaintext "but"
      , Whitespace
      , Plaintext "uses"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "location-list"
      , Whitespace
      , Plaintext "instead,"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "<leader>l"
      , Whitespace
      , Plaintext "mapping"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "shortcut"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Link ":Lack"
      , Plaintext "."
      ]
  , Paragraph
      [ Plaintext "Finally,"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "offers"
      , Whitespace
      , Plaintext "integration"
      , Whitespace
      , Plaintext "with"
      , Whitespace
      , Plaintext "dispatch.vim"
      , Whitespace
      , Plaintext "(https://github.com/tpope/vim-dispatch),"
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "enables"
      , Whitespace
      , Plaintext "asynchronous"
      , Whitespace
      , Plaintext "searching"
      , Whitespace
      , Plaintext "despite"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "fact"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "Vim"
      , Whitespace
      , Plaintext "itself"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "single-threaded."
      ]
  , SubheadingAnnotation "2. Streamlined multi-file replace"
  , Paragraph
      [ Plaintext "The"
      , Whitespace
      , Plaintext "companion"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Link ":Ack"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Link ":Acks"
      , Whitespace
      , Plaintext "(mnemonic:"
      , Whitespace
      , Plaintext "\"Ack"
      , Whitespace
      , Plaintext "substitute\","
      , Whitespace
      , Plaintext "accessible"
      , Whitespace
      , Plaintext "via"
      , Whitespace
      , Plaintext "shortcut"
      , Whitespace
      , Plaintext "<leader>r),"
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "allows"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "run"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "multi-file"
      , Whitespace
      , Plaintext "replace"
      , Whitespace
      , Plaintext "across"
      , Whitespace
      , Plaintext "all"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "files"
      , Whitespace
      , Plaintext "placed"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "window"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "previous"
      , Whitespace
      , Plaintext "invocation"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Link ":Ack"
      , Plaintext "."
      ]
  , SubheadingAnnotation "3. Quickfix listing enhancements"
  , Paragraph
      [ Plaintext "The"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "listing"
      , Whitespace
      , Plaintext "itself"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "enhanced"
      , Whitespace
      , Plaintext "with"
      , Whitespace
      , Plaintext "settings"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "improve"
      , Whitespace
      , Plaintext "its"
      , Whitespace
      , Plaintext "usability,"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "natural"
      , Whitespace
      , Plaintext "mappings"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "allow"
      , Whitespace
      , Plaintext "quick"
      , Whitespace
      , Plaintext "removal"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "items"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "list"
      , Whitespace
      , Plaintext "(for"
      , Whitespace
      , Plaintext "example,"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "can"
      , Whitespace
      , Plaintext "reduce"
      , Whitespace
      , Plaintext "clutter"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "listing"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Plaintext "removing"
      , Whitespace
      , Plaintext "lines"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "don't"
      , Whitespace
      , Plaintext "intend"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "make"
      , Whitespace
      , Plaintext "changes"
      , Whitespace
      , Plaintext "to)."
      ]
  , Paragraph
      [ Plaintext "Additionally,"
      , Whitespace
      , Plaintext "Vim's"
      , Whitespace
      , Link ":cn"
      , Plaintext ","
      , Whitespace
      , Link ":cp"
      , Plaintext ","
      , Whitespace
      , Link ":cnf"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Link ":cpf"
      , Whitespace
      , Plaintext "commands"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "tweaked"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "make"
      , Whitespace
      , Plaintext "it"
      , Whitespace
      , Plaintext "easier"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "immediately"
      , Whitespace
      , Plaintext "identify"
      , Whitespace
      , Plaintext "matches"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Plaintext "centering"
      , Whitespace
      , Plaintext "them"
      , Whitespace
      , Plaintext "within"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "viewport."
      ]
  , SubheadingAnnotation
      "4. Easy operations on files in the quickfix listing"
  , Paragraph
      [ Plaintext "Finally,"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "provides"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Link ":Qargs"
      , Whitespace
      , Plaintext "command"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "puts"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "files"
      , Whitespace
      , Plaintext "currently"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "listing"
      , Whitespace
      , Plaintext "into"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link ":args"
      , Whitespace
      , Plaintext "list,"
      , Whitespace
      , Plaintext "where"
      , Whitespace
      , Plaintext "they"
      , Whitespace
      , Plaintext "can"
      , Whitespace
      , Plaintext "be"
      , Whitespace
      , Plaintext "operated"
      , Whitespace
      , Plaintext "on"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "bulk"
      , Whitespace
      , Plaintext "via"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link ":argdo"
      , Whitespace
      , Plaintext "command."
      , Whitespace
      , Plaintext "This"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "what's"
      , Whitespace
      , Plaintext "used"
      , Whitespace
      , Plaintext "under"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "covers"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Link ":Acks"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "do"
      , Whitespace
      , Plaintext "its"
      , Whitespace
      , Plaintext "work."
      ]
  , HeadingAnnotation "Installation"
  , Paragraph
      [ Plaintext "To"
      , Whitespace
      , Plaintext "install"
      , Whitespace
      , Plaintext "Ferret,"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "your"
      , Whitespace
      , Plaintext "plug-in"
      , Whitespace
      , Plaintext "management"
      , Whitespace
      , Plaintext "system"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "choice."
      ]
  , Paragraph
      [ Plaintext "If"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "don't"
      , Whitespace
      , Plaintext "have"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "\"plug-in"
      , Whitespace
      , Plaintext "management"
      , Whitespace
      , Plaintext "system"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "choice\","
      , Whitespace
      , Plaintext "I"
      , Whitespace
      , Plaintext "recommend"
      , Whitespace
      , Plaintext "Pathogen"
      , Whitespace
      , Plaintext "(https://github.com/tpope/vim-pathogen)"
      , Whitespace
      , Plaintext "due"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "its"
      , Whitespace
      , Plaintext "simplicity"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "robustness."
      , Whitespace
      , Plaintext "Assuming"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "have"
      , Whitespace
      , Plaintext "Pathogen"
      , Whitespace
      , Plaintext "installed"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "configured,"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "want"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "install"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "into"
      , Whitespace
      , Code "~/.vim/bundle"
      , Plaintext ","
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "can"
      , Whitespace
      , Plaintext "do"
      , Whitespace
      , Plaintext "so"
      , Whitespace
      , Plaintext "with:"
      ]
  , Fenced
      [ "git clone https://github.com/wincent/ferret.git ~/.vim/bundle/ferret"
      ]
  , Paragraph
      [ Plaintext "Alternatively,"
      , Whitespace
      , Plaintext "if"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "Git"
      , Whitespace
      , Plaintext "submodule"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "each"
      , Whitespace
      , Plaintext "Vim"
      , Whitespace
      , Plaintext "plug-in,"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "could"
      , Whitespace
      , Plaintext "do"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "following"
      , Whitespace
      , Plaintext "after"
      , Whitespace
      , Code "cd"
      , Plaintext "-ing"
      , Whitespace
      , Plaintext "into"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "top-level"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "your"
      , Whitespace
      , Plaintext "Git"
      , Whitespace
      , Plaintext "superproject:"
      ]
  , Fenced
      [ "git submodule add https://github.com/wincent/ferret.git ~/vim/bundle/ferret"
      , "git submodule init"
      ]
  , Paragraph
      [ Plaintext "To"
      , Whitespace
      , Plaintext "generate"
      , Whitespace
      , Plaintext "help"
      , Whitespace
      , Plaintext "tags"
      , Whitespace
      , Plaintext "under"
      , Whitespace
      , Plaintext "Pathogen,"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "can"
      , Whitespace
      , Plaintext "do"
      , Whitespace
      , Plaintext "so"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "inside"
      , Whitespace
      , Plaintext "Vim"
      , Whitespace
      , Plaintext "with:"
      ]
  , Fenced [ ":call pathogen#helptags()" ]
  , Project
      [ Unit
          [ FunctionDeclaration
              { functionBang = True
              , functionName = "s:delete"
              , functionArguments =
                  ArgumentList [ Argument "first" , Argument "last" ]
              , functionAttributes = []
              , functionBody =
                  [ LetStatement { letLexpr = "l:list" , letValue = "getqflist()" }
                  , LetStatement { letLexpr = "l:line" , letValue = "a:first" }
                  , GenericStatement "while l:line >= a:first && l:line <= a:last"
                  , LetStatement { letLexpr = "l:list[l:line - 1]" , letValue = "0" }
                  , LetStatement { letLexpr = "l:line" , letValue = "l:line + 1" }
                  , GenericStatement "endwhile"
                  , GenericStatement "call setqflist(l:list, 'r')"
                  , GenericStatement "execute 'cc ' . a:first"
                  , GenericStatement "execute \"normal \\<C-W>\\<C-P>\""
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#dispatch"
              , functionArguments = ArgumentList []
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ Empty
                  , LetStatement
                      { letLexpr = "l:dispatch"
                      , letValue = "get(g:, 'FerretDispatch', 1)"
                      }
                  , GenericStatement "return l:dispatch && exists(':Make') == 2"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#async"
              , functionArguments = ArgumentList []
              , functionAttributes = []
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:async" , letValue = "get(g:, 'FerretJob', 1)" }
                  , GenericStatement "return l:async && has('patch-7-4-1829')"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#error"
              , functionArguments = ArgumentList [ Argument "message" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement "call inputsave()"
                  , GenericStatement "echohl ErrorMsg"
                  , GenericStatement
                      "unsilent call input(a:message . ': press ENTER to continue')"
                  , GenericStatement "echohl NONE"
                  , GenericStatement "call inputrestore()"
                  , GenericStatement "unsilent echo"
                  , GenericStatement "redraw!"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "s:parse"
              , functionArguments = ArgumentList [ Argument "args" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement "if exists('g:ferret_lastsearch')"
                  , UnletStatement
                      { unletBang = False , unletBody = "g:ferret_lastsearch" }
                  , GenericStatement "endif"
                  , LetStatement { letLexpr = "l:expanded_args" , letValue = "[]" }
                  , GenericStatement "for l:arg in a:args"
                  , GenericStatement "if ferret#private#option(l:arg)"
                  , GenericStatement "call add(l:expanded_args, l:arg)"
                  , GenericStatement "elseif exists('g:ferret_lastsearch')"
                  , LetStatement
                      { letLexpr = "l:file_args"
                      , letValue =
                          "glob(l:arg, 1, 1) \" Ignore 'wildignore', return a list."
                      }
                  , GenericStatement "if len(l:file_args)"
                  , GenericStatement "call extend(l:expanded_args, l:file_args)"
                  , GenericStatement "else"
                  , GenericStatement "call add(l:expanded_args, l:arg)"
                  , GenericStatement "endif"
                  , GenericStatement "else"
                  , LetStatement
                      { letLexpr = "g:ferret_lastsearch" , letValue = "l:arg" }
                  , GenericStatement "call add(l:expanded_args, l:arg)"
                  , GenericStatement "endif"
                  , GenericStatement "endfor"
                  , GenericStatement "if ferret#private#async()"
                  , GenericStatement "return l:expanded_args"
                  , GenericStatement "endif"
                  , LetStatement
                      { letLexpr = "l:each_word_shell_escaped"
                      , letValue = "map(l:expanded_args, 'shellescape(v:val)')"
                      }
                  , LetStatement
                      { letLexpr = "l:joined"
                      , letValue = "join(l:each_word_shell_escaped)"
                      }
                  , GenericStatement "return escape(l:joined, '<>#')"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#clearautocmd"
              , functionArguments = ArgumentList []
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement "if has('autocmd')"
                  , GenericStatement "augroup FerretPostQF"
                  , GenericStatement "autocmd!"
                  , GenericStatement "augroup END"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#post"
              , functionArguments = ArgumentList [ Argument "type" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement "call ferret#private#clearautocmd()"
                  , LetStatement
                      { letLexpr = "l:lastsearch "
                      , letValue = "get(g:, 'ferret_lastsearch', '')"
                      }
                  , LetStatement
                      { letLexpr = "l:qflist "
                      , letValue = "a:type == 'qf' ? getqflist() : getloclist(0)"
                      }
                  , LetStatement
                      { letLexpr = "l:tip "
                      , letValue = "' [see `:help ferret-quotes`]'"
                      }
                  , GenericStatement "if len(l:qflist) == 0"
                  , LetStatement
                      { letLexpr = "l:base "
                      , letValue =
                          "'No results for search pattern `' . l:lastsearch . '`'"
                      }
                  , GenericStatement
                      "if l:lastsearch =~ '\\v^([' . \"'\" . '\"])[^ \\1]+\\1$'"
                  , GenericStatement "call ferret#private#error(l:base . l:tip)"
                  , GenericStatement "else"
                  , GenericStatement "call ferret#private#error(l:base)"
                  , GenericStatement "endif"
                  , GenericStatement "else"
                  , LetStatement
                      { letLexpr = "l:invalid "
                      , letValue = "filter(copy(l:qflist), 'v:val.valid == 0')"
                      }
                  , GenericStatement "if len(l:invalid) == len(l:qflist)"
                  , GenericStatement "redraw!"
                  , GenericStatement "echohl ErrorMsg"
                  , GenericStatement "for l:item in l:invalid"
                  , GenericStatement "unsilent echomsg l:item.text"
                  , GenericStatement "endfor"
                  , GenericStatement "echohl NONE"
                  , LetStatement
                      { letLexpr = "l:base "
                      , letValue = "'Search for `' . l:lastsearch . '` failed'"
                      }
                  , LetStatement
                      { letLexpr = "l:suffix "
                      , letValue = "a:type == 'qf' && ferret#private#dispatch() ?"
                      }
                  , GenericStatement "\\ ' (run `:messages` to see details)' : ''"
                  , GenericStatement
                      "if l:lastsearch =~ '\\v^[' . \"'\" . '\"].+[^' . \"'\" . '\"]$'"
                  , GenericStatement
                      "call ferret#private#error(l:base . l:tip . l:suffix)"
                  , GenericStatement "else"
                  , GenericStatement "call ferret#private#error(l:base . l:suffix)"
                  , GenericStatement "endif"
                  , GenericStatement "endif"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#ack"
              , functionArguments = ArgumentList [ Argument "..." ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:command" , letValue = "s:parse(a:000)" }
                  , GenericStatement "call ferret#private#hlsearch()"
                  , GenericStatement "if empty(&grepprg)"
                  , GenericStatement "return"
                  , GenericStatement "endif"
                  , GenericStatement "if ferret#private#async()"
                  , GenericStatement "call ferret#private#async#search(l:command, 1)"
                  , GenericStatement "elseif ferret#private#dispatch()"
                  , GenericStatement "call ferret#private#dispatch#search(l:command)"
                  , GenericStatement "else"
                  , GenericStatement
                      "call ferret#private#vanilla#search(l:command, 1)"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#lack"
              , functionArguments = ArgumentList [ Argument "..." ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:command" , letValue = "s:parse(a:000)" }
                  , GenericStatement "call ferret#private#hlsearch()"
                  , GenericStatement "if empty(&grepprg)"
                  , GenericStatement "return"
                  , GenericStatement "endif"
                  , GenericStatement "if ferret#private#async()"
                  , GenericStatement "call ferret#private#async#search(l:command, 0)"
                  , GenericStatement "else"
                  , GenericStatement
                      "call ferret#private#vanilla#search(l:command, 0)"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#hlsearch"
              , functionArguments = ArgumentList []
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement "if has('extra_search')"
                  , Empty
                  , LetStatement
                      { letLexpr = "l:hlsearch"
                      , letValue = "get(g:, 'FerretHlsearch', &hlsearch)"
                      }
                  , GenericStatement "if l:hlsearch"
                  , LetStatement
                      { letLexpr = "@/" , letValue = "g:ferret_lastsearch" }
                  , GenericStatement
                      "call feedkeys(\":let &hlsearch=1 | echo \\<CR>\", 'n')"
                  , GenericStatement "endif"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#acks"
              , functionArguments = ArgumentList [ Argument "command" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:matches "
                      , letValue =
                          "matchlist(a:command, '\\v\\C^(([^|\"\\\\a-zA-Z0-9]).+\\2.*\\2)([cgeiI]*)$')"
                      }
                  , GenericStatement "if !len(l:matches)"
                  , GenericStatement
                      "call ferret#private#error( 'Ferret: Expected a substitution expression (/foo/bar/); got: ' . a:command )"
                  , GenericStatement "return"
                  , GenericStatement "endif"
                  , LetStatement
                      { letLexpr = "l:pattern " , letValue = "l:matches[1]" }
                  , LetStatement
                      { letLexpr = "l:options " , letValue = "l:matches[3]" }
                  , GenericStatement "if l:options !~# 'e'"
                  , LetStatement { letLexpr = "l:options ." , letValue = "'e'" }
                  , GenericStatement "endif"
                  , GenericStatement "if l:options !~# 'g'"
                  , LetStatement { letLexpr = "l:options ." , letValue = "'g'" }
                  , GenericStatement "endif"
                  , LetStatement
                      { letLexpr = "l:filenames" , letValue = "ferret#private#qargs()" }
                  , GenericStatement "if l:filenames ==# ''"
                  , GenericStatement
                      "call ferret#private#error( 'Ferret: Quickfix filenames must be present, but there are none ' . '(must use :Ack to find files before :Acks can be used)' )"
                  , GenericStatement "return"
                  , GenericStatement "endif"
                  , GenericStatement "execute 'args' l:filenames"
                  , GenericStatement "call ferret#private#autocmd('FerretWillWrite')"
                  , GenericStatement
                      "execute 'argdo' '%s' . l:pattern . l:options . ' | update'"
                  , GenericStatement "call ferret#private#autocmd('FerretDidWrite')"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#autocmd"
              , functionArguments = ArgumentList [ Argument "cmd" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement
                      "if v:version > 703 || v:version == 703 && has('patch438')"
                  , GenericStatement
                      "execute 'silent doautocmd <nomodeline> User ' . a:cmd"
                  , GenericStatement "else"
                  , GenericStatement "execute 'silent doautocmd User ' . a:cmd"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "s:split"
              , functionArguments = ArgumentList [ Argument "str" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement
                      "return split(a:str, '\\%(\\%(\\%(^\\|[^\\\\]\\)\\\\\\)\\@<!\\s\\)\\+\\zs')"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#ackcomplete"
              , functionArguments =
                  ArgumentList
                    [ Argument "arglead" , Argument "cmdline" , Argument "cursorpos" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement
                      "return ferret#private#complete('Ack', a:arglead, a:cmdline, a:cursorpos)"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#lackcomplete"
              , functionArguments =
                  ArgumentList
                    [ Argument "arglead" , Argument "cmdline" , Argument "cursorpos" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement
                      "return ferret#private#complete('Lack', a:arglead, a:cmdline, a:cursorpos)"
                  ]
              }
          , GenericStatement "if executable('ag')"
          , LetStatement { letLexpr = "s:executable" , letValue = "'ag'" }
          , GenericStatement "elseif executable('ack')"
          , LetStatement { letLexpr = "s:executable" , letValue = "'ack'" }
          , GenericStatement "elseif executable('grep')"
          , LetStatement { letLexpr = "s:executable" , letValue = "'grep'" }
          , GenericStatement "else"
          , LetStatement { letLexpr = "s:executable" , letValue = "''" }
          , GenericStatement "endif"
          , LetStatement { letLexpr = "s:options " , letValue = "{" }
          , GenericStatement
              "\\ 'ack': [ '--ignore-ack-defaults', '--ignore-case', '--ignore-dir', '--ignore-directory', '--invert-match', '--known-types', '--literal', '--no-recurse', '--recurse', '--sort-files', '--type', '--word-regexp', '-1', '-Q', '-R', '-i', '-k', '-r', '-v', '-w', ], 'ag': [ '--all-types', '--all-text', '--case-sensitive', '--depth', '--follow', '--ignore', '--ignore-case', '--ignore-dir', '--invert-match', '--literal', '--max-count', '--skip-vcs-ignores', '--unrestricted', '--word-regexp', '-Q', '-U', '-a', '-i', '-m', '-s', '-t', '-u', '-v', '-w' ] }"
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#complete"
              , functionArguments =
                  ArgumentList
                    [ Argument "cmd"
                    , Argument "arglead"
                    , Argument "cmdline"
                    , Argument "cursorpos"
                    ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:args"
                      , letValue = "s:split(a:cmdline[:a:cursorpos])"
                      }
                  , LetStatement { letLexpr = "l:command_seen" , letValue = "0" }
                  , LetStatement { letLexpr = "l:pattern_seen" , letValue = "0" }
                  , LetStatement { letLexpr = "l:position" , letValue = "0" }
                  , GenericStatement "for l:arg in l:args"
                  , LetStatement
                      { letLexpr = "l:position" , letValue = "l:position + len(l:arg)" }
                  , LetStatement
                      { letLexpr = "l:stripped"
                      , letValue = "substitute(l:arg, '\\s\\+$', '', '')"
                      }
                  , GenericStatement "if ferret#private#option(l:stripped)"
                  , GenericStatement "if a:cursorpos <= l:position"
                  , LetStatement
                      { letLexpr = "l:options"
                      , letValue = "get(s:options, s:executable, [])"
                      }
                  , GenericStatement
                      "return filter(l:options, 'match(v:val, l:stripped) == 0')"
                  , GenericStatement "endif"
                  , GenericStatement "elseif l:pattern_seen"
                  , GenericStatement "if a:cursorpos <= l:position"
                  , GenericStatement "return glob(a:arglead . '*', 1, 1)"
                  , GenericStatement "end"
                  , GenericStatement "elseif l:command_seen"
                  , LetStatement { letLexpr = "l:pattern_seen" , letValue = "1" }
                  , GenericStatement "elseif l:stripped ==# a:cmd"
                  , LetStatement { letLexpr = "l:command_seen" , letValue = "1" }
                  , GenericStatement "else"
                  , GenericStatement "end"
                  , GenericStatement "endfor"
                  , GenericStatement "return []"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#option"
              , functionArguments = ArgumentList [ Argument "str" ]
              , functionAttributes = [ "abort" ]
              , functionBody = [ GenericStatement "return a:str =~# '^-'" ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#qargs"
              , functionArguments = ArgumentList []
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ LetStatement { letLexpr = "l:buffer_numbers" , letValue = "{}" }
                  , GenericStatement "for l:item in getqflist()"
                  , LetStatement
                      { letLexpr = "l:buffer_numbers[l:item['bufnr']]"
                      , letValue = "bufname(l:item['bufnr'])"
                      }
                  , GenericStatement "endfor"
                  , GenericStatement
                      "return join(map(values(l:buffer_numbers), 'fnameescape(v:val)'))"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#qf_delete"
              , functionArguments = ArgumentList []
              , functionAttributes = [ "range" ]
              , functionBody =
                  [ GenericStatement "call s:delete(a:firstline, a:lastline)" ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#qf_delete_motion"
              , functionArguments =
                  ArgumentList [ Argument "type" , Argument "..." ]
              , functionAttributes = []
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:selection" , letValue = "&selection" }
                  , LetStatement
                      { letLexpr = "&selection" , letValue = "'inclusive'" }
                  , LetStatement
                      { letLexpr = "l:firstline" , letValue = "line(\"'[\")" }
                  , LetStatement
                      { letLexpr = "l:lastline" , letValue = "line(\"']\")" }
                  , GenericStatement "call s:delete(l:firstline, l:lastline)"
                  , LetStatement
                      { letLexpr = "&selection" , letValue = "l:selection" }
                  ]
              }
          ]
      , Unit
          [ LetStatement { letLexpr = "s:jobs" , letValue = "{}" }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "s:channel_id"
              , functionArguments = ArgumentList [ Argument "channel" ]
              , functionAttributes = []
              , functionBody =
                  [ GenericStatement "return matchstr(a:channel, '\\d\\+')" ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "s:info_from_channel"
              , functionArguments = ArgumentList [ Argument "channel" ]
              , functionAttributes = []
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:channel_id"
                      , letValue = "s:channel_id(a:channel)"
                      }
                  , GenericStatement "if has_key(s:jobs, l:channel_id)"
                  , GenericStatement "return s:jobs[l:channel_id]"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#async#search"
              , functionArguments =
                  ArgumentList [ Argument "command" , Argument "ack" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement "call ferret#private#async#cancel()"
                  , GenericStatement
                      "call ferret#private#autocmd('FerretAsyncStart')"
                  , LetStatement
                      { letLexpr = "l:command_and_args "
                      , letValue = "extend(split(&grepprg), a:command)"
                      }
                  , LetStatement
                      { letLexpr = "l:job"
                      , letValue = "job_start(l:command_and_args, {"
                      }
                  , GenericStatement
                      "\\ 'err_cb': 'ferret#private#async#err_cb', 'out_cb': 'ferret#private#async#out_cb', 'close_cb': 'ferret#private#async#close_cb', 'err_mode': 'raw', 'out_mode': 'raw' })"
                  , LetStatement
                      { letLexpr = "l:channel" , letValue = "job_getchannel(l:job)" }
                  , LetStatement
                      { letLexpr = "l:channel_id"
                      , letValue = "s:channel_id(l:channel)"
                      }
                  , LetStatement
                      { letLexpr = "s:jobs[l:channel_id]" , letValue = "{" }
                  , GenericStatement
                      "\\ 'channel_id': l:channel_id, 'job': l:job, 'errors': [], 'output': [], 'pending_error': '', 'pending_output': '', 'pending_error_length': 0, 'pending_output_length': 0, 'ack': a:ack, 'window': win_getid() }"
                  ]
              }
          , LetStatement
              { letLexpr = "s:max_line_length" , letValue = "32768" }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#async#err_cb"
              , functionArguments =
                  ArgumentList [ Argument "channel" , Argument "msg" ]
              , functionAttributes = []
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:info"
                      , letValue = "s:info_from_channel(a:channel)"
                      }
                  , GenericStatement "if type(l:info) == 4"
                  , LetStatement { letLexpr = "l:start" , letValue = "0" }
                  , GenericStatement "while 1"
                  , LetStatement
                      { letLexpr = "l:idx" , letValue = "match(a:msg, '\\n', l:start)" }
                  , GenericStatement "if l:idx==-1"
                  , GenericStatement
                      "if l:info.pending_error_length < s:max_line_length"
                  , LetStatement
                      { letLexpr = "l:rest" , letValue = "strpart(a:msg, l:start)" }
                  , LetStatement
                      { letLexpr = "l:length" , letValue = "strlen(l:rest)" }
                  , LetStatement
                      { letLexpr = "l:info.pending_error." , letValue = "l:rest" }
                  , LetStatement
                      { letLexpr = "l:info.pending_error_length+"
                      , letValue = "l:length"
                      }
                  , GenericStatement "endif"
                  , GenericStatement "break"
                  , GenericStatement "else"
                  , GenericStatement
                      "if l:info.pending_error_length < s:max_line_length"
                  , LetStatement
                      { letLexpr = "l:info.pending_error."
                      , letValue = "strpart(a:msg, l:start, l:idx - l:start)"
                      }
                  , GenericStatement "endif"
                  , GenericStatement "call add(l:info.errors, l:info.pending_error)"
                  , LetStatement
                      { letLexpr = "l:info.pending_error" , letValue = "''" }
                  , LetStatement
                      { letLexpr = "l:info.pending_error_length" , letValue = "0" }
                  , GenericStatement "endif"
                  , LetStatement { letLexpr = "l:start" , letValue = "l:idx + 1" }
                  , GenericStatement "endwhile"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#async#out_cb"
              , functionArguments =
                  ArgumentList [ Argument "channel" , Argument "msg" ]
              , functionAttributes = []
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:info"
                      , letValue = "s:info_from_channel(a:channel)"
                      }
                  , GenericStatement "if type(l:info) == 4"
                  , LetStatement { letLexpr = "l:start" , letValue = "0" }
                  , GenericStatement "while 1"
                  , LetStatement
                      { letLexpr = "l:idx" , letValue = "match(a:msg, '\\n', l:start)" }
                  , GenericStatement "if l:idx==-1"
                  , GenericStatement
                      "if l:info.pending_output_length < s:max_line_length"
                  , LetStatement
                      { letLexpr = "l:rest" , letValue = "strpart(a:msg, l:start)" }
                  , LetStatement
                      { letLexpr = "l:length" , letValue = "strlen(l:rest)" }
                  , LetStatement
                      { letLexpr = "l:info.pending_output." , letValue = "l:rest" }
                  , LetStatement
                      { letLexpr = "l:info.pending_output_length+"
                      , letValue = "l:length"
                      }
                  , GenericStatement "endif"
                  , GenericStatement "break"
                  , GenericStatement "else"
                  , GenericStatement
                      "if l:info.pending_output_length < s:max_line_length"
                  , LetStatement
                      { letLexpr = "l:info.pending_output."
                      , letValue = "strpart(a:msg, l:start, l:idx - l:start)"
                      }
                  , GenericStatement "endif"
                  , GenericStatement "call add(l:info.output, l:info.pending_output)"
                  , LetStatement
                      { letLexpr = "l:info.pending_output" , letValue = "''" }
                  , LetStatement
                      { letLexpr = "l:info.pending_output_length" , letValue = "0" }
                  , GenericStatement "endif"
                  , LetStatement { letLexpr = "l:start" , letValue = "l:idx + 1" }
                  , GenericStatement "endwhile"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#async#close_cb"
              , functionArguments = ArgumentList [ Argument "channel" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:info"
                      , letValue = "s:info_from_channel(a:channel)"
                      }
                  , GenericStatement "if type(l:info) == 4"
                  , GenericStatement "call remove(s:jobs, l:info.channel_id)"
                  , GenericStatement
                      "call ferret#private#autocmd('FerretAsyncFinish')"
                  , GenericStatement "if !l:info.ack"
                  , GenericStatement "call win_gotoid(l:info.window)"
                  , GenericStatement "endif"
                  , GenericStatement
                      "call s:finalize_search(l:info.output, l:info.ack)"
                  , GenericStatement "for l:error in l:info.errors"
                  , GenericStatement "unsilent echomsg l:error"
                  , GenericStatement "endfor"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#async#pull"
              , functionArguments = ArgumentList []
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement "for l:channel_id in keys(s:jobs)"
                  , LetStatement
                      { letLexpr = "l:info" , letValue = "s:jobs[l:channel_id]" }
                  , GenericStatement
                      "call s:finalize_search(l:info.output, l:info.ack)"
                  , GenericStatement "endfor"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#async#cancel"
              , functionArguments = ArgumentList []
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ LetStatement { letLexpr = "l:canceled" , letValue = "0" }
                  , GenericStatement "for l:channel_id in keys(s:jobs)"
                  , LetStatement
                      { letLexpr = "l:info" , letValue = "s:jobs[l:channel_id]" }
                  , GenericStatement "call job_stop(l:info.job)"
                  , GenericStatement "call remove(s:jobs, l:channel_id)"
                  , LetStatement { letLexpr = "l:canceled" , letValue = "1" }
                  , GenericStatement "endfor"
                  , GenericStatement "if l:canceled"
                  , GenericStatement
                      "call ferret#private#autocmd('FerretAsyncFinish')"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#async#debug"
              , functionArguments = ArgumentList []
              , functionAttributes = [ "abort" ]
              , functionBody = [ GenericStatement "return s:jobs" ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "s:finalize_search"
              , functionArguments =
                  ArgumentList [ Argument "output" , Argument "ack" ]
              , functionAttributes = []
              , functionBody =
                  [ GenericStatement "if a:ack"
                  , GenericStatement "cexpr a:output"
                  , GenericStatement
                      "execute get(g:, 'FerretQFHandler', 'botright cwindow')"
                  , GenericStatement "call ferret#private#post('qf')"
                  , GenericStatement "else"
                  , LexprStatement { lexprBang = False , lexprExpr = "a:output" }
                  , GenericStatement "execute get(g:, 'FerretLLHandler', 'lwindow')"
                  , GenericStatement "call ferret#private#post('location')"
                  , GenericStatement "endif"
                  ]
              }
          ]
      , Unit
          [ FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#dispatch#search"
              , functionArguments = ArgumentList [ Argument "command" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ GenericStatement "if has('autocmd')"
                  , GenericStatement "augroup FerretPostQF"
                  , GenericStatement "autocmd!"
                  , GenericStatement
                      "autocmd QuickfixCmdPost cgetfile call ferret#private#post('qf')"
                  , GenericStatement "augroup END"
                  , GenericStatement "endif"
                  , LetStatement
                      { letLexpr = "l:original_makeprg" , letValue = "&l:makeprg" }
                  , LetStatement
                      { letLexpr = "l:original_errorformat"
                      , letValue = "&l:errorformat"
                      }
                  , GenericStatement "try"
                  , LetStatement
                      { letLexpr = "&l:makeprg"
                      , letValue = "&grepprg . ' ' . a:command"
                      }
                  , LetStatement
                      { letLexpr = "&l:errorformat" , letValue = "&grepformat" }
                  , GenericStatement "echomsg &l:makeprg"
                  , GenericStatement "Make"
                  , GenericStatement "catch"
                  , GenericStatement "call ferret#private#clearautocmd()"
                  , GenericStatement "finally"
                  , LetStatement
                      { letLexpr = "&l:makeprg" , letValue = "l:original_makeprg" }
                  , LetStatement
                      { letLexpr = "&l:errorformat"
                      , letValue = "l:original_errorformat"
                      }
                  , GenericStatement "endtry"
                  ]
              }
          ]
      , Unit
          [ FunctionDeclaration
              { functionBang = True
              , functionName = "s:finalize_search"
              , functionArguments =
                  ArgumentList [ Argument "output" , Argument "ack" ]
              , functionAttributes = []
              , functionBody =
                  [ GenericStatement "if a:ack"
                  , GenericStatement "cexpr a:output"
                  , GenericStatement
                      "execute get(g:, 'FerretQFHandler', 'botright cwindow')"
                  , GenericStatement "call ferret#private#post('qf')"
                  , GenericStatement "else"
                  , LexprStatement { lexprBang = False , lexprExpr = "a:output" }
                  , GenericStatement "execute get(g:, 'FerretLLHandler', 'lwindow')"
                  , GenericStatement "call ferret#private#post('location')"
                  , GenericStatement "endif"
                  ]
              }
          , FunctionDeclaration
              { functionBang = True
              , functionName = "ferret#private#vanilla#search"
              , functionArguments =
                  ArgumentList [ Argument "command" , Argument "ack" ]
              , functionAttributes = [ "abort" ]
              , functionBody =
                  [ LetStatement
                      { letLexpr = "l:output"
                      , letValue = "system(&grepprg . ' ' . a:command)"
                      }
                  , GenericStatement "call s:finalize_search(l:output, a:ack)"
                  ]
              }
          ]
      , Unit
          [ LetStatement
              { letLexpr = "s:options"
              , letValue = "get(g:, 'FerretQFOptions', 1)"
              }
          , GenericStatement "if s:options"
          , GenericStatement "setlocal nolist"
          , GenericStatement "if exists('+relativenumber')"
          , GenericStatement "setlocal norelativenumber"
          , GenericStatement "endif"
          , GenericStatement "setlocal nowrap"
          , GenericStatement "setlocal number"
          , LetStatement
              { letLexpr = "s:original_scrolloff" , letValue = "&scrolloff" }
          , GenericStatement "set scrolloff=0"
          , GenericStatement "if has('autocmd')"
          , GenericStatement "augroup FerretQF"
          , GenericStatement "autocmd!"
          , GenericStatement
              "autocmd BufLeave <buffer> execute 'set scrolloff=' . s:original_scrolloff"
          , GenericStatement
              "autocmd BufEnter <buffer> set scrolloff=0 | setlocal nocursorline"
          , GenericStatement "augroup END"
          , GenericStatement "endif"
          , GenericStatement "endif"
          , LetStatement
              { letLexpr = "s:map" , letValue = "get(g:, 'FerretQFMap', 1)" }
          , GenericStatement "if s:map"
          , GenericStatement
              "nnoremap <buffer> <silent> d :set operatorfunc=ferret#private#qf_delete_motion<CR>g@"
          , GenericStatement
              "nnoremap <buffer> <silent> dd :call ferret#private#qf_delete()<CR>"
          , GenericStatement
              "vnoremap <buffer> <silent> d :call ferret#private#qf_delete()<CR>"
          , GenericStatement "endif"
          ]
      , Unit
          [ GenericStatement
              "if exists('g:FerretLoaded') || &compatible || v:version < 700"
          , GenericStatement "finish"
          , GenericStatement "endif"
          , LetStatement { letLexpr = "g:FerretLoaded " , letValue = "1" }
          , LetStatement
              { letLexpr = "s:cpoptions " , letValue = "&cpoptions" }
          , GenericStatement "set cpoptions&vim"
          , GenericStatement
              "if executable('ag') \" The Silver Searcher: faster than ack."
          , LetStatement
              { letLexpr = "s:ackprg " , letValue = "'ag --vimgrep'" }
          , GenericStatement
              "elseif executable('ack') \" Ack: better than grep."
          , LetStatement
              { letLexpr = "s:ackprg "
              , letValue = "'ack --column --with-filename'"
              }
          , GenericStatement
              "elseif executable('grep') \" Grep: it's just grep."
          , LetStatement
              { letLexpr = "s:ackprg "
              , letValue = "&grepprg \" default is: grep -n $* /dev/null"
              }
          , GenericStatement "endif"
          , GenericStatement "if !empty(s:ackprg)"
          , LetStatement { letLexpr = "&grepprg" , letValue = "s:ackprg" }
          , GenericStatement "set grepformat=%f:%l:%c:%m"
          , GenericStatement "endif"
          , GenericStatement "if has('autocmd')"
          , GenericStatement "augroup Ferret"
          , GenericStatement "autocmd!"
          , GenericStatement "autocmd QuickFixCmdPost [^l]* nested cwindow"
          , GenericStatement "autocmd QuickFixCmdPost l* nested lwindow"
          , GenericStatement "augroup END"
          , GenericStatement "endif"
          , GenericStatement
              "command! -nargs=+ -complete=customlist,ferret#private#ackcomplete Ack call ferret#private#ack(<f-args>)"
          , GenericStatement
              "command! -nargs=+ -complete=customlist,ferret#private#lackcomplete Lack call ferret#private#lack(<f-args>)"
          , GenericStatement
              "command! -nargs=1 Acks call ferret#private#acks(<q-args>)"
          , GenericStatement
              "command! FerretCancelAsync call ferret#private#async#cancel()"
          , GenericStatement
              "command! FerretPullAsync call ferret#private#async#pull()"
          , GenericStatement "nnoremap <Plug>(FerretAck) :Ack<space>"
          , GenericStatement "nnoremap <Plug>(FerretLack) :Lack<space>"
          , GenericStatement
              "nnoremap <Plug>(FerretAckWord) :Ack <C-r><C-w><CR>"
          , GenericStatement
              "nnoremap <Plug>(FerretAcks) :Acks <c-r>=(exists('g:ferret_lastsearch') ? '/' . g:ferret_lastsearch . '//' : ' ')<CR><Left>"
          , LetStatement
              { letLexpr = "s:map" , letValue = "get(g:, 'FerretMap', 1)" }
          , GenericStatement "if s:map"
          , GenericStatement
              "if !hasmapto('<Plug>(FerretAck)') && maparg('<leader>a', 'n') ==# ''"
          , GenericStatement "nmap <unique> <leader>a <Plug>(FerretAck)"
          , GenericStatement "endif"
          , GenericStatement
              "if !hasmapto('<Plug>FerretLack') && maparg('<leader>l', 'n') ==# ''"
          , GenericStatement "nmap <unique> <leader>l <Plug>(FerretLack)"
          , GenericStatement "endif"
          , GenericStatement
              "if !hasmapto('<Plug>(FerretAckWord)') && maparg('<leader>s', 'n') ==# ''"
          , GenericStatement "nmap <unique> <leader>s <Plug>(FerretAckWord)"
          , GenericStatement "endif"
          , GenericStatement
              "if !hasmapto('<Plug>(FerretAcks)') && maparg('<leader>r', 'n') ==# ''"
          , GenericStatement "nmap <unique> <leader>r <Plug>(FerretAcks)"
          , GenericStatement "endif"
          , GenericStatement "endif"
          , GenericStatement
              "command! -bar Qargs execute 'args' ferret#private#qargs()"
          , LetStatement
              { letLexpr = "s:commands"
              , letValue = "get(g:, 'FerretQFCommands', 1)"
              }
          , GenericStatement "if s:commands"
          , GenericStatement
              "cabbrev <silent> <expr> cn ((getcmdtype() == ':' && getcmdpos() == 3) ? 'cn <bar> normal zz' : 'cn')"
          , GenericStatement
              "cabbrev <silent> <expr> cnf ((getcmdtype() == ':' && getcmdpos() == 4) ? 'cnf <bar> normal zz' : 'cnf')"
          , GenericStatement
              "cabbrev <silent> <expr> cp ((getcmdtype() == ':' && getcmdpos() == 3) ? 'cp <bar> normal zz' : 'cp')"
          , GenericStatement
              "cabbrev <silent> <expr> cpf ((getcmdtype() == ':' && getcmdpos() == 4) ? 'cpf <bar> normal zz' : 'cpf')"
          , GenericStatement "endif"
          , LetStatement
              { letLexpr = "&cpoptions " , letValue = "s:cpoptions" }
          , UnletStatement { unletBang = False , unletBody = "s:cpoptions" }
          ]
      ]
  , CommandsAnnotation
  , CommandAnnotation "Ack" (Just "{pattern} {options}")
  , Paragraph
      [ Plaintext "Searches"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "{pattern}"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "all"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "files"
      , Whitespace
      , Plaintext "under"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "current"
      , Whitespace
      , Plaintext "directory"
      , Whitespace
      , Plaintext "(see"
      , Whitespace
      , Link ":pwd"
      , Plaintext "),"
      , Whitespace
      , Plaintext "unless"
      , Whitespace
      , Plaintext "otherwise"
      , Whitespace
      , Plaintext "overridden"
      , Whitespace
      , Plaintext "via"
      , Whitespace
      , Plaintext "{options},"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "displays"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "results"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "listing."
      ]
  , Paragraph
      [ Code "ag"
      , Whitespace
      , Plaintext "(The"
      , Whitespace
      , Plaintext "Silver"
      , Whitespace
      , Plaintext "Searcher)"
      , Whitespace
      , Plaintext "will"
      , Whitespace
      , Plaintext "be"
      , Whitespace
      , Plaintext "used"
      , Whitespace
      , Plaintext "preferentially"
      , Whitespace
      , Plaintext "if"
      , Whitespace
      , Plaintext "present"
      , Whitespace
      , Plaintext "on"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "system,"
      , Whitespace
      , Plaintext "because"
      , Whitespace
      , Plaintext "it"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "faster,"
      , Whitespace
      , Plaintext "falling"
      , Whitespace
      , Plaintext "back"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Code "ack"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "then"
      , Whitespace
      , Code "grep"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Plaintext "needed."
      ]
  , Paragraph
      [ Plaintext "If"
      , Whitespace
      , Plaintext "dispatch.vim"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "installed"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "process"
      , Whitespace
      , Plaintext "will"
      , Whitespace
      , Plaintext "run"
      , Whitespace
      , Plaintext "asynchronously"
      , Whitespace
      , Plaintext "via"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link ":Make"
      , Whitespace
      , Plaintext "command,"
      , Whitespace
      , Plaintext "otherwise"
      , Whitespace
      , Plaintext "it"
      , Whitespace
      , Plaintext "will"
      , Whitespace
      , Plaintext "be"
      , Whitespace
      , Plaintext "run"
      , Whitespace
      , Plaintext "synchronously"
      , Whitespace
      , Plaintext "via"
      , Whitespace
      , Link ":cexpr"
      , Plaintext "."
      , Whitespace
      , Plaintext "Asynchronous"
      , Whitespace
      , Plaintext "searches"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "preferred"
      , Whitespace
      , Plaintext "because"
      , Whitespace
      , Plaintext "they"
      , Whitespace
      , Plaintext "do"
      , Whitespace
      , Plaintext "not"
      , Whitespace
      , Plaintext "block,"
      , Whitespace
      , Plaintext "despite"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "fact"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "Vim"
      , Whitespace
      , Plaintext "itself"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "single"
      , Whitespace
      , Plaintext "threaded."
      , Whitespace
      , Plaintext "The"
      , Whitespace
      , Link "g:FerretDispatch"
      , Whitespace
      , Plaintext "option"
      , Whitespace
      , Plaintext "can"
      , Whitespace
      , Plaintext "be"
      , Whitespace
      , Plaintext "used"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "prevent"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "dispatch.vim."
      ]
  , Paragraph
      [ Plaintext "The"
      , Whitespace
      , Plaintext "{pattern}"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "passed"
      , Whitespace
      , Plaintext "through"
      , Whitespace
      , Plaintext "as-is"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "underlying"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "program,"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "no"
      , Whitespace
      , Plaintext "escaping"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "required"
      , Whitespace
      , Plaintext "other"
      , Whitespace
      , Plaintext "than"
      , Whitespace
      , Plaintext "preceding"
      , Whitespace
      , Plaintext "spaces"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "single"
      , Whitespace
      , Plaintext "backslash."
      , Whitespace
      , Plaintext "For"
      , Whitespace
      , Plaintext "example,"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "\"\\bfoo[0-9]{2}"
      , Whitespace
      , Plaintext "bar\\b\""
      , Whitespace
      , Plaintext "(ie."
      , Whitespace
      , Plaintext "using"
      , Whitespace
      , Code "ag"
      , Plaintext "'s"
      , Whitespace
      , Plaintext "Perl-style"
      , Whitespace
      , Plaintext "regular"
      , Whitespace
      , Plaintext "expression"
      , Whitespace
      , Plaintext "syntax),"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "could"
      , Whitespace
      , Plaintext "do:"
      ]
  , Fenced [ ":Ack \\bfoo[0-9]{2}\\ bar\\b" ]
  , Paragraph
      [ Plaintext "Likewise,"
      , Whitespace
      , Plaintext "{options}"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "passed"
      , Whitespace
      , Plaintext "through."
      , Whitespace
      , Plaintext "In"
      , Whitespace
      , Plaintext "this"
      , Whitespace
      , Plaintext "example,"
      , Whitespace
      , Plaintext "we"
      , Whitespace
      , Plaintext "pass"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Code "-w"
      , Whitespace
      , Plaintext "option"
      , Whitespace
      , Plaintext "(to"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "on"
      , Whitespace
      , Plaintext "word"
      , Whitespace
      , Plaintext "boundaries),"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "scope"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "\"foo\""
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "\"bar\""
      , Whitespace
      , Plaintext "subdirectories:"
      , Whitespace
      , Plaintext ">"
      ]
  , Fenced [ ":Ack -w something foo bar" ]
  , Paragraph
      [ Plaintext "As"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "convenience"
      , Whitespace
      , Plaintext "<leader>a"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "set-up"
      , Whitespace
      , Plaintext "("
      , Link "<Plug>(FerretAck)"
      , Plaintext ")"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "shortcut"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "enter"
      , Whitespace
      , Link "Cmdline-mode"
      , Whitespace
      , Plaintext "with"
      , Whitespace
      , Code ":Ack"
      , Whitespace
      , Plaintext "inserted"
      , Whitespace
      , Plaintext "on"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "Cmdline"
      , Plaintext "."
      , Whitespace
      , Plaintext "Likewise"
      , Whitespace
      , Plaintext "<leader>s"
      , Whitespace
      , Plaintext "("
      , Link "<Plug>(FerretAckWord)"
      , Plaintext ")"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "shortcut"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "running"
      , Whitespace
      , Link ":Ack"
      , Whitespace
      , Plaintext "with"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "word"
      , Whitespace
      , Plaintext "currently"
      , Whitespace
      , Plaintext "under"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "cursor."
      ]
  , CommandAnnotation "Lack" (Just "{pattern} {options}")
  , Paragraph
      [ Plaintext "Just"
      , Whitespace
      , Plaintext "like"
      , Whitespace
      , Link ":Ack"
      , Plaintext ","
      , Whitespace
      , Plaintext "but"
      , Whitespace
      , Plaintext "instead"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "using"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "listing,"
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "global"
      , Whitespace
      , Plaintext "across"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Plaintext "entire"
      , Whitespace
      , Plaintext "Vim"
      , Whitespace
      , Plaintext "instance,"
      , Whitespace
      , Plaintext "it"
      , Whitespace
      , Plaintext "uses"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "location-list"
      , Plaintext ","
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "per-window"
      , Whitespace
      , Plaintext "construct."
      ]
  , Paragraph
      [ Plaintext "Note"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Link ":Lack"
      , Whitespace
      , Plaintext "always"
      , Whitespace
      , Plaintext "runs"
      , Whitespace
      , Plaintext "synchronously"
      , Whitespace
      , Plaintext "via"
      , Whitespace
      , Link ":cexpr"
      , Plaintext ","
      , Whitespace
      , Plaintext "because"
      , Whitespace
      , Plaintext "dispatch.vim"
      , Whitespace
      , Plaintext "doesn't"
      , Whitespace
      , Plaintext "currently"
      , Whitespace
      , Plaintext "support"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "location-list"
      , Plaintext "."
      ]
  , CommandAnnotation "Acks" (Just "/{pattern}/{replacement}/")
  , Paragraph
      [ Plaintext "Takes"
      , Whitespace
      , Plaintext "all"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "files"
      , Whitespace
      , Plaintext "currently"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "listing"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "performs"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "substitution"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "all"
      , Whitespace
      , Plaintext "instances"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "{pattern}"
      , Whitespace
      , Plaintext "(a"
      , Whitespace
      , Plaintext "standard"
      , Whitespace
      , Plaintext "Vim"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Link "pattern"
      , Plaintext ")"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Plaintext "{replacement}."
      ]
  , Paragraph
      [ Plaintext "A"
      , Whitespace
      , Plaintext "typical"
      , Whitespace
      , Plaintext "sequence"
      , Whitespace
      , Plaintext "consists"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Link ":Ack"
      , Whitespace
      , Plaintext "invocation"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "populate"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "listing"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "then"
      , Whitespace
      , Link ":Acks"
      , Whitespace
      , Plaintext "(mnemonic:"
      , Whitespace
      , Plaintext "\"Ack"
      , Whitespace
      , Plaintext "substitute\")"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "perform"
      , Whitespace
      , Plaintext "replacements."
      , Whitespace
      , Plaintext "For"
      , Whitespace
      , Plaintext "example,"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "replace"
      , Whitespace
      , Plaintext "\"foo\""
      , Whitespace
      , Plaintext "with"
      , Whitespace
      , Plaintext "\"bar\""
      , Whitespace
      , Plaintext "across"
      , Whitespace
      , Plaintext "all"
      , Whitespace
      , Plaintext "files"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "current"
      , Whitespace
      , Plaintext "directory:"
      ]
  , Fenced [ ":Ack foo" , ":Acks /foo/bar/" ]
  , CommandAnnotation "Qargs" Nothing
  , Paragraph
      [ Plaintext "This"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "utility"
      , Whitespace
      , Plaintext "function"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "used"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link ":Acks"
      , Whitespace
      , Plaintext "command"
      , Whitespace
      , Plaintext "but"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "also"
      , Whitespace
      , Plaintext "generally"
      , Whitespace
      , Plaintext "useful"
      , Whitespace
      , Plaintext "enough"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "warrant"
      , Whitespace
      , Plaintext "being"
      , Whitespace
      , Plaintext "exposed"
      , Whitespace
      , Plaintext "publicly."
      ]
  , Paragraph
      [ Plaintext "It"
      , Whitespace
      , Plaintext "takes"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "files"
      , Whitespace
      , Plaintext "currently"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "listing"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "sets"
      , Whitespace
      , Plaintext "them"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Link ":args"
      , Whitespace
      , Plaintext "so"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "they"
      , Whitespace
      , Plaintext "can"
      , Whitespace
      , Plaintext "be"
      , Whitespace
      , Plaintext "operated"
      , Whitespace
      , Plaintext "on"
      , Whitespace
      , Plaintext "en"
      , Whitespace
      , Plaintext "masse"
      , Whitespace
      , Plaintext "via"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link ":argdo"
      , Whitespace
      , Plaintext "command."
      ]
  , MappingsAnnotation
  , SubheadingAnnotation
      "Circumstances where mappings do not get set up"
  , Paragraph
      [ Plaintext "Note"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "will"
      , Whitespace
      , Plaintext "not"
      , Whitespace
      , Plaintext "try"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "up"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "<leader>"
      , Whitespace
      , Plaintext "mappings"
      , Whitespace
      , Plaintext "if"
      , Whitespace
      , Plaintext "any"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "following"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "true:"
      ]
  , List
      [ ListItem
          [ Plaintext "A"
          , Whitespace
          , Plaintext "mapping"
          , Whitespace
          , Plaintext "for"
          , Whitespace
          , Plaintext "already"
          , Whitespace
          , Plaintext "exists."
          ]
      , ListItem
          [ Plaintext "An"
          , Whitespace
          , Plaintext "alternative"
          , Whitespace
          , Plaintext "mapping"
          , Whitespace
          , Plaintext "for"
          , Whitespace
          , Plaintext "the"
          , Whitespace
          , Plaintext "same"
          , Whitespace
          , Plaintext "functionality"
          , Whitespace
          , Plaintext "has"
          , Whitespace
          , Plaintext "already"
          , Whitespace
          , Plaintext "been"
          , Whitespace
          , Plaintext "set"
          , Whitespace
          , Plaintext "up"
          , Whitespace
          , Plaintext "from"
          , Whitespace
          , Plaintext "a"
          , Whitespace
          , Link ".vimrc"
          , Plaintext "."
          ]
      , ListItem
          [ Plaintext "The"
          , Whitespace
          , Plaintext "mapping"
          , Whitespace
          , Plaintext "has"
          , Whitespace
          , Plaintext "been"
          , Whitespace
          , Plaintext "suppressed"
          , Whitespace
          , Plaintext "by"
          , Whitespace
          , Plaintext "setting"
          , Whitespace
          , Link "g:FerretMap"
          , Whitespace
          , Plaintext "to"
          , Whitespace
          , Plaintext "1"
          , Whitespace
          , Plaintext "in"
          , Whitespace
          , Plaintext "your"
          , Whitespace
          , Link ".vimrc"
          , Plaintext "."
          ]
      ]
  , SubheadingAnnotation "Mappings specific to the quickfix window"
  , Paragraph
      [ Plaintext "Additionally,"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "will"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "up"
      , Whitespace
      , Plaintext "special"
      , Whitespace
      , Plaintext "mappings"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "listings,"
      , Whitespace
      , Plaintext "unless"
      , Whitespace
      , Plaintext "prevented"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "doing"
      , Whitespace
      , Plaintext "so"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Link "g:FerretQFMap"
      , Plaintext ":"
      ]
  , List
      [ ListItem
          [ Code "d"
          , Whitespace
          , Plaintext "("
          , Link "visual-mode"
          , Plaintext "):"
          , Whitespace
          , Plaintext "delete"
          , Whitespace
          , Plaintext "visual"
          , Whitespace
          , Plaintext "selection"
          ]
      , ListItem
          [ Code "dd"
          , Whitespace
          , Plaintext "("
          , Link "Normal-mode"
          , Plaintext "):"
          , Whitespace
          , Plaintext "delete"
          , Whitespace
          , Plaintext "current"
          , Whitespace
          , Plaintext "line"
          ]
      , ListItem
          [ Code "d"
          , Plaintext "{motion}"
          , Whitespace
          , Plaintext "("
          , Link "Normal-mode"
          , Plaintext "):"
          , Whitespace
          , Plaintext "delete"
          , Whitespace
          , Plaintext "range"
          , Whitespace
          , Plaintext "indicated"
          , Whitespace
          , Plaintext "by"
          , Whitespace
          , Plaintext "{motion}"
          ]
      ]
  , MappingAnnotation "<Plug>(FerretAck)"
  , Paragraph
      [ Plaintext "Ferret"
      , Whitespace
      , Plaintext "maps"
      , Whitespace
      , Plaintext "<leader>a"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Link "<Plug>(FerretAck)"
      , Plaintext ","
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "triggers"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link ":Ack"
      , Whitespace
      , Plaintext "command."
      , Whitespace
      , Plaintext "To"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Plaintext "alternative"
      , Whitespace
      , Plaintext "mapping"
      , Whitespace
      , Plaintext "instead,"
      , Whitespace
      , Plaintext "create"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "different"
      , Whitespace
      , Plaintext "one"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "your"
      , Whitespace
      , Link ".vimrc"
      , Whitespace
      , Plaintext "instead"
      , Whitespace
      , Plaintext "using"
      , Whitespace
      , Link ":nmap"
      , Plaintext ":"
      ]
  , Fenced
      [ "\" Instead of <leader>a, use <leader>x."
      , "nmap <leader>x <Plug>(FerretAck)"
      ]
  , MappingAnnotation "<Plug>(FerretLack)"
  , Paragraph
      [ Plaintext "Ferret"
      , Whitespace
      , Plaintext "maps"
      , Whitespace
      , Plaintext "<leader>l"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Link "<Plug>(FerretLack)"
      , Plaintext ","
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "triggers"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link ":Lack"
      , Whitespace
      , Plaintext "command."
      , Whitespace
      , Plaintext "To"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Plaintext "alternative"
      , Whitespace
      , Plaintext "mapping"
      , Whitespace
      , Plaintext "instead,"
      , Whitespace
      , Plaintext "create"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "different"
      , Whitespace
      , Plaintext "one"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "your"
      , Whitespace
      , Link ".vimrc"
      , Whitespace
      , Plaintext "instead"
      , Whitespace
      , Plaintext "using"
      , Whitespace
      , Link ":nmap"
      , Plaintext ":"
      ]
  , Fenced
      [ "\" Instead of <leader>l, use <leader>y."
      , "nmap <leader>y <Plug>(FerretLack)"
      ]
  , MappingAnnotation "<Plug>(FerretAckWord)"
  , Paragraph
      [ Plaintext "Ferret"
      , Whitespace
      , Plaintext "maps"
      , Whitespace
      , Plaintext "<leader>s"
      , Whitespace
      , Plaintext "(mnemonix:"
      , Whitespace
      , Plaintext "\"selection)"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Link "<Plug>(FerretAckWord)"
      , Plaintext ","
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "uses"
      , Whitespace
      , Link ":Ack"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "word"
      , Whitespace
      , Plaintext "currently"
      , Whitespace
      , Plaintext "under"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "cursor."
      , Whitespace
      , Plaintext "To"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Plaintext "alternative"
      , Whitespace
      , Plaintext "mapping"
      , Whitespace
      , Plaintext "instead,"
      , Whitespace
      , Plaintext "create"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "different"
      , Whitespace
      , Plaintext "one"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "your"
      , Whitespace
      , Link ".vimrc"
      , Whitespace
      , Plaintext "instead"
      , Whitespace
      , Plaintext "using"
      , Whitespace
      , Link ":nmap"
      , Plaintext ":"
      ]
  , Fenced
      [ "\" Instead of <leader>s, use <leader>z."
      , "nmap <leader>z <Plug>(FerretAckWord)"
      ]
  , MappingAnnotation "<Plug>(FerretAcks)"
  , Paragraph
      [ Plaintext "Ferret"
      , Whitespace
      , Plaintext "maps"
      , Whitespace
      , Plaintext "<leader>r"
      , Whitespace
      , Plaintext "(mnemonic:"
      , Whitespace
      , Plaintext "\"replace\")"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Link "<Plug>(FerretAcks)"
      , Plaintext ","
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "triggers"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link ":Acks"
      , Whitespace
      , Plaintext "command"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "fills"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "prompt"
      , Whitespace
      , Plaintext "with"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "last"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "term"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "Ferret."
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Plaintext "alternative"
      , Whitespace
      , Plaintext "mapping"
      , Whitespace
      , Plaintext "instead,"
      , Whitespace
      , Plaintext "create"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "different"
      , Whitespace
      , Plaintext "one"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "your"
      , Whitespace
      , Link ".vimrc"
      , Whitespace
      , Plaintext "instead"
      , Whitespace
      , Plaintext "using"
      , Whitespace
      , Link ":nmap"
      , Plaintext ":"
      ]
  , Fenced
      [ "\" Instead of <leader>r, use <leader>u."
      , "nmap <leader>u <Plug>(FerretAcks)"
      ]
  , OptionsAnnotation
  , OptionAnnotation "g:FerretDispatch" "boolean" (Just "1")
  , Paragraph
      [ Plaintext "Controls"
      , Whitespace
      , Plaintext "whether"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "vim-dispatch"
      , Whitespace
      , Plaintext "(and"
      , Whitespace
      , Plaintext "specifically,"
      , Whitespace
      , Link ":Make"
      , Plaintext ")"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "run"
      , Whitespace
      , Link ":Ack"
      , Whitespace
      , Plaintext "searches"
      , Whitespace
      , Plaintext "asynchronously,"
      , Whitespace
      , Plaintext "when"
      , Whitespace
      , Plaintext "available."
      , Whitespace
      , Plaintext "To"
      , Whitespace
      , Plaintext "prevent"
      , Whitespace
      , Plaintext "vim-dispatch"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "being"
      , Whitespace
      , Plaintext "used,"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "0:"
      ]
  , Fenced [ "let g:FerretDispatch=0" ]
  , OptionAnnotation "g:FerretHlsearch" "boolean" Nothing
  , Paragraph
      [ Plaintext "Controls"
      , Whitespace
      , Plaintext "whether"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "should"
      , Whitespace
      , Plaintext "attempt"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "highlight"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "pattern"
      , Whitespace
      , Plaintext "when"
      , Whitespace
      , Plaintext "running"
      , Whitespace
      , Link ":Ack"
      , Whitespace
      , Plaintext "or"
      , Whitespace
      , Link ":Lack"
      , Plaintext "."
      , Whitespace
      , Plaintext "If"
      , Whitespace
      , Plaintext "left"
      , Whitespace
      , Plaintext "unset,"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "will"
      , Whitespace
      , Plaintext "respect"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "current"
      , Whitespace
      , Plaintext "'hlsearch'"
      , Whitespace
      , Plaintext "setting."
      , Whitespace
      , Plaintext "To"
      , Whitespace
      , Plaintext "force"
      , Whitespace
      , Plaintext "highlighting"
      , Whitespace
      , Plaintext "on"
      , Whitespace
      , Plaintext "or"
      , Whitespace
      , Plaintext "off"
      , Whitespace
      , Plaintext "irrespective"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "'hlsearch',"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Link "g:FerretHlsearch"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "1"
      , Whitespace
      , Plaintext "(on)"
      , Whitespace
      , Plaintext "or"
      , Whitespace
      , Plaintext "0"
      , Whitespace
      , Plaintext "(off):"
      ]
  , Fenced [ "let g:FerretHlsearch=0" ]
  , OptionAnnotation "g:FerretQFOptions" "boolean" (Just "1")
  , Paragraph
      [ Plaintext "Controls"
      , Whitespace
      , Plaintext "whether"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "up"
      , Whitespace
      , Plaintext "setting"
      , Whitespace
      , Plaintext "overrides"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "windows."
      , Whitespace
      , Plaintext "These"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "various"
      , Whitespace
      , Plaintext "settings,"
      , Whitespace
      , Plaintext "such"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Link "norelativenumber"
      , Plaintext ","
      , Whitespace
      , Link "nolist"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Link "nowrap"
      , Plaintext ","
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "intended"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "make"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "window,"
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "typically"
      , Whitespace
      , Plaintext "very"
      , Whitespace
      , Plaintext "small"
      , Whitespace
      , Plaintext "relative"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "other"
      , Whitespace
      , Plaintext "windows,"
      , Whitespace
      , Plaintext "more"
      , Whitespace
      , Plaintext "usable."
      ]
  , Paragraph
      [ Plaintext "A"
      , Whitespace
      , Plaintext "full"
      , Whitespace
      , Plaintext "list"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "overridden"
      , Whitespace
      , Plaintext "settings"
      , Whitespace
      , Plaintext "can"
      , Whitespace
      , Plaintext "be"
      , Whitespace
      , Plaintext "found"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Link "ferret-overrides"
      , Plaintext "."
      ]
  , Paragraph
      [ Plaintext "To"
      , Whitespace
      , Plaintext "prevent"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "custom"
      , Whitespace
      , Plaintext "settings"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "being"
      , Whitespace
      , Plaintext "applied,"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Link "g:FerretQFOptions"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "0:"
      ]
  , Fenced [ "let g:FerretQFOptions=0" ]
  , OptionAnnotation "g:FerretQFMap" "boolean" (Just "1")
  , Paragraph
      [ Plaintext "Controls"
      , Whitespace
      , Plaintext "whether"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "up"
      , Whitespace
      , Plaintext "mappings"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "results"
      , Whitespace
      , Plaintext "window"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "deleting"
      , Whitespace
      , Plaintext "results."
      , Whitespace
      , Plaintext "The"
      , Whitespace
      , Plaintext "mappings"
      , Whitespace
      , Plaintext "include:"
      ]
  , List
      [ ListItem
          [ Code "d"
          , Whitespace
          , Plaintext "("
          , Link "visual-mode"
          , Plaintext "):"
          , Whitespace
          , Plaintext "delete"
          , Whitespace
          , Plaintext "visual"
          , Whitespace
          , Plaintext "selection"
          ]
      , ListItem
          [ Code "dd"
          , Whitespace
          , Plaintext "("
          , Link "Normal-mode"
          , Plaintext "):"
          , Whitespace
          , Plaintext "delete"
          , Whitespace
          , Plaintext "current"
          , Whitespace
          , Plaintext "line"
          ]
      , ListItem
          [ Code "d"
          , Plaintext "{motion}"
          , Whitespace
          , Plaintext "("
          , Link "Normal-mode"
          , Plaintext "):"
          , Whitespace
          , Plaintext "delete"
          , Whitespace
          , Plaintext "range"
          , Whitespace
          , Plaintext "indicated"
          , Whitespace
          , Plaintext "by"
          , Whitespace
          , Plaintext "{motion}"
          ]
      ]
  , Paragraph
      [ Plaintext "To"
      , Whitespace
      , Plaintext "prevent"
      , Whitespace
      , Plaintext "these"
      , Whitespace
      , Plaintext "mappings"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "being"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "up,"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "0:"
      ]
  , Fenced [ "let g:FerretQFMap=0" ]
  , OptionAnnotation "g:FerretLoaded" "any" Nothing
  , Paragraph
      [ Plaintext "To"
      , Whitespace
      , Plaintext "prevent"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "being"
      , Whitespace
      , Plaintext "loaded,"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Link "g:FerretLoaded"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "any"
      , Whitespace
      , Plaintext "value"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "your"
      , Whitespace
      , Link ".vimrc"
      , Plaintext "."
      , Whitespace
      , Plaintext "For"
      , Whitespace
      , Plaintext "example:"
      ]
  , Fenced [ "let g:FerretLoaded=1" ]
  , OptionAnnotation "g:FerretMap" "boolean" (Just "1")
  , Paragraph
      [ Plaintext "Controls"
      , Whitespace
      , Plaintext "whether"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "up"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "mappings,"
      , Whitespace
      , Plaintext "such"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Link "<Plug>(FerretAck)"
      , Whitespace
      , Plaintext "(see"
      , Whitespace
      , Link "ferret-mappings"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "full"
      , Whitespace
      , Plaintext "list)."
      , Whitespace
      , Plaintext "To"
      , Whitespace
      , Plaintext "prevent"
      , Whitespace
      , Plaintext "any"
      , Whitespace
      , Plaintext "mapping"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "being"
      , Whitespace
      , Plaintext "configured,"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "0:"
      ]
  , Fenced [ "let g:FerretMap=0" ]
  , OptionAnnotation "g:FerretQFCommands" "boolean" (Just "1")
  , Paragraph
      [ Plaintext "Controls"
      , Whitespace
      , Plaintext "whether"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "up"
      , Whitespace
      , Plaintext "custom"
      , Whitespace
      , Plaintext "versions"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "commands,"
      , Whitespace
      , Link ":cn"
      , Plaintext ","
      , Whitespace
      , Link ":cnf"
      , Plaintext ","
      , Whitespace
      , Link ":cp"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Link ":cpf"
      , Plaintext "."
      , Whitespace
      , Plaintext "These"
      , Whitespace
      , Plaintext "overrides"
      , Whitespace
      , Plaintext "vertically"
      , Whitespace
      , Plaintext "center"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "match"
      , Whitespace
      , Plaintext "within"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "viewport"
      , Whitespace
      , Plaintext "on"
      , Whitespace
      , Plaintext "each"
      , Whitespace
      , Plaintext "jump."
      , Whitespace
      , Plaintext "To"
      , Whitespace
      , Plaintext "prevent"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "custom"
      , Whitespace
      , Plaintext "versions"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "being"
      , Whitespace
      , Plaintext "configured,"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "0:"
      ]
  , Fenced [ "let g:FerretQFCommands=0" ]
  , FooterAnnotation
  , HeadingAnnotation "Custom autocommands"
  , LinkTargets [ "FerretWillWrite" , "FerretDidWrite" ]
  , Paragraph
      [ Plaintext "For"
      , Whitespace
      , Plaintext "maximum"
      , Whitespace
      , Plaintext "compatibility"
      , Whitespace
      , Plaintext "with"
      , Whitespace
      , Plaintext "other"
      , Whitespace
      , Plaintext "plug-ins,"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "runs"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "following"
      , Whitespace
      , Plaintext "\"User\""
      , Whitespace
      , Plaintext "autocommands"
      , Whitespace
      , Plaintext "before"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "after"
      , Whitespace
      , Plaintext "running"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "file"
      , Whitespace
      , Plaintext "writing"
      , Whitespace
      , Plaintext "operations"
      , Whitespace
      , Plaintext "during"
      , Whitespace
      , Link ":Acks"
      , Plaintext ":"
      ]
  , List
      [ ListItem [ Plaintext "FerretWillWrite" ]
      , ListItem [ Plaintext "FerretDidWrite" ]
      ]
  , Paragraph
      [ Plaintext "For"
      , Whitespace
      , Plaintext "example,"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "call"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "pair"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "custom"
      , Whitespace
      , Plaintext "functions"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "response"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "these"
      , Whitespace
      , Plaintext "events,"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "might"
      , Whitespace
      , Plaintext "do:"
      ]
  , Fenced
      [ "autocmd! User FerretWillWrite"
      , "autocmd User FerretWillWrite call CustomWillWrite()"
      , "autocmd! User FerretDidWrite"
      , "autocmd User FerretDidWrite call CustomDidWrite()"
      ]
  , HeadingAnnotation "Overrides"
  , Paragraph
      [ Plaintext "Ferret"
      , Whitespace
      , Plaintext "overrides"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "'grepformat'"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "'grepprg'"
      , Whitespace
      , Plaintext "settings,"
      , Whitespace
      , Plaintext "preferentially"
      , Whitespace
      , Plaintext "setting"
      , Whitespace
      , Code "ag"
      , Plaintext ","
      , Whitespace
      , Code "ack"
      , Whitespace
      , Plaintext "or"
      , Whitespace
      , Code "grep"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "'grepprg'"
      , Whitespace
      , Plaintext "(in"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "order)"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "configuring"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "suitable"
      , Whitespace
      , Plaintext "'grepformat'."
      ]
  , Paragraph
      [ Plaintext "Additionally,"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "includes"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Link "ftplugin"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "listing"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "adjusts"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "number"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "settings"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "improve"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "usability"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "results."
      ]
  , IndentAnnotation
  , LinkTargets [ "ferret-nolist" ]
  , Paragraph [ Plaintext "'nolist'" ]
  , Paragraph
      [ Plaintext "Turned"
      , Whitespace
      , Plaintext "off"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "reduce"
      , Whitespace
      , Plaintext "visual"
      , Whitespace
      , Plaintext "clutter"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "results,"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "because"
      , Whitespace
      , Plaintext "'list'"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "most"
      , Whitespace
      , Plaintext "useful"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "files"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "being"
      , Whitespace
      , Plaintext "actively"
      , Whitespace
      , Plaintext "edited,"
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "not"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "case"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "results."
      ]
  , LinkTargets [ "ferret-norelativenumber" ]
  , Paragraph [ Plaintext "'norelativenumber'" ]
  , Paragraph
      [ Plaintext "Turned"
      , Whitespace
      , Plaintext "off,"
      , Whitespace
      , Plaintext "because"
      , Whitespace
      , Plaintext "it"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "more"
      , Whitespace
      , Plaintext "useful"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "have"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "sense"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "absolute"
      , Whitespace
      , Plaintext "progress"
      , Whitespace
      , Plaintext "through"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "results"
      , Whitespace
      , Plaintext "list"
      , Whitespace
      , Plaintext "than"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "have"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "ability"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "jump"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "nearby"
      , Whitespace
      , Plaintext "results"
      , Whitespace
      , Plaintext "(especially"
      , Whitespace
      , Plaintext "seeing"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "most"
      , Whitespace
      , Plaintext "common"
      , Whitespace
      , Plaintext "operations"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "moving"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "next"
      , Whitespace
      , Plaintext "or"
      , Whitespace
      , Plaintext "previous"
      , Whitespace
      , Plaintext "file,"
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "both"
      , Whitespace
      , Plaintext "handled"
      , Whitespace
      , Plaintext "nicely"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Link ":cnf"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Link ":cpf"
      , Whitespace
      , Plaintext "respectively)."
      ]
  , LinkTargets [ "ferret-nowrap" ]
  , Paragraph [ Plaintext "'nowrap'" ]
  , Paragraph
      [ Plaintext "Turned"
      , Whitespace
      , Plaintext "off"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "avoid"
      , Whitespace
      , Plaintext "ugly"
      , Whitespace
      , Plaintext "wrapping"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "makes"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "results"
      , Whitespace
      , Plaintext "list"
      , Whitespace
      , Plaintext "hard"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "read,"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "because"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "results,"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "most"
      , Whitespace
      , Plaintext "relevant"
      , Whitespace
      , Plaintext "information"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "filename,"
      , Whitespace
      , Plaintext "which"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "on"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "left"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "usually"
      , Whitespace
      , Plaintext "visible"
      , Whitespace
      , Plaintext "even"
      , Whitespace
      , Plaintext "without"
      , Whitespace
      , Plaintext "wrapping."
      ]
  , LinkTargets [ "ferret-number" ]
  , Paragraph [ Plaintext "'number'" ]
  , Paragraph
      [ Plaintext "Turned"
      , Whitespace
      , Plaintext "on"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "give"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "sense"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "absolute"
      , Whitespace
      , Plaintext "progress"
      , Whitespace
      , Plaintext "through"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "results."
      ]
  , LinkTargets [ "ferret-scrolloff" ]
  , Paragraph [ Plaintext "'scrolloff'" ]
  , Paragraph
      [ Plaintext "Set"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "0"
      , Whitespace
      , Plaintext "because"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Link "quickfix"
      , Whitespace
      , Plaintext "listing"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "usually"
      , Whitespace
      , Plaintext "small"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Plaintext "default,"
      , Whitespace
      , Plaintext "so"
      , Whitespace
      , Plaintext "trying"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "keep"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "current"
      , Whitespace
      , Plaintext "line"
      , Whitespace
      , Plaintext "away"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "edge"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "viewpoint"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "futile;"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Plaintext "definition"
      , Whitespace
      , Plaintext "it"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "usually"
      , Whitespace
      , Plaintext "near"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "edge."
      ]
  , LinkTargets [ "ferret-nocursorline" ]
  , Paragraph [ Plaintext "'nocursorline'" ]
  , Paragraph
      [ Plaintext "Turned"
      , Whitespace
      , Plaintext "off"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "reduce"
      , Whitespace
      , Plaintext "visual"
      , Whitespace
      , Plaintext "clutter."
      ]
  , DedentAnnotation
  , Paragraph
      [ Plaintext "To"
      , Whitespace
      , Plaintext "prevent"
      , Whitespace
      , Plaintext "any"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "these"
      , Whitespace
      , Link "quickfix"
      , Plaintext "-specific"
      , Whitespace
      , Plaintext "overrides"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "being"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Plaintext "up,"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "can"
      , Whitespace
      , Plaintext "set"
      , Whitespace
      , Link "g:FerretQFOptions"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "0"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "your"
      , Whitespace
      , Link ".vimrc"
      , Plaintext ":"
      ]
  , Fenced [ "let g:FerretQFOptions=0" ]
  , HeadingAnnotation "Troubleshooting"
  , LinkTargets [ "ferret-quotes" ]
  , SubheadingAnnotation
      "Ferret fails to find patterns containing spaces"
  , Paragraph
      [ Plaintext "As"
      , Whitespace
      , Plaintext "described"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "documentation"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Link ":Ack"
      , Plaintext ","
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "pattern"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "passed"
      , Whitespace
      , Plaintext "through"
      , Whitespace
      , Plaintext "as-is"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "underlying"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "command,"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "no"
      , Whitespace
      , Plaintext "escaping"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "required"
      , Whitespace
      , Plaintext "other"
      , Whitespace
      , Plaintext "than"
      , Whitespace
      , Plaintext "preceding"
      , Whitespace
      , Plaintext "spaces"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "single"
      , Whitespace
      , Plaintext "backslash."
      ]
  , Paragraph
      [ Plaintext "So,"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "find"
      , Whitespace
      , Plaintext "\"foo"
      , Whitespace
      , Plaintext "bar\","
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "would"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "like:"
      ]
  , Fenced [ ":Ack foo\\ bar" ]
  , Paragraph
      [ Plaintext "Unescaped"
      , Whitespace
      , Plaintext "spaces"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "treated"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Plaintext "argument"
      , Whitespace
      , Plaintext "separators,"
      , Whitespace
      , Plaintext "so"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "command"
      , Whitespace
      , Plaintext "like"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "following"
      , Whitespace
      , Plaintext "means"
      , Whitespace
      , Plaintext "pass"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Code "-w"
      , Whitespace
      , Plaintext "option"
      , Whitespace
      , Plaintext "through,"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "pattern"
      , Whitespace
      , Plaintext "\"foo\","
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "limit"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "\"bar\""
      , Whitespace
      , Plaintext "directory:"
      ]
  , Fenced [ ":Ack -w foo bar" ]
  , Paragraph
      [ Plaintext "Note"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "including"
      , Whitespace
      , Plaintext "quotes"
      , Whitespace
      , Plaintext "will"
      , Whitespace
      , Plaintext "not"
      , Whitespace
      , Plaintext "do"
      , Whitespace
      , Plaintext "what"
      , Whitespace
      , Plaintext "you"
      , Whitespace
      , Plaintext "intend."
      ]
  , Fenced
      [ " \" Search for '\"foo' in the 'bar\"' directory:"
      , " :Ack \"foo bar\""
      , ""
      , " \" Search for \"'foo' in the \"bar'\" directory:"
      , " :Ack 'foo bar'"
      ]
  , Paragraph
      [ Plaintext "This"
      , Whitespace
      , Plaintext "approach"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "escaping"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "taken"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "order"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "make"
      , Whitespace
      , Plaintext "it"
      , Whitespace
      , Plaintext "straightfoward"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "powerful"
      , Whitespace
      , Plaintext "Perl-compatible"
      , Whitespace
      , Plaintext "regular"
      , Whitespace
      , Plaintext "expression"
      , Whitespace
      , Plaintext "syntax"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "an"
      , Whitespace
      , Plaintext "unambiguous"
      , Whitespace
      , Plaintext "way"
      , Whitespace
      , Plaintext "without"
      , Whitespace
      , Plaintext "having"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "worry"
      , Whitespace
      , Plaintext "about"
      , Whitespace
      , Plaintext "shell"
      , Whitespace
      , Plaintext "escaping"
      , Whitespace
      , Plaintext "rules:"
      ]
  , Fenced
      [ ":Ack \\blog\\((['\"]).*?\\1\\) -i --ignore-dir=src/vendor src dist build"
      ]
  , HeadingAnnotation "FAQ"
  , SubheadingAnnotation
      "Why do Ferret commands start with \"Ack\", \"Lack\" and so on?"
  , Paragraph
      [ Plaintext "Ferret"
      , Whitespace
      , Plaintext "was"
      , Whitespace
      , Plaintext "originally"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "thinnest"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "wrappers"
      , Whitespace
      , Plaintext "(7"
      , Whitespace
      , Plaintext "lines"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "code"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "my"
      , Whitespace
      , Link ".vimrc"
      , Plaintext ")"
      , Whitespace
      , Plaintext "around"
      , Whitespace
      , Code "ack"
      , Plaintext "."
      , Whitespace
      , Plaintext "The"
      , Whitespace
      , Plaintext "earliest"
      , Whitespace
      , Plaintext "traces"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "it"
      , Whitespace
      , Plaintext "can"
      , Whitespace
      , Plaintext "be"
      , Whitespace
      , Plaintext "seen"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "initial"
      , Whitespace
      , Plaintext "commit"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "my"
      , Whitespace
      , Plaintext "dotfiles"
      , Whitespace
      , Plaintext "repo"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "May,"
      , Whitespace
      , Plaintext "2009"
      , Whitespace
      , Plaintext "(https://wt.pe/h)."
      ]
  , Paragraph
      [ Plaintext "So,"
      , Whitespace
      , Plaintext "even"
      , Whitespace
      , Plaintext "though"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "has"
      , Whitespace
      , Plaintext "a"
      , Whitespace
      , Plaintext "new"
      , Whitespace
      , Plaintext "name"
      , Whitespace
      , Plaintext "now"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "actually"
      , Whitespace
      , Plaintext "prefers"
      , Whitespace
      , Code "ag"
      , Whitespace
      , Plaintext "over"
      , Whitespace
      , Code "ack"
      , Whitespace
      , Plaintext "when"
      , Whitespace
      , Plaintext "available,"
      , Whitespace
      , Plaintext "I"
      , Whitespace
      , Plaintext "prefer"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "keep"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "command"
      , Whitespace
      , Plaintext "names"
      , Whitespace
      , Plaintext "intact"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "benefit"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "years"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "accumulated"
      , Whitespace
      , Plaintext "muscle-memory."
      ]
  , HeadingAnnotation "Related"
  , Paragraph
      [ Plaintext "Just"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "aims"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "improve"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "multi-file"
      , Whitespace
      , Plaintext "search"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "replace"
      , Whitespace
      , Plaintext "experience,"
      , Whitespace
      , Plaintext "Loupe"
      , Whitespace
      , Plaintext "does"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "same"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "within-file"
      , Whitespace
      , Plaintext "searching:"
      ]
  , Paragraph [ Plaintext "https://github.com/wincent/loupe" ]
  , HeadingAnnotation "Website"
  , Paragraph
      [ Plaintext "The"
      , Whitespace
      , Plaintext "official"
      , Whitespace
      , Plaintext "Ferret"
      , Whitespace
      , Plaintext "source"
      , Whitespace
      , Plaintext "code"
      , Whitespace
      , Plaintext "repo"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "at:"
      ]
  , Paragraph [ Plaintext "http://git.wincent.com/ferret.git" ]
  , Paragraph
      [ Plaintext "A"
      , Whitespace
      , Plaintext "mirror"
      , Whitespace
      , Plaintext "exists"
      , Whitespace
      , Plaintext "at:"
      ]
  , Paragraph [ Plaintext "https://github.com/wincent/ferret" ]
  , Paragraph
      [ Plaintext "Official"
      , Whitespace
      , Plaintext "releases"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "listed"
      , Whitespace
      , Plaintext "at:"
      ]
  , Paragraph
      [ Plaintext "http://www.vim.org/scripts/script.php?script_id=5220"
      ]
  , HeadingAnnotation "License"
  , Paragraph
      [ Plaintext "Copyright"
      , Whitespace
      , Plaintext "2015-present"
      , Whitespace
      , Plaintext "Greg"
      , Whitespace
      , Plaintext "Hurrell."
      , Whitespace
      , Plaintext "All"
      , Whitespace
      , Plaintext "rights"
      , Whitespace
      , Plaintext "reserved."
      ]
  , Paragraph
      [ Plaintext "Redistribution"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "use"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "source"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "binary"
      , Whitespace
      , Plaintext "forms,"
      , Whitespace
      , Plaintext "with"
      , Whitespace
      , Plaintext "or"
      , Whitespace
      , Plaintext "without"
      , Whitespace
      , Plaintext "modification,"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "permitted"
      , Whitespace
      , Plaintext "provided"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "following"
      , Whitespace
      , Plaintext "conditions"
      , Whitespace
      , Plaintext "are"
      , Whitespace
      , Plaintext "met:"
      ]
  , Paragraph
      [ Plaintext "1."
      , Whitespace
      , Plaintext "Redistributions"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "source"
      , Whitespace
      , Plaintext "code"
      , Whitespace
      , Plaintext "must"
      , Whitespace
      , Plaintext "retain"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "above"
      , Whitespace
      , Plaintext "copyright"
      , Whitespace
      , Plaintext "notice,"
      , Whitespace
      , Plaintext "this"
      , Whitespace
      , Plaintext "list"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "conditions"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "following"
      , Whitespace
      , Plaintext "disclaimer."
      ]
  , Paragraph
      [ Plaintext "2."
      , Whitespace
      , Plaintext "Redistributions"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "binary"
      , Whitespace
      , Plaintext "form"
      , Whitespace
      , Plaintext "must"
      , Whitespace
      , Plaintext "reproduce"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "above"
      , Whitespace
      , Plaintext "copyright"
      , Whitespace
      , Plaintext "notice,"
      , Whitespace
      , Plaintext "this"
      , Whitespace
      , Plaintext "list"
      , Whitespace
      , Plaintext "of"
      , Whitespace
      , Plaintext "conditions"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "following"
      , Whitespace
      , Plaintext "disclaimer"
      , Whitespace
      , Plaintext "in"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "documentation"
      , Whitespace
      , Plaintext "and/or"
      , Whitespace
      , Plaintext "other"
      , Whitespace
      , Plaintext "materials"
      , Whitespace
      , Plaintext "provided"
      , Whitespace
      , Plaintext "with"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "distribution."
      ]
  , Paragraph
      [ Plaintext "THIS"
      , Whitespace
      , Plaintext "SOFTWARE"
      , Whitespace
      , Plaintext "IS"
      , Whitespace
      , Plaintext "PROVIDED"
      , Whitespace
      , Plaintext "BY"
      , Whitespace
      , Plaintext "THE"
      , Whitespace
      , Plaintext "COPYRIGHT"
      , Whitespace
      , Plaintext "HOLDERS"
      , Whitespace
      , Plaintext "AND"
      , Whitespace
      , Plaintext "CONTRIBUTORS"
      , Whitespace
      , Plaintext "\"AS"
      , Whitespace
      , Plaintext "IS\""
      , Whitespace
      , Plaintext "AND"
      , Whitespace
      , Plaintext "ANY"
      , Whitespace
      , Plaintext "EXPRESS"
      , Whitespace
      , Plaintext "OR"
      , Whitespace
      , Plaintext "IMPLIED"
      , Whitespace
      , Plaintext "WARRANTIES,"
      , Whitespace
      , Plaintext "INCLUDING,"
      , Whitespace
      , Plaintext "BUT"
      , Whitespace
      , Plaintext "NOT"
      , Whitespace
      , Plaintext "LIMITED"
      , Whitespace
      , Plaintext "TO,"
      , Whitespace
      , Plaintext "THE"
      , Whitespace
      , Plaintext "IMPLIED"
      , Whitespace
      , Plaintext "WARRANTIES"
      , Whitespace
      , Plaintext "OF"
      , Whitespace
      , Plaintext "MERCHANTABILITY"
      , Whitespace
      , Plaintext "AND"
      , Whitespace
      , Plaintext "FITNESS"
      , Whitespace
      , Plaintext "FOR"
      , Whitespace
      , Plaintext "A"
      , Whitespace
      , Plaintext "PARTICULAR"
      , Whitespace
      , Plaintext "PURPOSE"
      , Whitespace
      , Plaintext "ARE"
      , Whitespace
      , Plaintext "DISCLAIMED."
      , Whitespace
      , Plaintext "IN"
      , Whitespace
      , Plaintext "NO"
      , Whitespace
      , Plaintext "EVENT"
      , Whitespace
      , Plaintext "SHALL"
      , Whitespace
      , Plaintext "THE"
      , Whitespace
      , Plaintext "COPYRIGHT"
      , Whitespace
      , Plaintext "HOLDERS"
      , Whitespace
      , Plaintext "OR"
      , Whitespace
      , Plaintext "CONTRIBUTORS"
      , Whitespace
      , Plaintext "BE"
      , Whitespace
      , Plaintext "LIABLE"
      , Whitespace
      , Plaintext "FOR"
      , Whitespace
      , Plaintext "ANY"
      , Whitespace
      , Plaintext "DIRECT,"
      , Whitespace
      , Plaintext "INDIRECT,"
      , Whitespace
      , Plaintext "INCIDENTAL,"
      , Whitespace
      , Plaintext "SPECIAL,"
      , Whitespace
      , Plaintext "EXEMPLARY,"
      , Whitespace
      , Plaintext "OR"
      , Whitespace
      , Plaintext "CONSEQUENTIAL"
      , Whitespace
      , Plaintext "DAMAGES"
      , Whitespace
      , Plaintext "(INCLUDING,"
      , Whitespace
      , Plaintext "BUT"
      , Whitespace
      , Plaintext "NOT"
      , Whitespace
      , Plaintext "LIMITED"
      , Whitespace
      , Plaintext "TO,"
      , Whitespace
      , Plaintext "PROCUREMENT"
      , Whitespace
      , Plaintext "OF"
      , Whitespace
      , Plaintext "SUBSTITUTE"
      , Whitespace
      , Plaintext "GOODS"
      , Whitespace
      , Plaintext "OR"
      , Whitespace
      , Plaintext "SERVICES;"
      , Whitespace
      , Plaintext "LOSS"
      , Whitespace
      , Plaintext "OF"
      , Whitespace
      , Plaintext "USE,"
      , Whitespace
      , Plaintext "DATA,"
      , Whitespace
      , Plaintext "OR"
      , Whitespace
      , Plaintext "PROFITS;"
      , Whitespace
      , Plaintext "OR"
      , Whitespace
      , Plaintext "BUSINESS"
      , Whitespace
      , Plaintext "INTERRUPTION)"
      , Whitespace
      , Plaintext "HOWEVER"
      , Whitespace
      , Plaintext "CAUSED"
      , Whitespace
      , Plaintext "AND"
      , Whitespace
      , Plaintext "ON"
      , Whitespace
      , Plaintext "ANY"
      , Whitespace
      , Plaintext "THEORY"
      , Whitespace
      , Plaintext "OF"
      , Whitespace
      , Plaintext "LIABILITY,"
      , Whitespace
      , Plaintext "WHETHER"
      , Whitespace
      , Plaintext "IN"
      , Whitespace
      , Plaintext "CONTRACT,"
      , Whitespace
      , Plaintext "STRICT"
      , Whitespace
      , Plaintext "LIABILITY,"
      , Whitespace
      , Plaintext "OR"
      , Whitespace
      , Plaintext "TORT"
      , Whitespace
      , Plaintext "(INCLUDING"
      , Whitespace
      , Plaintext "NEGLIGENCE"
      , Whitespace
      , Plaintext "OR"
      , Whitespace
      , Plaintext "OTHERWISE)"
      , Whitespace
      , Plaintext "ARISING"
      , Whitespace
      , Plaintext "IN"
      , Whitespace
      , Plaintext "ANY"
      , Whitespace
      , Plaintext "WAY"
      , Whitespace
      , Plaintext "OUT"
      , Whitespace
      , Plaintext "OF"
      , Whitespace
      , Plaintext "THE"
      , Whitespace
      , Plaintext "USE"
      , Whitespace
      , Plaintext "OF"
      , Whitespace
      , Plaintext "THIS"
      , Whitespace
      , Plaintext "SOFTWARE,"
      , Whitespace
      , Plaintext "EVEN"
      , Whitespace
      , Plaintext "IF"
      , Whitespace
      , Plaintext "ADVISED"
      , Whitespace
      , Plaintext "OF"
      , Whitespace
      , Plaintext "THE"
      , Whitespace
      , Plaintext "POSSIBILITY"
      , Whitespace
      , Plaintext "OF"
      , Whitespace
      , Plaintext "SUCH"
      , Whitespace
      , Plaintext "DAMAGE."
      ]
  , HeadingAnnotation "Development"
  , SubheadingAnnotation "Contributing patches"
  , Paragraph
      [ Plaintext "Patches"
      , Whitespace
      , Plaintext "can"
      , Whitespace
      , Plaintext "be"
      , Whitespace
      , Plaintext "sent"
      , Whitespace
      , Plaintext "via"
      , Whitespace
      , Plaintext "mail"
      , Whitespace
      , Plaintext "to"
      , Whitespace
      , Plaintext "greg@hurrell.net,"
      , Whitespace
      , Plaintext "or"
      , Whitespace
      , Plaintext "as"
      , Whitespace
      , Plaintext "GitHub"
      , Whitespace
      , Plaintext "pull"
      , Whitespace
      , Plaintext "requests"
      , Whitespace
      , Plaintext "at:"
      , Whitespace
      , Plaintext "https://github.com/wincent/ferret/pulls"
      ]
  , SubheadingAnnotation "Cutting a new release"
  , Paragraph
      [ Plaintext "At"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "moment"
      , Whitespace
      , Plaintext "the"
      , Whitespace
      , Plaintext "release"
      , Whitespace
      , Plaintext "process"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "manual:"
      ]
  , List
      [ ListItem
          [ Plaintext "Perform"
          , Whitespace
          , Plaintext "final"
          , Whitespace
          , Plaintext "sanity"
          , Whitespace
          , Plaintext "checks"
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Plaintext "manual"
          , Whitespace
          , Plaintext "testing"
          ]
      , ListItem
          [ Plaintext "Update"
          , Whitespace
          , Plaintext "the"
          , Whitespace
          , Link "ferret-history"
          , Whitespace
          , Plaintext "section"
          , Whitespace
          , Plaintext "of"
          , Whitespace
          , Plaintext "the"
          , Whitespace
          , Plaintext "documentation"
          ]
      , ListItem
          [ Plaintext "Verify"
          , Whitespace
          , Plaintext "clean"
          , Whitespace
          , Plaintext "work"
          , Whitespace
          , Plaintext "tree:"
          ]
      ]
  , Fenced [ "git status" ]
  , List
      [ ListItem
          [ Plaintext "Tag"
          , Whitespace
          , Plaintext "the"
          , Whitespace
          , Plaintext "release:"
          ]
      ]
  , Fenced [ "git tag -s -m \"$VERSION release\" $VERSION" ]
  , List
      [ ListItem
          [ Plaintext "Publish"
          , Whitespace
          , Plaintext "the"
          , Whitespace
          , Plaintext "code:"
          ]
      ]
  , Fenced
      [ "git push origin master --follow-tags"
      , "git push github master --follow-tags"
      ]
  , List
      [ ListItem
          [ Plaintext "Produce"
          , Whitespace
          , Plaintext "the"
          , Whitespace
          , Plaintext "release"
          , Whitespace
          , Plaintext "archive:"
          ]
      ]
  , Fenced [ "git archive -o ferret-$VERSION.zip HEAD -- ." ]
  , List
      [ ListItem
          [ Plaintext "Upload"
          , Whitespace
          , Plaintext "to"
          , Whitespace
          , Plaintext "http://www.vim.org/scripts/script.php?script_id=5220"
          ]
      ]
  , HeadingAnnotation "Authors"
  , Paragraph
      [ Plaintext "Ferret"
      , Whitespace
      , Plaintext "is"
      , Whitespace
      , Plaintext "written"
      , Whitespace
      , Plaintext "and"
      , Whitespace
      , Plaintext "maintained"
      , Whitespace
      , Plaintext "by"
      , Whitespace
      , Plaintext "Greg"
      , Whitespace
      , Plaintext "Hurrell"
      , Whitespace
      , Plaintext "<greg@hurrell.net>."
      ]
  , Paragraph
      [ Plaintext "The"
      , Whitespace
      , Plaintext "idea"
      , Whitespace
      , Plaintext "for"
      , Whitespace
      , Plaintext "vim-dispatch"
      , Whitespace
      , Plaintext "integration"
      , Whitespace
      , Plaintext "was"
      , Whitespace
      , Plaintext "taken"
      , Whitespace
      , Plaintext "from"
      , Whitespace
      , Plaintext "Miles"
      , Whitespace
      , Plaintext "Sterrett's"
      , Whitespace
      , Plaintext "ack.vim"
      , Whitespace
      , Plaintext "plug-in"
      , Whitespace
      , Plaintext "(https://github.com/mileszs/ack.vim)."
      ]
  , Paragraph
      [ Plaintext "Other"
      , Whitespace
      , Plaintext "contributors"
      , Whitespace
      , Plaintext "that"
      , Whitespace
      , Plaintext "have"
      , Whitespace
      , Plaintext "submitted"
      , Whitespace
      , Plaintext "patches"
      , Whitespace
      , Plaintext "include"
      , Whitespace
      , Plaintext "(in"
      , Whitespace
      , Plaintext "alphabetical"
      , Whitespace
      , Plaintext "order):"
      ]
  , List
      [ ListItem [ Plaintext "Daniel" , Whitespace , Plaintext "Silva" ]
      , ListItem [ Plaintext "Joe" , Whitespace , Plaintext "Lencioni" ]
      , ListItem
          [ Plaintext "Nelo-Thara" , Whitespace , Plaintext "Wallus" ]
      , ListItem [ Plaintext "Vaibhav" , Whitespace , Plaintext "Sagar" ]
      ]
  , HeadingAnnotation "History"
  , SubheadingAnnotation "1.2a (16 May 2016)"
  , List
      [ ListItem
          [ Plaintext "Add"
          , Whitespace
          , Plaintext "optional"
          , Whitespace
          , Plaintext "support"
          , Whitespace
          , Plaintext "for"
          , Whitespace
          , Plaintext "running"
          , Whitespace
          , Plaintext "searches"
          , Whitespace
          , Plaintext "asynchronously"
          , Whitespace
          , Plaintext "using"
          , Whitespace
          , Plaintext "Vim's"
          , Whitespace
          , Link "+job"
          , Whitespace
          , Plaintext "feature"
          , Whitespace
          , Plaintext "(enabled"
          , Whitespace
          , Plaintext "by"
          , Whitespace
          , Plaintext "default"
          , Whitespace
          , Plaintext "in"
          , Whitespace
          , Plaintext "sufficiently"
          , Whitespace
          , Plaintext "recent"
          , Whitespace
          , Plaintext "versions"
          , Whitespace
          , Plaintext "of"
          , Whitespace
          , Plaintext "Vim);"
          , Whitespace
          , Plaintext "see"
          , Whitespace
          , Link "g:FerretJob"
          , Plaintext ","
          , Whitespace
          , Link ":FerretCancelAsync"
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Link ":FerretPullAsync"
          , Plaintext "."
          ]
      ]
  , SubheadingAnnotation "1.1.1 (7 March 2016)"
  , List
      [ ListItem
          [ Plaintext "Fix"
          , Whitespace
          , Plaintext "another"
          , Whitespace
          , Plaintext "edge"
          , Whitespace
          , Plaintext "case"
          , Whitespace
          , Plaintext "when"
          , Whitespace
          , Plaintext "searching"
          , Whitespace
          , Plaintext "for"
          , Whitespace
          , Plaintext "patterns"
          , Whitespace
          , Plaintext "containing"
          , Whitespace
          , Plaintext "\"#\","
          , Whitespace
          , Plaintext "only"
          , Whitespace
          , Plaintext "manifesting"
          , Whitespace
          , Plaintext "under"
          , Whitespace
          , Plaintext "dispatch.vim."
          ]
      ]
  , SubheadingAnnotation "1.1 (7 March 2016)"
  , List
      [ ListItem
          [ Plaintext "Fix"
          , Whitespace
          , Plaintext "edge"
          , Whitespace
          , Plaintext "case"
          , Whitespace
          , Plaintext "when"
          , Whitespace
          , Plaintext "searching"
          , Whitespace
          , Plaintext "for"
          , Whitespace
          , Plaintext "strings"
          , Whitespace
          , Plaintext "of"
          , Whitespace
          , Plaintext "the"
          , Whitespace
          , Plaintext "form"
          , Whitespace
          , Plaintext "\"<foo>\"."
          ]
      , ListItem
          [ Plaintext "Fix"
          , Whitespace
          , Plaintext "edge"
          , Whitespace
          , Plaintext "case"
          , Whitespace
          , Plaintext "when"
          , Whitespace
          , Plaintext "searching"
          , Whitespace
          , Plaintext "for"
          , Whitespace
          , Plaintext "patterns"
          , Whitespace
          , Plaintext "containing"
          , Whitespace
          , Plaintext "\"#\""
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Plaintext "\"%\"."
          ]
      , ListItem
          [ Plaintext "Provide"
          , Whitespace
          , Plaintext "completion"
          , Whitespace
          , Plaintext "for"
          , Whitespace
          , Code "ag"
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Code "ack"
          , Whitespace
          , Plaintext "options"
          , Whitespace
          , Plaintext "when"
          , Whitespace
          , Plaintext "using"
          , Whitespace
          , Link ":Ack"
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Link ":Lack"
          , Plaintext "."
          ]
      , ListItem
          [ Plaintext "Fix"
          , Whitespace
          , Plaintext "display"
          , Whitespace
          , Plaintext "of"
          , Whitespace
          , Plaintext "error"
          , Whitespace
          , Plaintext "messages"
          , Whitespace
          , Plaintext "under"
          , Whitespace
          , Plaintext "dispatch.vim."
          ]
      ]
  , SubheadingAnnotation "1.0 (28 December 2015)"
  , List
      [ ListItem
          [ Plaintext "Fix"
          , Whitespace
          , Plaintext "broken"
          , Whitespace
          , Link ":Qargs"
          , Whitespace
          , Plaintext "command"
          , Whitespace
          , Plaintext "(patch"
          , Whitespace
          , Plaintext "from"
          , Whitespace
          , Plaintext "Daniel"
          , Whitespace
          , Plaintext "Silva)."
          ]
      , ListItem
          [ Plaintext "Add"
          , Whitespace
          , Link "g:FerretQFHandler"
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Link "g:FerretLLHandler"
          , Whitespace
          , Plaintext "options"
          , Whitespace
          , Plaintext "(patch"
          , Whitespace
          , Plaintext "from"
          , Whitespace
          , Plaintext "Daniel"
          , Whitespace
          , Plaintext "Silva)."
          ]
      , ListItem
          [ Plaintext "Make"
          , Whitespace
          , Link "<Plug>"
          , Whitespace
          , Plaintext "mappings"
          , Whitespace
          , Plaintext "accessible"
          , Whitespace
          , Plaintext "even"
          , Whitespace
          , Link "g:FerretMap"
          , Whitespace
          , Plaintext "is"
          , Whitespace
          , Plaintext "set"
          , Whitespace
          , Plaintext "to"
          , Whitespace
          , Plaintext "0."
          ]
      , ListItem
          [ Plaintext "Fix"
          , Whitespace
          , Plaintext "failure"
          , Whitespace
          , Plaintext "to"
          , Whitespace
          , Plaintext "report"
          , Whitespace
          , Plaintext "filename"
          , Whitespace
          , Plaintext "when"
          , Whitespace
          , Plaintext "using"
          , Whitespace
          , Code "ack"
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Plaintext "explicitly"
          , Whitespace
          , Plaintext "scoping"
          , Whitespace
          , Plaintext "search"
          , Whitespace
          , Plaintext "to"
          , Whitespace
          , Plaintext "a"
          , Whitespace
          , Plaintext "single"
          , Whitespace
          , Plaintext "file"
          , Whitespace
          , Plaintext "(patch"
          , Whitespace
          , Plaintext "from"
          , Whitespace
          , Plaintext "Daniel"
          , Whitespace
          , Plaintext "Silva)."
          ]
      , ListItem
          [ Plaintext "When"
          , Whitespace
          , Plaintext "using"
          , Whitespace
          , Code "ag"
          , Plaintext ","
          , Whitespace
          , Plaintext "report"
          , Whitespace
          , Plaintext "multiple"
          , Whitespace
          , Plaintext "matches"
          , Whitespace
          , Plaintext "per"
          , Whitespace
          , Plaintext "line"
          , Whitespace
          , Plaintext "instead"
          , Whitespace
          , Plaintext "of"
          , Whitespace
          , Plaintext "just"
          , Whitespace
          , Plaintext "the"
          , Whitespace
          , Plaintext "first"
          , Whitespace
          , Plaintext "(patch"
          , Whitespace
          , Plaintext "from"
          , Whitespace
          , Plaintext "Daniel"
          , Whitespace
          , Plaintext "Silva)."
          ]
      , ListItem
          [ Plaintext "Improve"
          , Whitespace
          , Plaintext "content"
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Plaintext "display"
          , Whitespace
          , Plaintext "of"
          , Whitespace
          , Plaintext "error"
          , Whitespace
          , Plaintext "messages."
          ]
      ]
  , SubheadingAnnotation "0.3 (24 July 2015)"
  , List
      [ ListItem
          [ Plaintext "Added"
          , Whitespace
          , Plaintext "highlighting"
          , Whitespace
          , Plaintext "of"
          , Whitespace
          , Plaintext "search"
          , Whitespace
          , Plaintext "pattern"
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Plaintext "related"
          , Whitespace
          , Link "g:FerretHlsearch"
          , Whitespace
          , Plaintext "option"
          , Whitespace
          , Plaintext "(patch"
          , Whitespace
          , Plaintext "from"
          , Whitespace
          , Plaintext "Nelo-Thara"
          , Whitespace
          , Plaintext "Wallus)."
          ]
      , ListItem
          [ Plaintext "Add"
          , Whitespace
          , Plaintext "better"
          , Whitespace
          , Plaintext "error"
          , Whitespace
          , Plaintext "reporting"
          , Whitespace
          , Plaintext "for"
          , Whitespace
          , Plaintext "failed"
          , Whitespace
          , Plaintext "or"
          , Whitespace
          , Plaintext "incorrect"
          , Whitespace
          , Plaintext "searches."
          ]
      ]
  , SubheadingAnnotation "0.2 (16 July 2015)"
  , List
      [ ListItem
          [ Plaintext "Added"
          , Whitespace
          , Link "FerretDidWrite"
          , Whitespace
          , Plaintext "and"
          , Whitespace
          , Link "FerretWillWrite"
          , Whitespace
          , Plaintext "autocommands"
          , Whitespace
          , Plaintext "(patch"
          , Whitespace
          , Plaintext "from"
          , Whitespace
          , Plaintext "Joe"
          , Whitespace
          , Plaintext "Lencioni)."
          ]
      , ListItem
          [ Plaintext "Add"
          , Whitespace
          , Link "<Plug>(FerretAcks)"
          , Whitespace
          , Plaintext "mapping"
          , Whitespace
          , Plaintext "(patch"
          , Whitespace
          , Plaintext "from"
          , Whitespace
          , Plaintext "Nelo-Thara"
          , Whitespace
          , Plaintext "Wallus)."
          ]
      ]
  , SubheadingAnnotation "0.1 (8 July 2015)"
  , List
      [ ListItem
          [ Plaintext "Initial"
          , Whitespace
          , Plaintext "release,"
          , Whitespace
          , Plaintext "extracted"
          , Whitespace
          , Plaintext "from"
          , Whitespace
          , Plaintext "my"
          , Whitespace
          , Plaintext "dotfiles"
          , Whitespace
          , Plaintext "(https://github.com/wincent/wincent)."
          ]
      ]
  ]