Skip to content

Commit

Permalink
vim: Fix %s replace not working more than twice (#12045)
Browse files Browse the repository at this point in the history
close: #11981 

Release Notes:

- N/A

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
  • Loading branch information
CharlesChen0823 and ConradIrwin committed May 21, 2024
1 parent f2357c7 commit 1e18bcb
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 4 deletions.
4 changes: 4 additions & 0 deletions crates/editor/src/editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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>],
Expand Down
21 changes: 17 additions & 4 deletions crates/vim/src/normal/search.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
})
}
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
"
});
}
}
4 changes: 4 additions & 0 deletions crates/vim/test_data/test_replace_with_range.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"}}

0 comments on commit 1e18bcb

Please sign in to comment.