1
0
forked from aniani/vim

patch 7.4.1513

Problem:    "J" fails if there are not enough lines. (Christian Neukirchen)
Solution:   Reduce the count, only fail on the last line.
This commit is contained in:
Bram Moolenaar
2016-03-08 14:44:42 +01:00
parent 94d0191dbc
commit 41e0f2f48f
4 changed files with 28 additions and 5 deletions

View File

@@ -9213,15 +9213,22 @@ nv_join(cmdarg_T *cap)
cap->count0 = 2; /* default for join is two lines! */
if (curwin->w_cursor.lnum + cap->count0 - 1 >
curbuf->b_ml.ml_line_count)
clearopbeep(cap->oap); /* beyond last line */
else
{
/* can't join when on the last line */
if (cap->count0 <= 2)
{
clearopbeep(cap->oap);
return;
}
cap->count0 = curbuf->b_ml.ml_line_count
- curwin->w_cursor.lnum + 1;
}
prep_redo(cap->oap->regname, cap->count0,
NUL, cap->cmdchar, NUL, NUL, cap->nchar);
(void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE, TRUE);
}
}
}
/*
* "P", "gP", "p" and "gp" commands.

View File

@@ -6,6 +6,7 @@ source test_cursor_func.vim
source test_delete.vim
source test_expand.vim
source test_glob2regpat.vim
source test_join.vim
source test_lispwords.vim
source test_menu.vim
source test_reltime.vim

13
src/testdir/test_join.vim Normal file
View File

@@ -0,0 +1,13 @@
" Test for joining lines.
func Test_join_with_count()
new
call setline(1, ['one', 'two', 'three', 'four'])
normal J
call assert_equal('one two', getline(1))
%del
call setline(1, ['one', 'two', 'three', 'four'])
normal 10J
call assert_equal('one two three four', getline(1))
quit!
endfunc

View File

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