forked from aniani/vim
patch 8.2.4615: mapping with escaped bar does not work in :def function
Problem: Mapping with escaped bar does not work in :def function. (Sergey Vlasov) Solution: Do not remove the backslash. (closes #10002)
This commit is contained in:
@@ -2275,7 +2275,7 @@ do_one_cmd(
|
||||
*/
|
||||
if ((ea.argt & EX_TRLBAR) && !ea.usefilter)
|
||||
{
|
||||
separate_nextcmd(&ea);
|
||||
separate_nextcmd(&ea, FALSE);
|
||||
}
|
||||
else if (ea.cmdidx == CMD_bang
|
||||
|| ea.cmdidx == CMD_terminal
|
||||
@@ -5081,9 +5081,10 @@ repl_cmdline(
|
||||
|
||||
/*
|
||||
* Check for '|' to separate commands and '"' to start comments.
|
||||
* If "keep_backslash" is TRUE do not remove any backslash.
|
||||
*/
|
||||
void
|
||||
separate_nextcmd(exarg_T *eap)
|
||||
separate_nextcmd(exarg_T *eap, int keep_backslash)
|
||||
{
|
||||
char_u *p;
|
||||
|
||||
@@ -5097,7 +5098,7 @@ separate_nextcmd(exarg_T *eap)
|
||||
{
|
||||
if (*p == Ctrl_V)
|
||||
{
|
||||
if (eap->argt & (EX_CTRLV | EX_XFILE))
|
||||
if ((eap->argt & (EX_CTRLV | EX_XFILE)) || keep_backslash)
|
||||
++p; // skip CTRL-V and next char
|
||||
else
|
||||
// remove CTRL-V and skip next char
|
||||
@@ -5144,8 +5145,11 @@ separate_nextcmd(exarg_T *eap)
|
||||
if ((vim_strchr(p_cpo, CPO_BAR) == NULL
|
||||
|| !(eap->argt & EX_CTRLV)) && *(p - 1) == '\\')
|
||||
{
|
||||
STRMOVE(p - 1, p); // remove the '\'
|
||||
--p;
|
||||
if (!keep_backslash)
|
||||
{
|
||||
STRMOVE(p - 1, p); // remove the '\'
|
||||
--p;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user