mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-06 02:37:21 +00:00
Fix vim surround behavior around text objects (#17603)
Performing `ysa")` on `"Hello World"` should produce `("Hello World")`. Instead it places the parens inside the quotes (i.e. `"(Hello World)"`). This PR fixes the behavior by preserving the `around` flag from the operator sequence. Closes #12976 and partially fixes #13841 Release Notes: - Fixed the behavior of surrounding a text object in vim.
This commit is contained in:
parent
d5498c52f8
commit
5f61e3140f
2 changed files with 38 additions and 4 deletions
|
@ -248,7 +248,7 @@ impl Vim {
|
||||||
}
|
}
|
||||||
Some(Operator::AddSurrounds { target: None }) => {
|
Some(Operator::AddSurrounds { target: None }) => {
|
||||||
waiting_operator = Some(Operator::AddSurrounds {
|
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),
|
Some(Operator::ToggleComments) => self.toggle_comments_object(object, around, cx),
|
||||||
|
|
|
@ -13,7 +13,7 @@ use ui::ViewContext;
|
||||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||||
pub enum SurroundsType {
|
pub enum SurroundsType {
|
||||||
Motion(Motion),
|
Motion(Motion),
|
||||||
Object(Object),
|
Object(Object, bool),
|
||||||
Selection,
|
Selection,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,8 +59,8 @@ impl Vim {
|
||||||
|
|
||||||
for selection in &display_selections {
|
for selection in &display_selections {
|
||||||
let range = match &target {
|
let range = match &target {
|
||||||
SurroundsType::Object(object) => {
|
SurroundsType::Object(object, around) => {
|
||||||
object.range(&display_map, selection.clone(), false)
|
object.range(&display_map, selection.clone(), *around)
|
||||||
}
|
}
|
||||||
SurroundsType::Motion(motion) => {
|
SurroundsType::Motion(motion) => {
|
||||||
motion
|
motion
|
||||||
|
@ -697,6 +697,40 @@ mod test {
|
||||||
the lazy dog."},
|
the lazy dog."},
|
||||||
Mode::Normal,
|
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]
|
#[gpui::test]
|
||||||
|
|
Loading…
Reference in a new issue