@@ -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