Skip to content

Commit e2ae140

Browse files
committed
modified search and replace methods
1 parent 61fb82d commit e2ae140

6 files changed

Lines changed: 322 additions & 148 deletions

File tree

cmd/micro/initlua.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ func luaImportMicroBuffer() *lua.LTable {
141141
ulua.L.SetField(pkg, "ByteOffset", luar.New(ulua.L, buffer.ByteOffset))
142142
ulua.L.SetField(pkg, "Log", luar.New(ulua.L, buffer.WriteLog))
143143
ulua.L.SetField(pkg, "LogBuf", luar.New(ulua.L, buffer.GetLogBuf))
144+
ulua.L.SetField(pkg, "NewRegexpGroup", luar.New(ulua.L, buffer.NewRegexpGroup))
144145

145146
return pkg
146147
}

internal/action/command.go

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -935,17 +935,8 @@ func (h *BufPane) ReplaceCmd(args []string) {
935935

936936
replace := []byte(replaceStr)
937937

938-
var regex *regexp.Regexp
939-
var err error
940938
if h.Buf.Settings["ignorecase"].(bool) {
941-
regex, err = regexp.Compile("(?im)" + search)
942-
} else {
943-
regex, err = regexp.Compile("(?m)" + search)
944-
}
945-
if err != nil {
946-
// There was an error with the user's regex
947-
InfoBar.Error(err)
948-
return
939+
search = "(?i)" + search
949940
}
950941

951942
nreplaced := 0
@@ -959,21 +950,32 @@ func (h *BufPane) ReplaceCmd(args []string) {
959950
searchLoc = start // otherwise me might start at the end
960951
}
961952
if all {
962-
nreplaced, _ = h.Buf.ReplaceRegex(start, end, regex, replace, !noRegex)
953+
var err error
954+
if noRegex {
955+
nreplaced, _, err = h.Buf.ReplaceAllLiteral(search, start, end, replace)
956+
} else {
957+
nreplaced, _, err = h.Buf.ReplaceAll(search, start, end, replace)
958+
}
959+
if err != nil {
960+
InfoBar.Error(err)
961+
return
962+
}
963963
} else {
964+
rgrp, err := buffer.NewRegexpGroup(search)
965+
if err != nil {
966+
InfoBar.Error(err)
967+
return
968+
}
969+
964970
inRange := func(l buffer.Loc) bool {
965971
return l.GreaterEqual(start) && l.LessEqual(end)
966972
}
967973

968974
lastMatchEnd := buffer.Loc{-1, -1}
969975
var doReplacement func()
970976
doReplacement = func() {
971-
locs, found, err := h.Buf.FindNext(search, start, end, searchLoc, true, true)
972-
if err != nil {
973-
InfoBar.Error(err)
974-
return
975-
}
976-
if !found || !inRange(locs[0]) || !inRange(locs[1]) {
977+
locs := h.Buf.FindDown(rgrp, searchLoc, end)
978+
if locs == nil || !inRange(locs[0]) || !inRange(locs[1]) {
977979
h.Cursor.ResetSelection()
978980
h.Buf.RelocateCursors()
979981

@@ -1001,12 +1003,14 @@ func (h *BufPane) ReplaceCmd(args []string) {
10011003

10021004
InfoBar.YNPrompt("Perform replacement (y,n,esc)", func(yes, canceled bool) {
10031005
if !canceled && yes {
1004-
_, nrunes := h.Buf.ReplaceRegex(locs[0], locs[1], regex, replace, !noRegex)
1006+
if noRegex {
1007+
_, searchLoc, _ = h.Buf.ReplaceAllLiteral(search, locs[0], locs[1], replace)
1008+
} else {
1009+
_, searchLoc, _ = h.Buf.ReplaceAll(search, locs[0], locs[1], replace)
1010+
}
10051011

1006-
searchLoc = locs[0]
1007-
searchLoc.X += nrunes + locs[0].Diff(locs[1], h.Buf)
10081012
if end.Y == locs[1].Y {
1009-
end = end.Move(nrunes, h.Buf)
1013+
end = buffer.Loc{end.X + searchLoc.X - locs[1].X, end.Y}
10101014
}
10111015
h.Cursor.Loc = searchLoc
10121016
nreplaced++

0 commit comments

Comments
 (0)