aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/normal.c26
-rw-r--r--src/nvim/version.c2
-rw-r--r--test/functional/legacy/join_spec.lua20
3 files changed, 37 insertions, 11 deletions
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
index f5607f3676..382c4943ff 100644
--- a/src/nvim/normal.c
+++ b/src/nvim/normal.c
@@ -7648,19 +7648,25 @@ static void nv_halfpage(cmdarg_T *cap)
*/
static void nv_join(cmdarg_T *cap)
{
- if (VIsual_active) /* join the visual lines */
+ if (VIsual_active) { // join the visual lines
nv_operator(cap);
- else if (!checkclearop(cap->oap)) {
- if (cap->count0 <= 1)
- cap->count0 = 2; /* default for join is two lines! */
+ } else if (!checkclearop(cap->oap)) {
+ if (cap->count0 <= 1) {
+ 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 {
- prep_redo(cap->oap->regname, cap->count0,
- NUL, cap->cmdchar, NUL, NUL, cap->nchar);
- do_join(cap->count0, cap->nchar == NUL, true, true, true);
+ curbuf->b_ml.ml_line_count) {
+ // 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);
+ do_join(cap->count0, cap->nchar == NUL, true, true, true);
}
}
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 506bb1e3cf..d7eae84c1b 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -169,7 +169,7 @@ static int included_patches[] = {
// 1516,
// 1515 NA
// 1514 NA
- // 1513,
+ 1513,
// 1512 NA
1511,
// 1510 NA
diff --git a/test/functional/legacy/join_spec.lua b/test/functional/legacy/join_spec.lua
new file mode 100644
index 0000000000..17ff2e71ad
--- /dev/null
+++ b/test/functional/legacy/join_spec.lua
@@ -0,0 +1,20 @@
+-- Test for joining lines
+
+local helpers = require('test.functional.helpers')
+local clear, eq = helpers.clear, helpers.eq
+local eval, execute = helpers.eval, helpers.execute
+
+describe('joining lines', function()
+ before_each(clear)
+
+ it('is working', function()
+ execute('new')
+ execute([[call setline(1, ['one', 'two', 'three', 'four'])]])
+ execute('normal J')
+ eq('one two', eval('getline(1)'))
+ execute('%del')
+ execute([[call setline(1, ['one', 'two', 'three', 'four'])]])
+ execute('normal 10J')
+ eq('one two three four', eval('getline(1)'))
+ end)
+end)