anchor.diff:                  state.keys @ [sprintf "<C-%c>" c]
               | NormalMode, c when keyPress.KeyChar <> '\000' -> state.keys @ [c |> string]
               | VisualMode, c when keyPress.KeyChar <> '\000' -> state.keys @ [c |> string]
  -            | VisualMode, c | InsertMode, c ->
  +            | VisualLineMode, c when keyPress.KeyChar <> '\000' -> state.keys @ [c |> string]
  +            | VisualMode, c | VisualLineMode, c | InsertMode, c ->
                   match keyPress.SpecialKey with
                   | SpecialKey.Escape -> state.keys @ ["<esc>"]
                   | _ -> state.keys
  
positive.code:             | NormalMode, [ "g"; "g" ] -> [ run Move StartOfDocument ]
              | NormalMode, [ "." ] -> [ run RepeatLastAction Nothing ]
              | NormalMode, [ "g" ] -> wait
              | VisualMode, [ Movement m ] -> [ run Move m ]
              | VisualMode, [ ModeChange mode ] -> [ run (SwitchMode mode) Nothing ]
              | VisualMode, [ "<esc>" ] -> [ run (SwitchMode NormalMode) Nothing ]
              | VisualMode, [ "x" ] -> [ run Delete Selection; run (SwitchMode NormalMode) Nothing ]
              | VisualMode, [ "d" ] -> [ run Delete Selection; run (SwitchMode NormalMode) Nothing ]
              | VisualMode, [ "c" ] -> [ run Delete Selection; run (SwitchMode InsertMode) Nothing ]
              | _         , _ :: _ :: _ :: _ :: t -> [ run ResetKeys Nothing ]
              | _ -> []
          multiplier, action, newState
  
negative.code:         match character with
          | "i" -> Some InsertMode
          | "v" -> Some VisualMode
          | "V" -> Some VisualLineMode
          | _ -> None
  
      let (|Keys|_|) (keys:string) =
          keys |> Seq.map(fun c -> c |> string) |> List.ofSeq |> Some
  
      let (|VisualModes|_|) mode =
          match mode with
          | VisualMode -> Some VisualMode
          | VisualLineMode -> Some VisualLineMode
          | _ -> None
      let getCommand (repeat: int option) commandType textObject =
          { repeat=(match repeat with | Some r -> r | None -> 1); commandType=commandType; textObject=textObject }
  
  