diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index 97f75621c8231f5bed17f94ea43e342caa90a417..278379a0caf5a177105674ab889666a34815752f 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -1682,19 +1682,27 @@ impl SearchableItem for Editor { let text = text.snapshot(cx); let mut edits = vec![]; - for m in matches { - let text = text.text_for_range(m.clone()).collect::>(); - - let text: Cow<_> = if text.len() == 1 { - text.first().cloned().unwrap().into() - } else { - let joined_chunks = text.join(""); - joined_chunks.into() - }; + // A regex might have replacement variables so we cannot apply + // the same replacement to all matches + if query.is_regex() { + edits = matches + .filter_map(|m| { + let text = text.text_for_range(m.clone()).collect::>(); + + let text: Cow<_> = if text.len() == 1 { + text.first().cloned().unwrap().into() + } else { + let joined_chunks = text.join(""); + joined_chunks.into() + }; - if let Some(replacement) = query.replacement_for(&text) { - edits.push((m.clone(), Arc::from(&*replacement))); - } + query + .replacement_for(&text) + .map(|replacement| (m.clone(), Arc::from(&*replacement))) + }) + .collect(); + } else if let Some(replacement) = query.replacement().map(Arc::::from) { + edits = matches.map(|m| (m.clone(), replacement.clone())).collect(); } if !edits.is_empty() {