From 015df9c66e66283277c3709376bf6d1f83d55f53 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Thu, 16 Aug 2018 21:25:33 -0400 Subject: vim-patch:8.0.1787: cannot insert the whole cursor line Problem: Cannot insert the whole cursor line. Solution: Make CTRL-R CTRL-L work. (Andy Massimino, closes vim/vim#2857) https://github.com/vim/vim/commit/e2c8d8392684a940cc5608acc73ff47486bd7b92 --- runtime/doc/cmdline.txt | 6 ++++-- src/nvim/ex_getln.c | 4 +++- src/nvim/ops.c | 8 ++++++++ src/nvim/testdir/test_cmdline.vim | 3 +++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt index c46a9fc2d8..f4bc2972bc 100644 --- a/runtime/doc/cmdline.txt +++ b/runtime/doc/cmdline.txt @@ -163,12 +163,14 @@ CTRL-R CTRL-F *c_CTRL-R_CTRL-F* *c__* CTRL-R CTRL-P *c_CTRL-R_CTRL-P* *c__* CTRL-R CTRL-W *c_CTRL-R_CTRL-W* *c__* CTRL-R CTRL-A *c_CTRL-R_CTRL-A* *c__* +CTRL-R CTRL-L *c_CTRL-R_CTRL-L* *c__* Insert the object under the cursor: CTRL-F the Filename under the cursor CTRL-P the Filename under the cursor, expanded with 'path' as in |gf| CTRL-W the Word under the cursor CTRL-A the WORD under the cursor; see |WORD| + CTRL-L the line under the cursor When 'incsearch' is set the cursor position at the end of the currently displayed match is used. With CTRL-W the part of @@ -176,8 +178,8 @@ CTRL-R CTRL-A *c_CTRL-R_CTRL-A* *c__* *c_CTRL-R_CTRL-R* *c__* *c_CTRL-R_CTRL-O* *c__* -CTRL-R CTRL-R {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A} -CTRL-R CTRL-O {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A} +CTRL-R CTRL-R {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L} +CTRL-R CTRL-O {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L} Insert register or object under the cursor. Works like |c_CTRL-R| but inserts the text literally. For example, if register a contains "xy^Hz" (where ^H is a backspace), diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 0190cfabe5..1192f3cb84 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -3295,8 +3295,10 @@ static bool cmdline_paste(int regname, bool literally, bool remcr) /* check for valid regname; also accept special characters for CTRL-R in * the command line */ if (regname != Ctrl_F && regname != Ctrl_P && regname != Ctrl_W - && regname != Ctrl_A && !valid_yank_reg(regname, false)) + && regname != Ctrl_A && regname != Ctrl_L + && !valid_yank_reg(regname, false)) { return FAIL; + } /* A register containing CTRL-R can cause an endless loop. Allow using * CTRL-C to break the loop. */ diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 7defde731a..af95f94946 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -1257,6 +1257,14 @@ int get_spec_reg( *allocated = TRUE; return TRUE; + case Ctrl_L: // Line under cursor + if (!errmsg) { + return false; + } + + *argp = ml_get_buf(curwin->w_buffer, curwin->w_cursor.lnum, false); + return true; + case '_': /* black hole: always empty */ *argp = (char_u *)""; return TRUE; diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim index 1b7bd83b3c..c302948ba3 100644 --- a/src/nvim/testdir/test_cmdline.vim +++ b/src/nvim/testdir/test_cmdline.vim @@ -321,6 +321,9 @@ func Test_paste_in_cmdline() call feedkeys("ft:aaa \\ bbb\\"\", 'tx') call assert_equal('"aaa /tmp/some bbb', @:) + call feedkeys(":aaa \\ bbb\\"\", 'tx') + call assert_equal('"aaa '.getline(1).' bbb', @:) + set incsearch call feedkeys("fy:aaa veryl\\ bbb\\"\", 'tx') call assert_equal('"aaa verylongword bbb', @:) -- cgit