diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroupBase.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroupBase.kt
index 24f394424..777c51607 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroupBase.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroupBase.kt
@@ -29,7 +29,7 @@ import com.maddyhome.idea.vim.regexp.match.VimMatchResult
 import com.maddyhome.idea.vim.register.RegisterConstants
 import com.maddyhome.idea.vim.state.mode.inVisualMode
 import com.maddyhome.idea.vim.vimscript.model.VimLContext
-import com.maddyhome.idea.vim.vimscript.model.functions.handlers.SubmatchFunctionHandler
+import com.maddyhome.idea.vim.vimscript.model.functions.handlers.stringFunctions.SubmatchFunctionHandler
 import org.jetbrains.annotations.TestOnly
 import java.text.NumberFormat
 import java.text.ParsePosition
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/GetCmdTypeFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/commandLineFunctions/GetCmdTypeFunctionHandler.kt
similarity index 96%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/GetCmdTypeFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/commandLineFunctions/GetCmdTypeFunctionHandler.kt
index 73487679f..dec27923b 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/GetCmdTypeFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/commandLineFunctions/GetCmdTypeFunctionHandler.kt
@@ -1,12 +1,12 @@
 /*
- * Copyright 2003-2024 The IdeaVim authors
+ * Copyright 2003-2025 The IdeaVim authors
  *
  * Use of this source code is governed by an MIT-style
  * license that can be found in the LICENSE.txt file or at
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.commandLineFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/ColLineFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/cursorFunctions/ColLineFunctionHandler.kt
similarity index 99%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/ColLineFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/cursorFunctions/ColLineFunctionHandler.kt
index 46c5a6a39..6db76e347 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/ColLineFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/cursorFunctions/ColLineFunctionHandler.kt
@@ -6,7 +6,7 @@
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.cursorFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/AbsFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/floatFunctions/AbsFunctionHandler.kt
similarity index 95%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/AbsFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/floatFunctions/AbsFunctionHandler.kt
index aee7a5dfe..9a8e2c058 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/AbsFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/floatFunctions/AbsFunctionHandler.kt
@@ -1,12 +1,12 @@
 /*
- * Copyright 2003-2023 The IdeaVim authors
+ * Copyright 2003-2025 The IdeaVim authors
  *
  * Use of this source code is governed by an MIT-style
  * license that can be found in the LICENSE.txt file or at
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.floatFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/SinFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/floatFunctions/SinFunctionHandler.kt
similarity index 95%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/SinFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/floatFunctions/SinFunctionHandler.kt
index 8467863d6..f9f1b723b 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/SinFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/floatFunctions/SinFunctionHandler.kt
@@ -1,12 +1,12 @@
 /*
- * Copyright 2003-2023 The IdeaVim authors
+ * Copyright 2003-2025 The IdeaVim authors
  *
  * Use of this source code is governed by an MIT-style
  * license that can be found in the LICENSE.txt file or at
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.floatFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/JoinFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/listFunctions/JoinFunctionHandler.kt
similarity index 99%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/JoinFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/listFunctions/JoinFunctionHandler.kt
index 20296f107..5e08efbaa 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/JoinFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/listFunctions/JoinFunctionHandler.kt
@@ -6,7 +6,7 @@
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.listFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/SplitFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/listFunctions/SplitFunctionHandler.kt
similarity index 99%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/SplitFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/listFunctions/SplitFunctionHandler.kt
index 125f08326..6b0b65efe 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/SplitFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/listFunctions/SplitFunctionHandler.kt
@@ -6,7 +6,7 @@
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.listFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/EscapeFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/EscapeFunctionHandler.kt
similarity index 86%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/EscapeFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/EscapeFunctionHandler.kt
index 484d0cc35..d687528b5 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/EscapeFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/EscapeFunctionHandler.kt
@@ -1,4 +1,12 @@
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+/*
+ * Copyright 2003-2025 The IdeaVim authors
+ *
+ * Use of this source code is governed by an MIT-style
+ * license that can be found in the LICENSE.txt file or at
+ * https://opensource.org/licenses/MIT.
+ */
+
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.stringFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
@@ -8,6 +16,7 @@ import com.maddyhome.idea.vim.vimscript.model.datatypes.VimDataType
 import com.maddyhome.idea.vim.vimscript.model.datatypes.VimString
 import com.maddyhome.idea.vim.vimscript.model.expressions.Expression
 import com.maddyhome.idea.vim.vimscript.model.functions.FunctionHandler
