Skip to content

Commit c7b3114

Browse files
committed
Support some more Vim-specific character classes in patterns. Refs #3996.
1 parent e7b46cb commit c7b3114

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/vimscript/pattern.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,31 @@ export class Pattern {
220220
return { ignorecase: true };
221221
} else if (escaped === 'C') {
222222
return { ignorecase: false };
223+
} else if (escaped === 'x') {
224+
return '[0-9A-Fa-f]'; // Hex digit
225+
} else if (escaped === 'X') {
226+
return '[^0-9A-Fa-f]'; // Non-hex digit
227+
} else if (escaped === 'o') {
228+
return '[0-7]'; // Octal digit
229+
} else if (escaped === 'o') {
230+
return '[^0-7]'; // Non-octal digit
231+
} else if (escaped === 'h') {
232+
return '[A-Za-z_]'; // Head of word character
233+
} else if (escaped === 'H') {
234+
return '[^A-Za-z_]'; // Non-head of word character
235+
} else if (escaped === 'a') {
236+
return '[A-Za-z]'; // Alphabetic character
237+
} else if (escaped === 'A') {
238+
return '[^A-Za-z]'; // Non-alphabetic character
239+
} else if (escaped === 'l') {
240+
// TODO: Lowercase and uppercase don't work with ignorecase
241+
return '[a-z]'; // Lowercase character
242+
} else if (escaped === 'L') {
243+
return '[^a-z]'; // Non-lowercase character
244+
} else if (escaped === 'u') {
245+
return '[A-Z]'; // Uppercase character
246+
} else if (escaped === 'U') {
247+
return '[^A-Z]'; // Non-uppercase character
223248
} else if (escaped === '<' || escaped === '>') {
224249
// TODO: not QUITE the same
225250
return '\\b';

0 commit comments

Comments
 (0)