From 52103bc99a1f27f1475cf9ea64e816f05f1f9fa1 Mon Sep 17 00:00:00 2001 From: fantacell Date: Sat, 16 Aug 2025 15:44:39 +0200 Subject: [PATCH] Don't let sentences span across paragraphs --- crates/vim/src/helix/boundary.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/crates/vim/src/helix/boundary.rs b/crates/vim/src/helix/boundary.rs index 1cfa784a86..86cb050874 100644 --- a/crates/vim/src/helix/boundary.rs +++ b/crates/vim/src/helix/boundary.rs @@ -282,7 +282,7 @@ impl FuzzyBoundary { &self, left: char, right: char, - classifier: CharClassifier, + classifier: &CharClassifier, ) -> Option Option>> { if is_buffer_start(left) { return Some(Box::new(|identifier, _| Some(identifier))); @@ -297,7 +297,11 @@ impl FuzzyBoundary { })) } Self::Sentence => { - if !is_sentence_end(left, right, &classifier) { + if let Some(find_paragraph_start) = + Self::Paragraph.is_near_potential_start(left, right, classifier) + { + return Some(find_paragraph_start); + } else if !is_sentence_end(left, right, classifier) { return None; } Some(Box::new(|identifier, map| { @@ -315,7 +319,7 @@ impl FuzzyBoundary { &self, left: char, right: char, - classifier: CharClassifier, + classifier: &CharClassifier, ) -> Option Option>> { if is_buffer_end(right) { return Some(Box::new(|identifier, _| Some(identifier))); @@ -332,7 +336,11 @@ impl FuzzyBoundary { })) } Self::Sentence => { - if !is_sentence_end(left, right, &classifier) { + if let Some(find_paragraph_end) = + Self::Paragraph.is_near_potential_end(left, right, classifier) + { + return Some(find_paragraph_end); + } else if !is_sentence_end(left, right, &classifier) { return None; } Some(Box::new(|identifier, _| Some(identifier))) @@ -349,7 +357,7 @@ impl BoundedObject for FuzzyBoundary { let classifier = map .buffer_snapshot .char_classifier_at(point.to_offset(map, Bias::Left)); - self.is_near_potential_start(left, right, classifier) + self.is_near_potential_start(left, right, &classifier) .map(|reach_start| (point, reach_start)) }) { @@ -371,7 +379,7 @@ impl BoundedObject for FuzzyBoundary { let classifier = map .buffer_snapshot .char_classifier_at(point.to_offset(map, Bias::Left)); - self.is_near_potential_end(left, right, classifier) + self.is_near_potential_end(left, right, &classifier) .map(|reach_end| (point, reach_end)) }) { @@ -393,7 +401,7 @@ impl BoundedObject for FuzzyBoundary { let classifier = map .buffer_snapshot .char_classifier_at(point.to_offset(map, Bias::Left)); - self.is_near_potential_start(left, right, classifier) + self.is_near_potential_start(left, right, &classifier) .map(|reach_start| (point, reach_start)) }) { @@ -415,7 +423,7 @@ impl BoundedObject for FuzzyBoundary { let classifier = map .buffer_snapshot .char_classifier_at(point.to_offset(map, Bias::Left)); - self.is_near_potential_end(left, right, classifier) + self.is_near_potential_end(left, right, &classifier) .map(|reach_end| (point, reach_end)) }) {