diff options
Diffstat (limited to 'autoload/regex_escape.vim')
-rw-r--r-- | autoload/regex_escape.vim | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/autoload/regex_escape.vim b/autoload/regex_escape.vim index 6acff6b..b57392a 100644 --- a/autoload/regex_escape.vim +++ b/autoload/regex_escape.vim @@ -1,10 +1,9 @@ -" Define Vim pattern character classes of characters that should have an -" escape character added before them to make them literal, for use in -" substitute() +" Define characters that should be scaped to make them literal, for use as the +" second parameter to escape() let s:classes = { - \ 'bre': '[][\.*?^$]', - \ 'ere': '[][\.*?^$+{}()/]', - \ 'vim': '[][\.*^$~]' + \ 'bre': '\.[]*^$?', + \ 'ere': '\.[]*^$?+{}()/', + \ 'vim': '\.[]*^$~' \ } " This function does the actual translation, defined as 'operatorfunc' for the @@ -45,12 +44,12 @@ function! regex_escape#Operatorfunc(type) abort " Get the corresponding character class let class = s:classes[flavor] - " Perform the substitution on the unnamed register's contents, inserting a + " Perform the escaping on the unnamed register's contents, inserting a " backslash before every instance of any character in that class - let @@ = substitute(@@, class, '\\&', 'g') + let @@ = escape(@@, class) - " Paste our substituted changes back in over the top of the previously - " selected text, by reselecting it before the paste + " Paste our escaped changes back in over the top of the previously selected + " text, by reselecting it before the paste silent normal! gvp " Restore contents of the unnamed register and the previous values of the |