Change summary
crates/vim/src/command.rs | 27 ++++++++++++++++++++
crates/vim/src/normal/search.rs | 7 ++++
crates/vim/test_data/test_command_search.json | 11 ++++++++
3 files changed, 43 insertions(+), 2 deletions(-)
Detailed changes
@@ -355,8 +355,33 @@ mod test {
dd
ˇcc"})
.await;
+ }
+
+ #[gpui::test]
+ async fn test_command_search(cx: &mut TestAppContext) {
+ let mut cx = NeovimBackedTestContext::new(cx).await;
- cx.simulate_shared_keystrokes([":", "%", "s", "/", "/", "/", "enter"])
+ cx.set_shared_state(indoc! {"
+ ˇa
+ b
+ a
+ c"})
+ .await;
+ cx.simulate_shared_keystrokes([":", "/", "b", "enter"])
+ .await;
+ cx.assert_shared_state(indoc! {"
+ a
+ ˇb
+ a
+ c"})
+ .await;
+ cx.simulate_shared_keystrokes([":", "?", "a", "enter"])
+ .await;
+ cx.assert_shared_state(indoc! {"
+ ˇa
+ b
+ a
+ c"})
.await;
}
@@ -195,10 +195,15 @@ fn find_command(workspace: &mut Workspace, action: &FindCommand, cx: &mut ViewCo
});
let Some(search) = search else { return };
let search_bar = search_bar.downgrade();
+ let direction = if action.backwards {
+ Direction::Prev
+ } else {
+ Direction::Next
+ };
cx.spawn(|_, mut cx| async move {
search.await?;
search_bar.update(&mut cx, |search_bar, cx| {
- search_bar.select_match(Direction::Next, 1, cx)
+ search_bar.select_match(direction, 1, cx)
})?;
anyhow::Ok(())
})
@@ -0,0 +1,11 @@
+{"Put":{"state":"ˇa\nb\na\nc"}}
+{"Key":":"}
+{"Key":"/"}
+{"Key":"b"}
+{"Key":"enter"}
+{"Get":{"state":"a\nˇb\na\nc","mode":"Normal"}}
+{"Key":":"}
+{"Key":"?"}
+{"Key":"a"}
+{"Key":"enter"}
+{"Get":{"state":"ˇa\nb\na\nc","mode":"Normal"}}