+import kotlin.text.iterator
 
 /**
  * Implementation of Vim's escape() function.
@@ -42,4 +51,4 @@ internal class EscapeFunctionHandler : FunctionHandler() {
 
     return VimString(result.toString())
   }
-}
\ No newline at end of file
+}
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/SubmatchFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/SubmatchFunctionHandler.kt
similarity index 98%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/SubmatchFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/SubmatchFunctionHandler.kt
index 392673379..c308f68a6 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/SubmatchFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/SubmatchFunctionHandler.kt
@@ -6,7 +6,7 @@
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.stringFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/TolowerFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/TolowerFunctionHandler.kt
similarity index 98%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/TolowerFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/TolowerFunctionHandler.kt
index 29c6233b6..7b371c49c 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/TolowerFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/TolowerFunctionHandler.kt
@@ -6,7 +6,7 @@
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.stringFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/ToupperFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/ToupperFunctionHandler.kt
similarity index 98%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/ToupperFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/ToupperFunctionHandler.kt
index 207f4eef6..aa24e5fbf 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/ToupperFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/stringFunctions/ToupperFunctionHandler.kt
@@ -6,7 +6,7 @@
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.stringFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/FunctionFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/varFunctions/FunctionFunctionHandler.kt
similarity index 99%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/FunctionFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/varFunctions/FunctionFunctionHandler.kt
index b5a4cffe7..05064ae2a 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/FunctionFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/varFunctions/FunctionFunctionHandler.kt
@@ -6,7 +6,7 @@
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.varFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/ExistsFunctionHandler.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/variousFunctions/ExistsFunctionHandler.kt
similarity index 93%
rename from vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/ExistsFunctionHandler.kt
rename to vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/variousFunctions/ExistsFunctionHandler.kt
index 1be9beac4..d7b9caf90 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/ExistsFunctionHandler.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/handlers/variousFunctions/ExistsFunctionHandler.kt
@@ -1,12 +1,12 @@
 /*
- * Copyright 2003-2023 The IdeaVim authors
+ * Copyright 2003-2025 The IdeaVim authors
  *
  * Use of this source code is governed by an MIT-style
  * license that can be found in the LICENSE.txt file or at
  * https://opensource.org/licenses/MIT.
  */
 
-package com.maddyhome.idea.vim.vimscript.model.functions.handlers
+package com.maddyhome.idea.vim.vimscript.model.functions.handlers.variousFunctions
 
 import com.intellij.vim.annotations.VimscriptFunction
 import com.maddyhome.idea.vim.api.ExecutionContext
@@ -45,6 +45,6 @@ internal class ExistsFunctionHandler : FunctionHandler() {
 
       else -> throw ExException("exists function is not fully implemented")
     }
-    return if (result) VimInt.ONE else VimInt.ZERO
+    return if (result) VimInt.Companion.ONE else VimInt.Companion.ZERO
   }
 }
diff --git a/vim-engine/src/main/resources/ksp-generated/engine_vimscript_functions.json b/vim-engine/src/main/resources/ksp-generated/engine_vimscript_functions.json
index 2d6fa03e7..dc0121730 100644
--- a/vim-engine/src/main/resources/ksp-generated/engine_vimscript_functions.json
+++ b/vim-engine/src/main/resources/ksp-generated/engine_vimscript_functions.json
@@ -1,23 +1,23 @@
 {
-    "abs": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.AbsFunctionHandler",
+    "abs": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.floatFunctions.AbsFunctionHandler",
     "and": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.bitwiseFunctions.AndFunctionHandler",
-    "col": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.ColFunctionHandler",
+    "col": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.cursorFunctions.ColFunctionHandler",
     "empty": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.EmptyFunctionHandler",
-    "escape": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.EscapeFunctionHandler",
-    "exists": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.ExistsFunctionHandler",
-    "funcref": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.FuncrefFunctionHandler",
-    "function": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.FunctionFunctionHandler",
+    "escape": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.stringFunctions.EscapeFunctionHandler",
+    "exists": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.variousFunctions.ExistsFunctionHandler",
+    "funcref": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.varFunctions.FuncrefFunctionHandler",
+    "function": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.varFunctions.FunctionFunctionHandler",
     "get": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.GetFunctionHandler",
-    "getcmdtype": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.GetCmdTypeFunctionHandler",
+    "getcmdtype": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.commandLineFunctions.GetCmdTypeFunctionHandler",
     "invert": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.bitwiseFunctions.InvertFunctionHandler",
-    "join": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.JoinFunctionHandler",
+    "join": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.listFunctions.JoinFunctionHandler",
     "len": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.LenFunctionHandler",
-    "line": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.LineFunctionHandler",
+    "line": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.cursorFunctions.LineFunctionHandler",
     "or": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.bitwiseFunctions.OrFunctionHandler",
-    "sin": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.SinFunctionHandler",
-    "split": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.SplitFunctionHandler",
-    "submatch": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.SubmatchFunctionHandler",
-    "tolower": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.TolowerFunctionHandler",
-    "toupper": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.ToupperFunctionHandler",
+    "sin": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.floatFunctions.SinFunctionHandler",
+    "split": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.listFunctions.SplitFunctionHandler",
+    "submatch": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.stringFunctions.SubmatchFunctionHandler",
+    "tolower": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.stringFunctions.TolowerFunctionHandler",
+    "toupper": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.stringFunctions.ToupperFunctionHandler",
     "xor": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.bitwiseFunctions.XorFunctionHandler"
 }
\ No newline at end of file