diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/nvim/normal.c | 7 | ||||
| -rw-r--r-- | src/nvim/search.c | 19 | ||||
| -rw-r--r-- | src/nvim/testdir/test53.in | 4 | ||||
| -rw-r--r-- | src/nvim/testdir/test53.ok | 1 | ||||
| -rw-r--r-- | src/nvim/version.c | 2 | 
5 files changed, 27 insertions, 6 deletions
| diff --git a/src/nvim/normal.c b/src/nvim/normal.c index 78df4ea7ea..1f0fe287bf 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -7474,6 +7474,13 @@ static void nv_object(cmdarg_T *cap)      flag = current_block(cap->oap, cap->count1, include, '<', '>');      break;    case 't':       /* "at" = a tag block (xml and html) */ +    // Do not adjust oap->end in do_pending_operator() +    // otherwise there are different results for 'dit' +    // (note leading whitespace in last line): +    // 1) <b>      2) <b> +    //    foobar      foobar +    //    </b>            </b> +    cap->retval |= CA_NO_ADJ_OP_END;      flag = current_tagblock(cap->oap, cap->count1, include);      break;    case 'p':       /* "ap" = a paragraph */ diff --git a/src/nvim/search.c b/src/nvim/search.c index a44b0e00c7..d742a7a341 100644 --- a/src/nvim/search.c +++ b/src/nvim/search.c @@ -926,7 +926,7 @@ static int first_submatch(regmmatch_T *rp)   * Careful: If spats[0].off.line == TRUE and spats[0].off.off == 0 this   * makes the movement linewise without moving the match position.   * - * return 0 for failure, 1 for found, 2 for found and line offset added + * Return 0 for failure, 1 for found, 2 for found and line offset added.   */  int do_search(      oparg_T         *oap,           /* can be NULL */ @@ -3201,6 +3201,7 @@ current_tagblock (    int do_include = include;    bool save_p_ws = p_ws;    int retval = FAIL; +  int is_inclusive = true;    p_ws = false; @@ -3295,9 +3296,16 @@ again:        if (inc_cursor() < 0)          break;    } else { -    /* Exclude the '<' of the end tag. */ -    if (*get_cursor_pos_ptr() == '<') +    char_u *c = get_cursor_pos_ptr(); +    // Exclude the '<' of the end tag. +    // If the closing tag is on new line, do not decrement cursor, but make +    // operation exclusive, so that the linefeed will be selected +    if (*c == '<' && !VIsual_active && curwin->w_cursor.col == 0) { +      // do not decrement cursor +      is_inclusive = false; +    } else if (*c == '<') {        dec_cursor(); +    }    }    end_pos = curwin->w_cursor; @@ -3342,8 +3350,9 @@ again:         * on an empty area. */        curwin->w_cursor = start_pos;        oap->inclusive = false; -    } else -      oap->inclusive = true; +    } else { +      oap->inclusive = is_inclusive; +    }    }    retval = OK; diff --git a/src/nvim/testdir/test53.in b/src/nvim/testdir/test53.in index 8ca9c9ed29..7c35b2e853 100644 --- a/src/nvim/testdir/test53.in +++ b/src/nvim/testdir/test53.in @@ -23,6 +23,7 @@ jfXdit  0fXdit  fXdat  0fXdat +dit  :"  :put =matchstr(\"abcd\", \".\", 0, 2) " b  :put =matchstr(\"abcd\", \"..\", 0, 2) " bc @@ -97,6 +98,9 @@ voo "nah" sdf " asdf" sdf " sdf" sd  -<b>asdX<i>a<i />sdf</i>asdf</b>-  -<b>asdf<i>Xasdf</i>asdf</b>-  -<b>asdX<i>as<b />df</i>asdf</b>- +-<b> +innertext object +</b>  </begin>  SEARCH:  foobar diff --git a/src/nvim/testdir/test53.ok b/src/nvim/testdir/test53.ok index 0c0b9ded16..05206972a4 100644 --- a/src/nvim/testdir/test53.ok +++ b/src/nvim/testdir/test53.ok @@ -11,6 +11,7 @@ voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd  -<b></b>-  -<b>asdfasdf</b>-  -- +-<b></b>  </begin>  b  bc diff --git a/src/nvim/version.c b/src/nvim/version.c index d5bbd734f4..65a8f81fa5 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -341,7 +341,7 @@ static int included_patches[] = {    // 658,    // 657 NA    // 656, -  // 655, +  655,    // 654,    653,    // 652 NA | 
