Skip to content
Snippets Groups Projects
Commit d9820538 authored by Bram Moolenaar's avatar Bram Moolenaar
Browse files

updated for version 7.4.064

Problem:    When replacing a character in Visual block mode, entering a CR
            does not cause a repeated line break.
Solution:   Recognize the situation and repeat the line break. (Christian
            Brabandt)
parent ba2d7ffc
No related merge requests found
......@@ -7036,6 +7036,13 @@ nv_replace(cap)
{
if (got_int)
reset_VIsual();
if (had_ctrl_v)
{
if (cap->nchar == '\r')
cap->nchar = -1;
else if (cap->nchar == '\n')
cap->nchar = -2;
}
nv_operator(cap);
return;
}
......
......@@ -2074,10 +2074,15 @@ op_replace(oap, c)
char_u *newp, *oldp;
size_t oldlen;
struct block_def bd;
char_u *after_p = NULL;
int had_ctrl_v_cr = (c == -1 || c == -2);
if ((curbuf->b_ml.ml_flags & ML_EMPTY ) || oap->empty)
return OK; /* nothing to do */
if (had_ctrl_v_cr)
c = (c == -1 ? '\r' : '\n');
#ifdef FEAT_MBYTE
if (has_mbyte)
mb_adjust_opend(oap);
......@@ -2164,25 +2169,43 @@ op_replace(oap, c)
/* insert pre-spaces */
copy_spaces(newp + bd.textcol, (size_t)bd.startspaces);
/* insert replacement chars CHECK FOR ALLOCATED SPACE */
#ifdef FEAT_MBYTE
if (has_mbyte)
/* -1/-2 is used for entering CR literally. */
if (had_ctrl_v_cr || (c != '\r' && c != '\n'))
{
n = (int)STRLEN(newp);
while (--num_chars >= 0)
n += (*mb_char2bytes)(c, newp + n);
#ifdef FEAT_MBYTE
if (has_mbyte)
{
n = (int)STRLEN(newp);
while (--num_chars >= 0)
n += (*mb_char2bytes)(c, newp + n);
}
else
#endif
copy_chars(newp + STRLEN(newp), (size_t)numc, c);
if (!bd.is_short)
{
/* insert post-spaces */
copy_spaces(newp + STRLEN(newp), (size_t)bd.endspaces);
/* copy the part after the changed part */
STRMOVE(newp + STRLEN(newp), oldp);
}
}
else
#endif
copy_chars(newp + STRLEN(newp), (size_t)numc, c);
if (!bd.is_short)
{
/* insert post-spaces */
copy_spaces(newp + STRLEN(newp), (size_t)bd.endspaces);
/* copy the part after the changed part */
STRMOVE(newp + STRLEN(newp), oldp);
/* Replacing with \r or \n means splitting the line. */
after_p = alloc_check((unsigned)oldlen + 1 + n - STRLEN(newp));
if (after_p != NULL)
STRMOVE(after_p, oldp);
}
/* replace the line */
ml_replace(curwin->w_cursor.lnum, newp, FALSE);
if (after_p != NULL)
{
ml_append(curwin->w_cursor.lnum++, after_p, 0, FALSE);
appended_lines_mark(curwin->w_cursor.lnum, 1L);
oap->end.lnum++;
vim_free(after_p);
}
}
}
else
......
......@@ -32,6 +32,10 @@ Oblah di
doh dutVkUj
:" Uppercase part of two lines
ddppi333k0i222fyllvjfuUk
:" visual replace using Enter or NL
G3o1234567892k05l2jr G3o987652k02l2jr
G3o1234567892k05l2jr
G3o987652k02l2jr
:/^the/,$w >> test.out
:qa!
ENDTEST
......
No preview for this file type
......@@ -738,6 +738,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
64,
/**/
63,
/**/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment