summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-06-24 15:39:07 +0200
committerBram Moolenaar <Bram@vim.org>2017-06-24 15:39:07 +0200
commit24a9e348aa88a6c60ae0cdf5c4a777d8c03b08ca (patch)
tree86f499c46b77b342b25522e9f60a1e16a14a3915
parenta1bd86e0f2056f796390bc0cd3aba5c89513d0d2 (diff)
downloadvim-git-24a9e348aa88a6c60ae0cdf5c4a777d8c03b08ca.tar.gz
patch 8.0.0669: CTRL-N at start of the buffer does not work correctlyv8.0.0669
Problem: In Insert mode, CTRL-N at start of the buffer does not work correctly. (zuloloxi) Solution: Wrap around the start of the buffer. (Christian Brabandt)
-rw-r--r--src/edit.c14
-rw-r--r--src/testdir/test_popup.vim14
-rw-r--r--src/version.c2
3 files changed, 27 insertions, 3 deletions
diff --git a/src/edit.c b/src/edit.c
index da1b238d8..912f05f38 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -4308,9 +4308,17 @@ ins_compl_get_exp(pos_T *ini)
{
ins_buf = curbuf;
first_match_pos = *ini;
- /* So that ^N can match word immediately after cursor */
- if (ctrl_x_mode == 0)
- dec(&first_match_pos);
+ /* Move the cursor back one character so that ^N can match the
+ * word immediately after the cursor. */
+ if (ctrl_x_mode == 0 && dec(&first_match_pos) < 0)
+ {
+ /* Move the cursor to after the last character in the
+ * buffer, so that word at start of buffer is found
+ * correctly. */
+ first_match_pos.lnum = ins_buf->b_ml.ml_line_count;
+ first_match_pos.col =
+ (colnr_T)STRLEN(ml_get(first_match_pos.lnum));
+ }
last_match_pos = first_match_pos;
type = 0;
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index 25d766f7b..e3bd0e19a 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -612,5 +612,19 @@ func Test_complete_func_mess()
set completefunc=
endfunc
+func Test_complete_CTRLN_startofbuffer()
+ new
+ call setline(1, [ 'organize(cupboard, 3, 2);',
+ \ 'prioritize(bureau, 8, 7);',
+ \ 'realize(bannister, 4, 4);',
+ \ 'moralize(railing, 3,9);'])
+ let expected=['cupboard.organize(3, 2);',
+ \ 'bureau.prioritize(8, 7);',
+ \ 'bannister.realize(4, 4);',
+ \ 'railing.moralize(3,9);']
+ call feedkeys("qai\<c-n>\<c-n>.\<esc>3wdW\<cr>q3@a", 'tx')
+ call assert_equal(expected, getline(1,'$'))
+ bwipe!
+endfunc
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index eda74a207..d1c6119a1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 669,
+/**/
668,
/**/
667,