message: switched to key by key handling and added cursorposition
diff: import * as vscode from "vscode";
  import * as parser from "./parser";
  import {VimState, ModeHandler} from "../mode/modeHandler";
  +import { Position, PositionDiff } from './../common/motion/position';
  import {attach, RPCValue} from 'promised-neovim-client';
  import {spawn} from 'child_process';
  import { TextEditor } from "../textEditor";
  @@ -13,12 +14,12 @@ async function run(vimState: VimState, command: string) {
  const proc = spawn('nvim', ['-u', 'NONE', '-N', '--embed'], {cwd: __dirname });
  const nvim = await attach(proc.stdin, proc.stdout);
  nvim.on('request', (method: string, args: RPCValue[], resp: RPCValue) => {
  - console.log(method, args, resp)
  + console.log(method, args, resp);
  // handle msgpack-rpc request
  });
  nvim.on('notification', (method: string, args: RPCValue[]) => {
  - console.log(method, args)
  + console.log(method, args);
  // handle msgpack-rpc notification
  });
  const buf = await nvim.getCurrentBuf();
  @@ -31,7 +32,15 @@ async function run(vimState: VimState, command: string) {
  await nvim.callFunction("setpos", [`'${mark.name}`, [0, mark.position.line + 1, mark.position.character, false]]);
  }
  - await nvim.command(command);
  + command = ":" + command + "\n";
  + for (const key of command) {
  + await nvim.input(key);
  + }
  +
  +
  + if ((await nvim.getMode()).blocking) {
  + await nvim.input('<esc>');
  + }
  await TextEditor.replace(
  new vscode.Range(0, 0, TextEditor.getLineCount() - 1,
  @@ -39,6 +48,9 @@ async function run(vimState: VimState, command: string) {
  (await buf.getLines(0, -1, false)).join('\n')
  );
  + let [row, character] = (await nvim.callFunction("getpos", ["."]) as Array<number>).slice(1, 3);
  + vimState.editor.selection = new vscode.Selection(new Position(row-1, character), new Position(row-1, character));
  +
  if (Configuration.expandtab) {
  await vscode.commands.executeCommand("editor.action.indentationToSpaces");
  }
  @@ -87,8 +99,9 @@ export async function runCmdLine(command : string, modeHandler : ModeHandler) :
  await run(modeHandler.vimState, command).then(() => {
  console.log("Substituted for neovim command");
  }).catch((err) => console.log(err));
  - }
  + } else {
  await cmd.execute(modeHandler.vimState.editor, modeHandler);
  + }
  return;
  } catch (e) {
  await run(modeHandler.vimState, command).then(() => {
  