0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

updated for version 7.4.655

Problem:    Text deleted by "dit" depends on indent of closing tag.
            (Jan Parthey)
Solution:   Do not adjust oap->end in do_pending_operator(). (Christian
            Brabandt)
This commit is contained in:
Bram Moolenaar
2015-03-05 19:57:49 +01:00
parent a245bc79b4
commit b6c2735c56
5 changed files with 27 additions and 4 deletions

View File

@@ -9198,6 +9198,14 @@ nv_object(cap)
flag = current_block(cap->oap, cap->count1, include, '<', '>'); flag = current_block(cap->oap, cap->count1, include, '<', '>');
break; break;
case 't': /* "at" = a tag block (xml and html) */ 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); flag = current_tagblock(cap->oap, cap->count1, include);
break; break;
case 'p': /* "ap" = a paragraph */ case 'p': /* "ap" = a paragraph */

View File

@@ -1063,7 +1063,7 @@ first_submatch(rp)
* Careful: If spats[0].off.line == TRUE and spats[0].off.off == 0 this * Careful: If spats[0].off.line == TRUE and spats[0].off.off == 0 this
* makes the movement linewise without moving the match position. * 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 int
do_search(oap, dirc, pat, count, options, tm) do_search(oap, dirc, pat, count, options, tm)
@@ -3781,6 +3781,7 @@ current_tagblock(oap, count_arg, include)
int do_include = include; int do_include = include;
int save_p_ws = p_ws; int save_p_ws = p_ws;
int retval = FAIL; int retval = FAIL;
int is_inclusive = TRUE;
p_ws = FALSE; p_ws = FALSE;
@@ -3895,8 +3896,15 @@ again:
} }
else else
{ {
/* Exclude the '<' of the end tag. */ char_u *c = ml_get_cursor();
if (*ml_get_cursor() == '<')
/* 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(); dec_cursor();
} }
end_pos = curwin->w_cursor; end_pos = curwin->w_cursor;
@@ -3950,7 +3958,7 @@ again:
oap->inclusive = FALSE; oap->inclusive = FALSE;
} }
else else
oap->inclusive = TRUE; oap->inclusive = is_inclusive;
} }
retval = OK; retval = OK;

View File

@@ -23,6 +23,7 @@ jfXdit
0fXdit 0fXdit
fXdat fXdat
0fXdat 0fXdat
dit
:" :"
:put =matchstr(\"abcd\", \".\", 0, 2) " b :put =matchstr(\"abcd\", \".\", 0, 2) " b
:put =matchstr(\"abcd\", \"..\", 0, 2) " bc :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>asdX<i>a<i />sdf</i>asdf</b>-
-<b>asdf<i>Xasdf</i>asdf</b>- -<b>asdf<i>Xasdf</i>asdf</b>-
-<b>asdX<i>as<b />df</i>asdf</b>- -<b>asdX<i>as<b />df</i>asdf</b>-
-<b>
innertext object
</b>
</begin> </begin>
SEARCH: SEARCH:
foobar foobar

View File

@@ -11,6 +11,7 @@ voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd
-<b></b>- -<b></b>-
-<b>asdfasdf</b>- -<b>asdfasdf</b>-
-- --
-<b></b>
</begin> </begin>
b b
bc bc

View File

@@ -741,6 +741,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
655,
/**/ /**/
654, 654,
/**/ /**/