anchor.diff:              | NormalMode, [ "c"; "c" ] -> [ run Delete WholeLine; run (SwitchMode InsertMode) Nothing ]
               | NormalMode, [ "C" ] -> [ run Delete EndOfLine; run (SwitchMode InsertMode) Nothing ]
               | NormalMode, [ "D" ] -> [ run Delete EndOfLine ]
  +            | NormalMode, [ "x" ] -> [ run Delete CurrentLocation ]
               | NormalMode, [ Action action; FindChar m; c ] -> [ run action (m c) ]
               | NormalMode, [ Action action; "i"; BlockDelimiter c ] -> [ run action (InnerBlock c) ]
               | NormalMode, [ ModeChange mode ] -> [ run (SwitchMode mode) Nothing ]
  +            | VisualMode, [ ModeChange mode ] -> [ run (SwitchMode mode) Nothing ]
               | NormalMode, [ "a" ] -> [ run Move Right; run (SwitchMode InsertMode) Nothing ]
               | NormalMode, [ "A" ] -> [ run Move EndOfLine; run (SwitchMode InsertMode) Nothing ]
               | NormalMode, [ "o" ] -> [ run InsertLineBelow Nothing; run (SwitchMode InsertMode) Nothing ]
  
positive.code:     | Nothing
      | HalfPageUp
      | HalfPageDown
  
  type VimAction = {
      repeat: int
  
negative.code:     let parseKeys (state:VimState) =
          let keyList = state.keys// |> Seq.toList
          let multiplier, keyList =
              match keyList with
              // d2w
              | c :: OneToNine d1 :: Digit d2 :: Digit d3 :: Digit d4 :: t -> Some(d1 * 1000 + d2 * 100 + d3 * 10 + d4), c::t
              | c :: OneToNine d1 :: Digit d2 :: Digit d3 :: t             -> Some (d1 * 100 + d2 * 10 + d3), c::t
              | c :: OneToNine d1 :: Digit d2 :: t -> Some (d1 * 10 + d2), c::t
              | c :: OneToNine d :: t -> Some d, c::t
              // 2dw
              | OneToNine d1 :: Digit d2 :: Digit d3 :: Digit d4 :: t -> Some(d1 * 1000 + d2 * 100 + d3 * 10 + d4), t
              | OneToNine d1 :: Digit d2 :: Digit d3 :: t -> Some (d1 * 100 + d2 * 10 + d3), t
              | OneToNine d1 :: Digit d2 :: t -> Some (d1 * 10 + d2), t
  