From 51f15782afc9272dc20376294bf401ed77f8a7de Mon Sep 17 00:00:00 2001 From: chylex <contact@chylex.com> Date: Thu, 27 Mar 2025 11:29:51 +0100 Subject: [PATCH] Make camelCase motions adjust based on direction of visual selection --- .../vim/action/motion/text/MotionCamelLeftAction.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/text/MotionCamelLeftAction.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/text/MotionCamelLeftAction.kt index 24acd9c62..43454fa9c 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/text/MotionCamelLeftAction.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/text/MotionCamelLeftAction.kt @@ -31,6 +31,12 @@ class MotionCamelLeftAction : MotionActionHandler.ForEachCaret() { argument: Argument?, operatorArguments: OperatorArguments, ): Motion { + if (caret.hasSelection() && caret.offset > caret.vimSelectionStart) { + val target = injector.searchHelper.findPreviousCamelEnd(editor.text(), caret.offset, operatorArguments.count1) + if (target != null && target > caret.vimSelectionStart) { + return target.toMotionOrError() + } + } return injector.searchHelper.findPreviousCamelStart(editor.text(), caret.offset, operatorArguments.count1) ?.toMotionOrError() ?: Motion.Error } @@ -47,6 +53,10 @@ class MotionCamelRightAction : MotionActionHandler.ForEachCaret() { argument: Argument?, operatorArguments: OperatorArguments, ): Motion { + if (caret.hasSelection() && caret.offset >= caret.vimSelectionStart) { + return injector.searchHelper.findNextCamelEnd(editor.text(), caret.offset + 1, operatorArguments.count1) + ?.toMotionOrError() ?: Motion.Error + } return injector.searchHelper.findNextCamelStart(editor.text(), caret.offset + 1, operatorArguments.count1) ?.toMotionOrError() ?: Motion.Error }