anchor.diff:          | ["n"] -> Some (Jump SearchAgain)
           | ["N"] -> Some (Jump SearchAgainBackwards)
           | _ -> None
  +
  +    let unfinishedMovements = [ "g"; "["; "]"; "@"; "m"; "`"; "'" ] |> set
  +
  +    let (|UnfinishedMovement|_|) character =
  +        if unfinishedMovements.Contains character then
  +            Some UnfinishedMovement
  +        else
  +            None
   
       let (|IndentChar|_|) = function
           | ">" -> Some Indent
  
positive.code:             | NotInsertMode, [ "q" ] when state.macro.IsNone -> wait
              | NotInsertMode, [ "q"; c ] -> [ run (MacroStart (char c)) Nothing ]
              | NotInsertMode, [ "q" ] -> [ run MacroEnd Nothing ]
              | NotInsertMode, [ "@" ] -> wait
              | NotInsertMode, [ "@"; c ] -> [ run (ReplayMacro (char c)) Nothing ]
              | NotInsertMode, [ "g" ] -> wait
              | NotInsertMode, [ "m" ] -> wait
              | NotInsertMode, [ "`" ] -> wait
              | NotInsertMode, [ "'" ] -> wait
              | NotInsertMode, [ "g"; "g" ] ->
                  let lineNumber = match numericArgument with Some n -> n | None -> 1
                  [ runOnce Move (Jump (StartOfLineNumber lineNumber)) ]
  
negative.code:         | ["b"] -> Some WordBackwards
          | ["B"] -> Some WORDBackwards
          | ["e"] -> Some ForwardToEndOfWord
          | ["E"] -> Some ForwardToEndOfWORD
          | ["g"; "e"] -> Some BackwardToEndOfWord
          | ["g"; "E"] -> Some BackwardToEndOfWORD
  