Merge pull request #3491 from chiizujin/editor_search_traceback

Fix traceback if invalid regex is passed into editor :s command
This commit is contained in:
Griatch 2024-04-07 21:27:26 +02:00 committed by GitHub
commit 35f72cbf74
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -654,29 +654,34 @@ class CmdEditorGroup(CmdEditorBase):
if not self.linerange:
lstart = 0
lend = self.cline + 1
caller.msg(
_("Search-replaced {arg1} -> {arg2} for lines {l1}-{l2}.").format(
arg1=self.arg1, arg2=self.arg2, l1=lstart + 1, l2=lend
)
)
else:
caller.msg(
_("Search-replaced {arg1} -> {arg2} for {line}.").format(
arg1=self.arg1, arg2=self.arg2, line=self.lstr
)
)
sarea = "\n".join(linebuffer[lstart:lend])
regex = r"%s|^%s(?=\s)|(?<=\s)%s(?=\s)|^%s$|(?<=\s)%s$"
regarg = self.arg1.strip("'").strip('"')
if " " in regarg:
regarg = regarg.replace(" ", " +")
sarea = re.sub(
regex % (regarg, regarg, regarg, regarg, regarg),
self.arg2.strip("'").strip('"'),
sarea,
re.MULTILINE,
)
try:
sarea = re.sub(
regex % (regarg, regarg, regarg, regarg, regarg),
self.arg2.strip("'").strip('"'),
sarea,
re.MULTILINE,
)
except re.error as e:
caller.msg(_("Invalid regular expression."))
else:
if not self.linerange:
caller.msg(
_("Search-replaced {arg1} -> {arg2} for lines {l1}-{l2}.").format(
arg1=self.arg1, arg2=self.arg2, l1=lstart + 1, l2=lend
)
)
else:
caller.msg(
_("Search-replaced {arg1} -> {arg2} for {line}.").format(
arg1=self.arg1, arg2=self.arg2, line=self.lstr
)
)
buf = linebuffer[:lstart] + sarea.split("\n") + linebuffer[lend:]
editor.update_buffer(buf)
elif cmd == ":f":