From 940b67ef1dbd7d86874102e38de661aacbfd65a2 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Sat, 25 May 2019 17:09:01 +1200 Subject: Switch to escape() method Much neater than substitute(). --- autoload/regex_escape.vim | 19 +++++++++---------- 1 file 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 -- cgit v1.2.3