anchor.diff:          let editorData = x.Editor.GetContent<ITextEditorDataProvider>().GetTextEditorData()
           editorData.Caret.Mode <- CaretMode.Block
   
  -    override x.KeyPress(descriptor:KeyDescriptor) =
  +    override x.KeyPress descriptor =
           let editorData = x.Editor.GetContent<ITextEditorDataProvider>().GetTextEditorData()
  -        let state, handledKeyPress = handleKeyPress vimState descriptor editorData
  -        vimState <- state
  -        match handledKeyPress with
  -        | true -> false
  -        | false -> base.KeyPress descriptor
  +        let oldState = vimState
  +
  +        let newState, handledKeyPress = handleKeyPress vimState descriptor editorData
  +        LoggingService.LogDebug (sprintf "%A %A" newState handledKeyPress)
  +        vimState <- newState
  +        match oldState.mode with
  +        | InsertMode -> base.KeyPress descriptor
  +        | _ -> false
  
positive.code:         match command.commandType with
          | SwitchMode mode ->
              match mode with
              | NormalMode -> textEditorData.Caret.Mode <- CaretMode.Block
              | VisualMode -> textEditorData.Caret.Mode <- CaretMode.Block
              | InsertMode -> textEditorData.Caret.Mode <- CaretMode.Insert
              { vimState with mode = mode }
          | _ -> vimState
  
      let (|Digit|_|) character =
  
negative.code:         | StartOfLine -> editor.Caret.Offset, line.Offset
          | StartOfDocument -> editor.Caret.Offset, 0
          | FirstNonWhitespace -> editor.Caret.Offset, line.Offset + editor.GetLineIndent(editor.Caret.Line).Length
          | WholeLine -> line.Offset, line.EndOffsetIncludingDelimiter
          | LastLine -> 
              let lastLine = editor.GetLine editor.Document.LineCount
              editor.Caret.Offset, lastLine.Offset
  