diff --git a/crates/vim/src/normal.rs b/crates/vim/src/normal.rs index ae560acc29..8198c0da53 100644 --- a/crates/vim/src/normal.rs +++ b/crates/vim/src/normal.rs @@ -248,7 +248,7 @@ impl Vim { } Some(Operator::AddSurrounds { target: None }) => { waiting_operator = Some(Operator::AddSurrounds { - target: Some(SurroundsType::Object(object)), + target: Some(SurroundsType::Object(object, around)), }); } Some(Operator::ToggleComments) => self.toggle_comments_object(object, around, cx), diff --git a/crates/vim/src/surrounds.rs b/crates/vim/src/surrounds.rs index 137801c3ee..81025103fb 100644 --- a/crates/vim/src/surrounds.rs +++ b/crates/vim/src/surrounds.rs @@ -13,7 +13,7 @@ use ui::ViewContext; #[derive(Clone, Debug, PartialEq, Eq)] pub enum SurroundsType { Motion(Motion), - Object(Object), + Object(Object, bool), Selection, } @@ -59,8 +59,8 @@ impl Vim { for selection in &display_selections { let range = match &target { - SurroundsType::Object(object) => { - object.range(&display_map, selection.clone(), false) + SurroundsType::Object(object, around) => { + object.range(&display_map, selection.clone(), *around) } SurroundsType::Motion(motion) => { motion @@ -697,6 +697,40 @@ mod test { the lazy dog."}, Mode::Normal, ); + + // test add surrounds around object + cx.set_state( + indoc! {" + The [quˇick] brown + fox jumps over + the lazy dog."}, + Mode::Normal, + ); + cx.simulate_keystrokes("y s a ] )"); + cx.assert_state( + indoc! {" + The ˇ([quick]) brown + fox jumps over + the lazy dog."}, + Mode::Normal, + ); + + // test add surrounds inside object + cx.set_state( + indoc! {" + The [quˇick] brown + fox jumps over + the lazy dog."}, + Mode::Normal, + ); + cx.simulate_keystrokes("y s i ] )"); + cx.assert_state( + indoc! {" + The [ˇ(quick)] brown + fox jumps over + the lazy dog."}, + Mode::Normal, + ); } #[gpui::test]