Change summary
crates/editor/src/editor.rs | 4 +++
crates/vim/src/normal/search.rs | 21 +++++++++++++---
crates/vim/test_data/test_replace_with_range.json | 4 +++
3 files changed, 25 insertions(+), 4 deletions(-)
Detailed changes
@@ -9983,6 +9983,10 @@ impl Editor {
)
}
+ pub fn clear_search_within_ranges(&mut self, cx: &mut ViewContext<Self>) {
+ self.clear_background_highlights::<SearchWithinRange>(cx);
+ }
+
pub fn highlight_background<T: 'static>(
&mut self,
ranges: &[Range<Anchor>],
@@ -353,7 +353,6 @@ fn replace_command(
let range = snapshot
.anchor_before(Point::new(range.start.saturating_sub(1) as u32, 0))
..snapshot.anchor_before(Point::new(range.end as u32, 0));
-
editor.set_search_within_ranges(&[range], cx)
})
}
@@ -394,9 +393,7 @@ fn replace_command(
.timer(Duration::from_millis(200))
.await;
editor
- .update(&mut cx, |editor, cx| {
- editor.set_search_within_ranges(&[], cx)
- })
+ .update(&mut cx, |editor, cx| editor.clear_search_within_ranges(cx))
.ok();
})
.detach();
@@ -512,6 +509,8 @@ fn parse_replace_all(query: &str) -> Replacement {
#[cfg(test)]
mod test {
+ use std::time::Duration;
+
use editor::{display_map::DisplayRow, DisplayPoint};
use indoc::indoc;
use search::BufferSearchBar;
@@ -744,5 +743,19 @@ mod test {
a
"
});
+ cx.executor().advance_clock(Duration::from_millis(250));
+ cx.run_until_parked();
+
+ cx.simulate_shared_keystrokes("/ a enter").await;
+ cx.shared_state().await.assert_eq(indoc! {
+ "a
+ b
+ b
+ b
+ b
+ Ėa
+ a
+ "
+ });
}
}
@@ -10,3 +10,7 @@
{"Key":"b"}
{"Key":"enter"}
{"Get":{"state":"a\nb\nb\nb\nĖb\na\na\n ","mode":"Normal"}}
+{"Key":"/"}
+{"Key":"a"}
+{"Key":"enter"}
+{"Get":{"state":"a\nb\nb\nb\nb\nĖa\na\n ","mode":"Normal"}}