diff --git a/crates/vim/src/helix/select.rs b/crates/vim/src/helix/select.rs new file mode 100644 index 0000000000..56f1cfdaaf --- /dev/null +++ b/crates/vim/src/helix/select.rs @@ -0,0 +1,29 @@ +use text::SelectionGoal; +use ui::{Context, Window}; + +use crate::{Vim, object::Object}; + +impl Vim { + /// Selects the text object each cursor is over. + pub fn select_object( + &mut self, + object: Object, + around: bool, + window: &mut Window, + cx: &mut Context, + ) { + self.stop_recording(cx); + self.update_editor(window, cx, |_, editor, window, cx| { + editor.change_selections(Default::default(), window, cx, |s| { + s.move_with(|map, selection| { + let Some(range) = object.helix_range(map, selection.clone(), around) else { + return; + }; + + selection.set_head(range.end, SelectionGoal::None); + selection.start = range.start; + }); + }); + }); + } +}