@@ -64,15 +64,25 @@ enddef
6464
6565export def Surround (open_delimiter: string ,
6666 close_delimiter: string ,
67- text_object: string = ' ' ,
68- keep_even: bool = false)
67+ all_open_delimiters: dict <string> ,
68+ all_close_delimiters: dict <string> ,
69+ text_object: string = ' ' )
6970 # Usage:
7071 # Select text and hit <leader> + e .g . parenthesis
7172 #
73+ # open_delimiter and close_delimiter are keys for the respective
74+ # dictionaries
75+ # keep_even may not be needed...
7276 # Note that Visual Selections and Text Objects are cousins
7377 #
74- if ! empty (IsInRange (open_delimiter, close_delimiter))
75- RemoveSurrounding (open_delimiter, close_delimiter)
78+
79+ var open_string = open_delimiter
80+ var open_regex = all_close_delimiters[open_delimiter]
81+ var close_string = close_delimiter
82+ var close_regex = all_close_delimiters[close_delimiter]
83+
84+ if ! empty (IsInRange (open_regex, close_regex))
85+ RemoveSurrounding (open_regex, close_regex)
7686 else
7787 # Set marks
7888 var A_mark = " '<"
@@ -116,8 +126,8 @@ export def Surround(open_delimiter: string,
116126 # so that all the styles are visible
117127
118128 # Check if the cursor is already in a range of another pair of delimiters
119- var open_delimiters = [ ' * ' , ' ** ' , ' ~~ ' , ' ` ' ]
120- var close_delimiters = [ ' * ' , ' ** ' , ' ~~ ' , ' ` ' ]
129+ var open_delimiters = values (all_open_delimiters)
130+ var close_delimiters = values (all_close_delimiters)
121131 var old_right_delimiter = ' '
122132 var old_left_delimiter = ' '
123133
@@ -373,9 +383,9 @@ enddef
373383
374384export def IsInRange (open_delimiter: string ,
375385 close_delimiter: string ): list <list<number> >
386+ # Arguments must be regex.
376387 # Return the range of the delimiters if the cursor is within such a range ,
377388 # otherwise return an empty list .
378- # Arguments must be regex.
379389 var interval = []
380390
381391 # OBS! Ranges are open - intervals!
0 commit comments