# HG changeset patch # User Christian Brabandt # Date 1505061005 -7200 # Node ID da55ea30842c4344c22e33ee03538cdf6dd70ae8 # Parent 3dab736a3cd5e0c67dedf568c028b0c0bdfc1e81 patch 8.0.1090: cannot get the text under the cursor like v:beval_text commit https://github.com/vim/vim/commit/65f084749b260746d7f186af4f080298be2df55b Author: Bram Moolenaar Date: Sun Sep 10 18:16:20 2017 +0200 patch 8.0.1090: cannot get the text under the cursor like v:beval_text Problem: cannot get the text under the cursor like v:beval_text Solution: Add . diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt --- a/runtime/doc/cmdline.txt +++ b/runtime/doc/cmdline.txt @@ -830,6 +830,11 @@ Also see |`=|. Note: these are typed literally, they are not special keys! is replaced with the word under the cursor (like |star|) is replaced with the WORD under the cursor (see |WORD|) + is replaced with the word under the cursor, including more + to form a C expression. E.g., when the cursor is on "arg" + of "ptr->arg" then the result is "ptr->arg"; when the + cursor is on "]" of "list[idx]" then the result is + "list[idx]". This is used for |v:beval_text|. is replaced with the path name under the cursor (like what |gf| uses) When executing autocommands, is replaced with the file name diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -10650,31 +10650,33 @@ find_cmdline_var(char_u *src, int *usedl "%", #define SPEC_PERC 0 "#", -#define SPEC_HASH 1 +#define SPEC_HASH (SPEC_PERC + 1) "", /* cursor word */ -#define SPEC_CWORD 2 +#define SPEC_CWORD (SPEC_HASH + 1) "", /* cursor WORD */ -#define SPEC_CCWORD 3 +#define SPEC_CCWORD (SPEC_CWORD + 1) + "", /* expr under cursor */ +#define SPEC_CEXPR (SPEC_CCWORD + 1) "", /* cursor path name */ -#define SPEC_CFILE 4 +#define SPEC_CFILE (SPEC_CEXPR + 1) "", /* ":so" file name */ -#define SPEC_SFILE 5 +#define SPEC_SFILE (SPEC_CFILE + 1) "", /* ":so" file line number */ -#define SPEC_SLNUM 6 +#define SPEC_SLNUM (SPEC_SFILE + 1) #ifdef FEAT_AUTOCMD "", /* autocommand file name */ -# define SPEC_AFILE 7 +# define SPEC_AFILE (SPEC_SLNUM + 1) "", /* autocommand buffer number */ -# define SPEC_ABUF 8 +# define SPEC_ABUF (SPEC_AFILE + 1) "", /* autocommand match name */ -# define SPEC_AMATCH 9 +# define SPEC_AMATCH (SPEC_ABUF + 1) #endif #ifdef FEAT_CLIENTSERVER "" # ifdef FEAT_AUTOCMD -# define SPEC_CLIENT 10 +# define SPEC_CLIENT (SPEC_AMATCH + 1) # else -# define SPEC_CLIENT 7 +# define SPEC_CLIENT (SPEC_SLNUM + 1) # endif #endif }; @@ -10762,10 +10764,13 @@ eval_vars( /* * word or WORD under cursor */ - if (spec_idx == SPEC_CWORD || spec_idx == SPEC_CCWORD) - { - resultlen = find_ident_under_cursor(&result, spec_idx == SPEC_CWORD ? - (FIND_IDENT|FIND_STRING) : FIND_STRING); + if (spec_idx == SPEC_CWORD || spec_idx == SPEC_CCWORD + || spec_idx == SPEC_CEXPR) + { + resultlen = find_ident_under_cursor(&result, + spec_idx == SPEC_CWORD ? (FIND_IDENT | FIND_STRING) + : spec_idx == SPEC_CEXPR ? (FIND_IDENT | FIND_STRING | FIND_EVAL) + : FIND_STRING); if (resultlen == 0) { *errormsg = (char_u *)""; diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -389,10 +389,22 @@ func! Test_normal10_expand() call setline(1, ['1', 'ifooar,,cbar']) 2 norm! $ - let a=expand('') - let b=expand('') - call assert_equal('cbar', a) - call assert_equal('ifooar,,cbar', b) + call assert_equal('cbar', expand('')) + call assert_equal('ifooar,,cbar', expand('')) + + call setline(1, ['prx = list[idx];']) + 1 + let expected = ['', 'prx', 'prx', 'prx', + \ 'list', 'list', 'list', 'list', 'list', 'list', 'list', + \ 'idx', 'idx', 'idx', 'idx', + \ 'list[idx]', + \ '];', + \ ] + for i in range(1, 16) + exe 'norm ' . i . '|' + call assert_equal(expected[i], expand(''), 'i == ' . i) + endfor + " clean up bw! endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -770,6 +770,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1090, +/**/ 1089, /**/ 1088,