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)
diff --git a/src/normal.c b/src/normal.c
index 987705d..d173c73 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -9198,6 +9198,14 @@
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/search.c b/src/search.c
index 3276a77..8beacbb 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1063,7 +1063,7 @@
* 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(oap, dirc, pat, count, options, tm)
@@ -3781,6 +3781,7 @@
int do_include = include;
int save_p_ws = p_ws;
int retval = FAIL;
+ int is_inclusive = TRUE;
p_ws = FALSE;
@@ -3895,8 +3896,15 @@
}
else
{
- /* Exclude the '<' of the end tag. */
- if (*ml_get_cursor() == '<')
+ char_u *c = 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();
}
end_pos = curwin->w_cursor;
@@ -3950,7 +3958,7 @@
oap->inclusive = FALSE;
}
else
- oap->inclusive = TRUE;
+ oap->inclusive = is_inclusive;
}
retval = OK;
diff --git a/src/testdir/test53.in b/src/testdir/test53.in
index 8ca9c9e..7c35b2e 100644
--- a/src/testdir/test53.in
+++ b/src/testdir/test53.in
@@ -23,6 +23,7 @@
0fXdit
fXdat
0fXdat
+dit
:"
:put =matchstr(\"abcd\", \".\", 0, 2) " b
:put =matchstr(\"abcd\", \"..\", 0, 2) " bc
@@ -97,6 +98,9 @@
-<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/testdir/test53.ok b/src/testdir/test53.ok
index 0c0b9de..0520697 100644
--- a/src/testdir/test53.ok
+++ b/src/testdir/test53.ok
@@ -11,6 +11,7 @@
-<b></b>-
-<b>asdfasdf</b>-
--
+-<b></b>
</begin>
b
bc
diff --git a/src/version.c b/src/version.c
index a814baf..81f4d41 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 655,
+/**/
654,
/**/
653,