diff options
-rw-r--r-- | Userland/Libraries/LibGUI/VimEditingEngine.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/Userland/Libraries/LibGUI/VimEditingEngine.cpp b/Userland/Libraries/LibGUI/VimEditingEngine.cpp index be97b90893..3cf3354147 100644 --- a/Userland/Libraries/LibGUI/VimEditingEngine.cpp +++ b/Userland/Libraries/LibGUI/VimEditingEngine.cpp @@ -963,13 +963,18 @@ bool VimEditingEngine::on_key_in_normal_mode(const KeyEvent& event) move_to_next_empty_lines_block(); return true; case (KeyCode::Key_J): { - if (m_editor->cursor().line() + 1 >= m_editor->line_count()) - return true; - move_to_logical_line_end(); - m_editor->add_code_point(' '); - TextPosition next_line = { m_editor->cursor().line() + 1, 0 }; - m_editor->delete_text_range({ m_editor->cursor(), next_line }); - move_one_left(); + // Looks a bit strange, but join without a repeat, with 1 as the repeat or 2 as the repeat all join the current and next lines + auto amount = (m_motion.amount() > 2) ? (m_motion.amount() - 1) : 1; + m_motion.reset(); + for (int i = 0; i < amount; i++) { + if (m_editor->cursor().line() + 1 >= m_editor->line_count()) + return true; + move_to_logical_line_end(); + m_editor->add_code_point(' '); + TextPosition next_line = { m_editor->cursor().line() + 1, 0 }; + m_editor->delete_text_range({ m_editor->cursor(), next_line }); + move_one_left(); + } return true; } case (KeyCode::Key_P): |