forked from aniani/vim
patch 8.0.0135
Problem: An address relative to the current line, ":.,+3y", does not work properly on a closed fold. (Efraim Yawitz) Solution: Correct for including the closed fold. (Christian Brabandt)
This commit is contained in:
parent
c4bfedabe0
commit
ded2782783
@ -2106,6 +2106,7 @@ test_arglist \
|
|||||||
test_filter_map \
|
test_filter_map \
|
||||||
test_fnameescape \
|
test_fnameescape \
|
||||||
test_fnamemodify \
|
test_fnamemodify \
|
||||||
|
test_fold \
|
||||||
test_glob2regpat \
|
test_glob2regpat \
|
||||||
test_gf \
|
test_gf \
|
||||||
test_gn \
|
test_gn \
|
||||||
|
@ -137,7 +137,7 @@ static int getargopt(exarg_T *eap);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int check_more(int, int);
|
static int check_more(int, int);
|
||||||
static linenr_T get_address(exarg_T *, char_u **, int addr_type, int skip, int to_other_file);
|
static linenr_T get_address(exarg_T *, char_u **, int addr_type, int skip, int to_other_file, int address_count);
|
||||||
static void get_flags(exarg_T *eap);
|
static void get_flags(exarg_T *eap);
|
||||||
#if !defined(FEAT_PERL) \
|
#if !defined(FEAT_PERL) \
|
||||||
|| !defined(FEAT_PYTHON) || !defined(FEAT_PYTHON3) \
|
|| !defined(FEAT_PYTHON) || !defined(FEAT_PYTHON3) \
|
||||||
@ -1791,6 +1791,7 @@ do_one_cmd(
|
|||||||
cmdmod_T save_cmdmod;
|
cmdmod_T save_cmdmod;
|
||||||
int ni; /* set when Not Implemented */
|
int ni; /* set when Not Implemented */
|
||||||
char_u *cmd;
|
char_u *cmd;
|
||||||
|
int address_count = 1;
|
||||||
|
|
||||||
vim_memset(&ea, 0, sizeof(ea));
|
vim_memset(&ea, 0, sizeof(ea));
|
||||||
ea.line1 = 1;
|
ea.line1 = 1;
|
||||||
@ -2015,7 +2016,7 @@ do_one_cmd(
|
|||||||
{
|
{
|
||||||
#ifdef FEAT_WINDOWS
|
#ifdef FEAT_WINDOWS
|
||||||
long tabnr = get_address(&ea, &ea.cmd, ADDR_TABS,
|
long tabnr = get_address(&ea, &ea.cmd, ADDR_TABS,
|
||||||
ea.skip, FALSE);
|
ea.skip, FALSE, 1);
|
||||||
if (tabnr == MAXLNUM)
|
if (tabnr == MAXLNUM)
|
||||||
cmdmod.tab = tabpage_index(curtab) + 1;
|
cmdmod.tab = tabpage_index(curtab) + 1;
|
||||||
else
|
else
|
||||||
@ -2175,7 +2176,7 @@ do_one_cmd(
|
|||||||
}
|
}
|
||||||
ea.cmd = skipwhite(ea.cmd);
|
ea.cmd = skipwhite(ea.cmd);
|
||||||
lnum = get_address(&ea, &ea.cmd, ea.addr_type, ea.skip,
|
lnum = get_address(&ea, &ea.cmd, ea.addr_type, ea.skip,
|
||||||
ea.addr_count == 0);
|
ea.addr_count == 0, address_count++);
|
||||||
if (ea.cmd == NULL) /* error detected */
|
if (ea.cmd == NULL) /* error detected */
|
||||||
goto doend;
|
goto doend;
|
||||||
if (lnum == MAXLNUM)
|
if (lnum == MAXLNUM)
|
||||||
@ -4363,7 +4364,8 @@ get_address(
|
|||||||
char_u **ptr,
|
char_u **ptr,
|
||||||
int addr_type, /* flag: one of ADDR_LINES, ... */
|
int addr_type, /* flag: one of ADDR_LINES, ... */
|
||||||
int skip, /* only skip the address, don't use it */
|
int skip, /* only skip the address, don't use it */
|
||||||
int to_other_file) /* flag: may jump to other file */
|
int to_other_file, /* flag: may jump to other file */
|
||||||
|
int address_count) /* 1 for first address, >1 after comma */
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int i;
|
int i;
|
||||||
@ -4639,11 +4641,21 @@ get_address(
|
|||||||
|| addr_type == ADDR_BUFFERS)
|
|| addr_type == ADDR_BUFFERS)
|
||||||
lnum = compute_buffer_local_count(
|
lnum = compute_buffer_local_count(
|
||||||
addr_type, lnum, (i == '-') ? -1 * n : n);
|
addr_type, lnum, (i == '-') ? -1 * n : n);
|
||||||
else if (i == '-')
|
else
|
||||||
|
{
|
||||||
|
#ifdef FEAT_FOLDING
|
||||||
|
/* Relative line addressing, need to adjust for folded lines
|
||||||
|
* now, but only do it after the first address. */
|
||||||
|
if (addr_type == ADDR_LINES && (i == '-' || i == '+')
|
||||||
|
&& address_count >= 2)
|
||||||
|
(void)hasFolding(lnum, NULL, &lnum);
|
||||||
|
#endif
|
||||||
|
if (i == '-')
|
||||||
lnum -= n;
|
lnum -= n;
|
||||||
else
|
else
|
||||||
lnum += n;
|
lnum += n;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} while (*cmd == '/' || *cmd == '?');
|
} while (*cmd == '/' || *cmd == '?');
|
||||||
|
|
||||||
error:
|
error:
|
||||||
@ -9301,7 +9313,7 @@ ex_copymove(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
long n;
|
long n;
|
||||||
|
|
||||||
n = get_address(eap, &eap->arg, eap->addr_type, FALSE, FALSE);
|
n = get_address(eap, &eap->arg, eap->addr_type, FALSE, FALSE, 1);
|
||||||
if (eap->arg == NULL) /* error detected */
|
if (eap->arg == NULL) /* error detected */
|
||||||
{
|
{
|
||||||
eap->nextcmd = NULL;
|
eap->nextcmd = NULL;
|
||||||
|
@ -151,6 +151,7 @@ NEW_TESTS = test_arglist.res \
|
|||||||
test_display.res \
|
test_display.res \
|
||||||
test_farsi.res \
|
test_farsi.res \
|
||||||
test_fnameescape.res \
|
test_fnameescape.res \
|
||||||
|
test_fold.res \
|
||||||
test_gf.res \
|
test_gf.res \
|
||||||
test_gn.res \
|
test_gn.res \
|
||||||
test_gui.res \
|
test_gui.res \
|
||||||
|
65
src/testdir/test_fold.vim
Normal file
65
src/testdir/test_fold.vim
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
" Test for folding
|
||||||
|
|
||||||
|
function! Test_address_fold()
|
||||||
|
new
|
||||||
|
call setline(1, ['int FuncName() {/*{{{*/', 1, 2, 3, 4, 5, '}/*}}}*/',
|
||||||
|
\ 'after fold 1', 'after fold 2', 'after fold 3'])
|
||||||
|
setl fen fdm=marker
|
||||||
|
" The next ccommands should all copy the same part of the buffer,
|
||||||
|
" regardless of the adressing type, since the part to be copied
|
||||||
|
" is folded away
|
||||||
|
:1y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3', '4', '5', '}/*}}}*/'], getreg(0,1,1))
|
||||||
|
:.y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3', '4', '5', '}/*}}}*/'], getreg(0,1,1))
|
||||||
|
:.+y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3', '4', '5', '}/*}}}*/'], getreg(0,1,1))
|
||||||
|
:.,.y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3', '4', '5', '}/*}}}*/'], getreg(0,1,1))
|
||||||
|
:sil .1,.y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3', '4', '5', '}/*}}}*/'], getreg(0,1,1))
|
||||||
|
" use silent to make E493 go away
|
||||||
|
:sil .+,.y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3', '4', '5', '}/*}}}*/'], getreg(0,1,1))
|
||||||
|
:,y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3', '4', '5', '}/*}}}*/'], getreg(0,1,1))
|
||||||
|
:,+y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3', '4', '5', '}/*}}}*/','after fold 1'], getreg(0,1,1))
|
||||||
|
" using .+3 as second address should copy the whole folded line + the next 3
|
||||||
|
" lines
|
||||||
|
:.,+3y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3', '4', '5', '}/*}}}*/',
|
||||||
|
\ 'after fold 1', 'after fold 2', 'after fold 3'], getreg(0,1,1))
|
||||||
|
:sil .,-2y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3', '4', '5', '}/*}}}*/'], getreg(0,1,1))
|
||||||
|
|
||||||
|
" now test again with folding disabled
|
||||||
|
set nofoldenable
|
||||||
|
:1y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/'], getreg(0,1,1))
|
||||||
|
:.y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/'], getreg(0,1,1))
|
||||||
|
:.+y
|
||||||
|
call assert_equal(['1'], getreg(0,1,1))
|
||||||
|
:.,.y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/'], getreg(0,1,1))
|
||||||
|
" use silent to make E493 go away
|
||||||
|
:sil .1,.y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1'], getreg(0,1,1))
|
||||||
|
" use silent to make E493 go away
|
||||||
|
:sil .+,.y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1'], getreg(0,1,1))
|
||||||
|
:,y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/'], getreg(0,1,1))
|
||||||
|
:,+y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1'], getreg(0,1,1))
|
||||||
|
" using .+3 as second address should copy the whole folded line + the next 3
|
||||||
|
" lines
|
||||||
|
:.,+3y
|
||||||
|
call assert_equal(['int FuncName() {/*{{{*/', '1', '2', '3'], getreg(0,1,1))
|
||||||
|
:7
|
||||||
|
:sil .,-2y
|
||||||
|
call assert_equal(['4', '5', '}/*}}}*/'], getreg(0,1,1))
|
||||||
|
|
||||||
|
quit!
|
||||||
|
endfunction
|
@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
135,
|
||||||
/**/
|
/**/
|
||||||
134,
|
134,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user