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:
@@ -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
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user