Fix <Enter> to go to non-whitespace character

Conrad Irwin created

Fixes: zed-industries/community#831

Change summary

crates/vim/src/motion.rs                       | 13 ++++++++++++-
crates/vim/test_data/test_next_line_start.json |  3 +++
2 files changed, 15 insertions(+), 1 deletion(-)

Detailed changes

crates/vim/src/motion.rs 🔗

@@ -651,7 +651,10 @@ fn find_backward(
 
 fn next_line_start(map: &DisplaySnapshot, point: DisplayPoint, times: usize) -> DisplayPoint {
     let new_row = (point.row() + times as u32).min(map.max_buffer_row());
-    map.clip_point(DisplayPoint::new(new_row, 0), Bias::Left)
+    first_non_whitespace(
+        map,
+        map.clip_point(DisplayPoint::new(new_row, 0), Bias::Left),
+    )
 }
 
 #[cfg(test)]
@@ -799,4 +802,12 @@ mod test {
         cx.simulate_shared_keystrokes([","]).await;
         cx.assert_shared_state("one two thˇree four").await;
     }
+
+    #[gpui::test]
+    async fn test_next_line_start(cx: &mut gpui::TestAppContext) {
+        let mut cx = NeovimBackedTestContext::new(cx).await;
+        cx.set_shared_state("ˇone\n  two\nthree").await;
+        cx.simulate_shared_keystrokes(["enter"]).await;
+        cx.assert_shared_state("one\n  ˇtwo\nthree").await;
+    }
 }