Skip to content

Commit 4199be2

Browse files
committed
escape()
1 parent a501f95 commit 4199be2

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/vimscript/expression/evaluate.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,12 @@ export class EvaluationContext {
993993
return bool(false);
994994
}
995995
}
996+
case 'escape': {
997+
const [s, chars] = getArgs(2);
998+
return str(
999+
toString(s!).replace(new RegExp(`[${escapeRegExp(toString(chars!))}]`, 'g'), '\\$&'),
1000+
);
1001+
}
9961002
case 'eval': {
9971003
const [expr] = getArgs(1);
9981004
return this.evaluate(expressionParser.tryParse(toString(expr!)));

test/vimscript/expression.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,15 @@ suite('Vimscript expressions', () => {
642642
exprTest('empty(0z00)', { value: bool(false) });
643643
});
644644

645+
suite('escape', () => {
646+
exprTest("escape('abc', '')", {
647+
value: str('abc'),
648+
});
649+
exprTest("escape('c:\\program files\\vim', ' \\')", {
650+
value: str('c:\\\\program\\ files\\\\vim'),
651+
});
652+
});
653+
645654
suite('function', () => {
646655
exprTest("function('abs')", { display: 'abs' });
647656
exprTest("function('abs', [])", { display: 'abs' });

0 commit comments

Comments
 (0)