Mercurial > vim
changeset 4256:79176b78969c v7.3.879
updated for version 7.3.879
Problem: When using an ex command in operator pending mode, using Esc to
abort the command still executes the operator. (David B?rgin)
Solution: Clear the operator when the ex command fails. (Christian Brabandt)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Fri, 05 Apr 2013 17:43:14 +0200 |
parents | 4a6b19dfd84b |
children | 2ffb43ae7849 |
files | src/normal.c src/version.c |
diffstat | 2 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/normal.c +++ b/src/normal.c @@ -5418,6 +5418,7 @@ nv_colon(cap) cmdarg_T *cap; { int old_p_im; + int cmd_result; #ifdef FEAT_VISUAL if (VIsual_active) @@ -5449,7 +5450,7 @@ nv_colon(cap) old_p_im = p_im; /* get a command line and execute it */ - do_cmdline(NULL, getexline, NULL, + cmd_result = do_cmdline(NULL, getexline, NULL, cap->oap->op_type != OP_NOP ? DOCMD_KEEPLINE : 0); /* If 'insertmode' changed, enter or exit Insert mode */ @@ -5461,12 +5462,17 @@ nv_colon(cap) restart_edit = 0; } - /* The start of the operator may have become invalid by the Ex - * command. */ - if (cap->oap->op_type != OP_NOP + if (cmd_result == FAIL) + /* The Ex command failed, do not execute the operator. */ + clearop(cap->oap); + else if (cap->oap->op_type != OP_NOP && (cap->oap->start.lnum > curbuf->b_ml.ml_line_count || cap->oap->start.col > - (colnr_T)STRLEN(ml_get(cap->oap->start.lnum)))) + (colnr_T)STRLEN(ml_get(cap->oap->start.lnum)) + || did_emsg + )) + /* The start of the operator has become invalid by the Ex command. + */ clearopbeep(cap->oap); } }