0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.2.1129: Vim9: bar not recognized after not compiled command

Problem:    Vim9: bar not recognized after not compiled command.
Solution:   Check for bar for commands where this is possible. (closes #6391)
This commit is contained in:
Bram Moolenaar
2020-07-05 14:57:51 +02:00
parent 3f40ce78f5
commit e9f262bdff
3 changed files with 66 additions and 2 deletions

View File

@@ -2,6 +2,7 @@
source check.vim source check.vim
source vim9.vim source vim9.vim
source view_util.vim
def Test_edit_wildcards() def Test_edit_wildcards()
let filename = 'Xtest' let filename = 'Xtest'
@@ -207,5 +208,38 @@ def Test_method_call_linebreak()
CheckScriptSuccess(lines) CheckScriptSuccess(lines)
enddef enddef
def Test_bar_after_command()
def RedrawAndEcho()
let x = 'did redraw'
redraw | echo x
enddef
RedrawAndEcho()
assert_match('did redraw', Screenline(&lines))
if has('unix')
# bar in filter write command does not start new command
def WriteToShell()
new
setline(1, 'some text')
w !cat | cat > Xoutfile
bwipe!
enddef
WriteToShell()
assert_equal(['some text'], readfile('Xoutfile'))
delete('Xoutfile')
# bar in filter read command does not start new command
def ReadFromShell()
new
r! echo hello there | cat > Xoutfile
r !echo again | cat >> Xoutfile
bwipe!
enddef
ReadFromShell()
assert_equal(['hello there', 'again'], readfile('Xoutfile'))
delete('Xoutfile')
endif
enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker

View File

@@ -754,6 +754,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 */
/**/
1129,
/**/ /**/
1128, 1128,
/**/ /**/

View File

@@ -6562,12 +6562,33 @@ compile_exec(char_u *line, exarg_T *eap, cctx_T *cctx)
{ {
char_u *p; char_u *p;
int has_expr = FALSE; int has_expr = FALSE;
char_u *nextcmd = (char_u *)"";
if (cctx->ctx_skip == SKIP_YES) if (cctx->ctx_skip == SKIP_YES)
goto theend; goto theend;
if (eap->cmdidx >= 0 && eap->cmdidx < CMD_SIZE) if (eap->cmdidx >= 0 && eap->cmdidx < CMD_SIZE)
has_expr = (excmd_get_argt(eap->cmdidx) & (EX_XFILE | EX_EXPAND)); {
long argt = excmd_get_argt(eap->cmdidx);
int usefilter = FALSE;
has_expr = argt & (EX_XFILE | EX_EXPAND);
// If the command can be followed by a bar, find the bar and truncate
// it, so that the following command can be compiled.
// The '|' is overwritten with a NUL, it is put back below.
if ((eap->cmdidx == CMD_write || eap->cmdidx == CMD_read)
&& *eap->arg == '!')
// :w !filter or :r !filter or :r! filter
usefilter = TRUE;
if ((argt & EX_TRLBAR) && !usefilter)
{
separate_nextcmd(eap);
if (eap->nextcmd != NULL)
nextcmd = eap->nextcmd;
}
}
if (eap->cmdidx == CMD_syntax && STRNCMP(eap->arg, "include ", 8) == 0) if (eap->cmdidx == CMD_syntax && STRNCMP(eap->arg, "include ", 8) == 0)
{ {
// expand filename in "syntax include [@group] filename" // expand filename in "syntax include [@group] filename"
@@ -6626,7 +6647,14 @@ compile_exec(char_u *line, exarg_T *eap, cctx_T *cctx)
generate_EXEC(cctx, line); generate_EXEC(cctx, line);
theend: theend:
return (char_u *)""; if (*nextcmd != NUL)
{
// the parser expects a pointer to the bar, put it back
--nextcmd;
*nextcmd = '|';
}
return nextcmd;
} }
/* /*