vim: Add helix alias `reflow` for vim rewrap (#51788)

Brandon Elam Barker and dino created

Add support for Helix's `:reflow` command when vim or helix mode is
enabled.

Release Notes:

- Add support for helix's `:reflow` command

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>

Change summary

crates/vim/src/command.rs | 51 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)

Detailed changes

crates/vim/src/command.rs ๐Ÿ”—

@@ -47,6 +47,7 @@ use crate::{
         search::{FindCommand, ReplaceCommand, Replacement},
     },
     object::Object,
+    rewrap::Rewrap,
     state::{Mark, Mode},
     visual::VisualDeleteLine,
 };
@@ -1725,6 +1726,7 @@ fn generate_commands(_: &App) -> Vec<VimCommand> {
         )
         .range(wrap_count),
         VimCommand::new(("j", "oin"), JoinLines).range(select_range),
+        VimCommand::new(("reflow", ""), Rewrap).range(select_range),
         VimCommand::new(("fo", "ld"), editor::actions::FoldSelectedRanges).range(act_on_range),
         VimCommand::new(("foldo", "pen"), editor::actions::UnfoldLines)
             .bang(editor::actions::UnfoldRecursive)
@@ -3537,4 +3539,53 @@ mod test {
             Mode::Normal,
         );
     }
+
+    #[gpui::test]
+    async fn test_reflow(cx: &mut TestAppContext) {
+        let mut cx = VimTestContext::new(cx, true).await;
+
+        cx.update_editor(|editor, _window, cx| {
+            editor.set_hard_wrap(Some(10), cx);
+        });
+
+        cx.set_state(
+            indoc! {"
+                ห‡0123456789 0123456789 0123456789 0123456789
+            "},
+            Mode::Normal,
+        );
+
+        cx.simulate_keystrokes(": reflow");
+        cx.simulate_keystrokes("enter");
+
+        cx.assert_state(
+            indoc! {"
+                0123456789
+                0123456789
+                0123456789
+                ห‡0123456789
+            "},
+            Mode::Normal,
+        );
+
+        cx.set_state(
+            indoc! {"
+                ยซ0123456789 0123456789ห‡ยป
+                0123456789 0123456789
+            "},
+            Mode::VisualLine,
+        );
+
+        cx.simulate_keystrokes(": reflow");
+        cx.simulate_keystrokes("enter");
+
+        cx.assert_state(
+            indoc! {"
+                ห‡0123456789
+                0123456789
+                0123456789 0123456789
+            "},
+            Mode::Normal,
+        );
+    }
 }