diff --git a/annotation-processors/build.gradle.kts b/annotation-processors/build.gradle.kts
index 771959efe..c74935e38 100644
--- a/annotation-processors/build.gradle.kts
+++ b/annotation-processors/build.gradle.kts
@@ -19,5 +19,5 @@ repositories {
 
 dependencies {
   compileOnly("com.google.devtools.ksp:symbol-processing-api:1.8.21-1.0.11")
-  implementation("org.yaml:snakeyaml:2.0")
+  implementation("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.5.0")
 }
\ No newline at end of file
diff --git a/annotation-processors/src/main/kotlin/com/intellij/vim/FileWriter.kt b/annotation-processors/src/main/kotlin/com/intellij/vim/FileWriter.kt
index e85580ce1..7b2dd02b4 100644
--- a/annotation-processors/src/main/kotlin/com/intellij/vim/FileWriter.kt
+++ b/annotation-processors/src/main/kotlin/com/intellij/vim/FileWriter.kt
@@ -8,19 +8,10 @@
 
 package com.intellij.vim
 
-import org.yaml.snakeyaml.DumperOptions
-import org.yaml.snakeyaml.Yaml
 import java.io.File
 import java.nio.file.Path
 
 class FileWriter {
-  fun getYAML(comment: String, any: Any): String {
-    val options = DumperOptions()
-    options.defaultFlowStyle = DumperOptions.FlowStyle.BLOCK
-    val yaml = Yaml(options)
-    return comment + yaml.dump(any)
-  }
-
   fun writeFile(filePath: Path, content: String) {
     val file = File(filePath.toUri())
     file.writeText(content)
diff --git a/annotation-processors/src/main/kotlin/com/intellij/vim/processors/ExCommandProcessor.kt b/annotation-processors/src/main/kotlin/com/intellij/vim/processors/ExCommandProcessor.kt
index 38dea547c..3b23d06bc 100644
--- a/annotation-processors/src/main/kotlin/com/intellij/vim/processors/ExCommandProcessor.kt
+++ b/annotation-processors/src/main/kotlin/com/intellij/vim/processors/ExCommandProcessor.kt
@@ -19,23 +19,21 @@ import com.google.devtools.ksp.symbol.KSFile
 import com.google.devtools.ksp.symbol.KSVisitorVoid
 import com.intellij.vim.FileWriter
 import com.intellij.vim.annotations.ExCommand
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
 import kotlin.io.path.Path
 
 class ExCommandProcessor(private val environment: SymbolProcessorEnvironment): SymbolProcessor {
-  companion object {
-    const val comment = """# This file was automatically generated by [com.intellij.vim.processor.EXCommandProcessor].
-# If you are going to change it, you are probably doing something wrong, as your changes will be overridden by the next `gradle kspKotlin` run.
-
-"""
-  }
   private val visitor = EXCommandVisitor()
-  private val writer = FileWriter()
   private val commandToClass = mutableMapOf<String, String>()
 
+  private val json = Json { prettyPrint = true }
+  private val writer = FileWriter()
+
   override fun process(resolver: Resolver): List<KSAnnotated> {
     resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
-    val fileContent = writer.getYAML(comment, commandToClass)
     val filePath = Path(environment.options["generated_directory"]!!, environment.options["ex_commands_file"]!!)
+    val fileContent = json.encodeToString(commandToClass)
     writer.writeFile(filePath, fileContent)
 
     return emptyList()
diff --git a/annotation-processors/src/main/kotlin/com/intellij/vim/processors/VimscriptFunctionProcessor.kt b/annotation-processors/src/main/kotlin/com/intellij/vim/processors/VimscriptFunctionProcessor.kt
index 2771a3f46..ee63e25c0 100644
--- a/annotation-processors/src/main/kotlin/com/intellij/vim/processors/VimscriptFunctionProcessor.kt
+++ b/annotation-processors/src/main/kotlin/com/intellij/vim/processors/VimscriptFunctionProcessor.kt
@@ -19,24 +19,21 @@ import com.google.devtools.ksp.symbol.KSFile
 import com.google.devtools.ksp.symbol.KSVisitorVoid
 import com.intellij.vim.FileWriter
 import com.intellij.vim.annotations.VimscriptFunction
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
 import kotlin.io.path.Path
 
 class VimscriptFunctionProcessor(private val environment: SymbolProcessorEnvironment) : SymbolProcessor {
-  companion object {
-    const val comment = """# This file was automatically generated by [com.intellij.vim.processor.VimscriptFunctionProcessor].
-# If you are going to change it, you are probably doing something wrong, as your changes will be overridden by the next `gradle kspKotlin` run.
-
-"""
-  }
   private val visitor = VimscriptFunctionVisitor()
-  private val writer = FileWriter()
   private val nameToClass = mutableMapOf<String, String>()
-
+  
+  private val json = Json { prettyPrint = true }
+  private val writer = FileWriter()
 
   override fun process(resolver: Resolver): List<KSAnnotated> {
     resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
-    val fileContent = writer.getYAML(comment, nameToClass)
     val filePath = Path(environment.options["generated_directory"]!!, environment.options["vimscript_functions_file"]!!)
+    val fileContent = json.encodeToString(nameToClass)
     writer.writeFile(filePath, fileContent)
 
     return emptyList()
diff --git a/build.gradle.kts b/build.gradle.kts
index 16743f1b5..2efc956cb 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -80,8 +80,8 @@ plugins {
 
 ksp {
   arg("generated_directory", "$projectDir/src/main/resources")
-  arg("vimscript_functions_file", "intellij_vimscript_functions.yaml")
-  arg("ex_commands_file", "intellij_ex_commands.yaml")
+  arg("vimscript_functions_file", "intellij_vimscript_functions.json")
+  arg("ex_commands_file", "intellij_ex_commands.json")
 }
 
 afterEvaluate {
diff --git a/src/main/java/com/maddyhome/idea/vim/vimscript/model/commands/IntellijExCommandProvider.kt b/src/main/java/com/maddyhome/idea/vim/vimscript/model/commands/IntellijExCommandProvider.kt
index 3ab07faaf..69c584245 100644
--- a/src/main/java/com/maddyhome/idea/vim/vimscript/model/commands/IntellijExCommandProvider.kt
+++ b/src/main/java/com/maddyhome/idea/vim/vimscript/model/commands/IntellijExCommandProvider.kt
@@ -9,5 +9,5 @@
 package com.maddyhome.idea.vim.vimscript.model.commands
 
 public object IntellijExCommandProvider : ExCommandProvider {
-  override val exCommandsFileName: String = "intellij_ex_commands.yaml"
+  override val exCommandsFileName: String = "intellij_ex_commands.json"
 }
\ No newline at end of file
diff --git a/src/main/java/com/maddyhome/idea/vim/vimscript/model/functions/IntellijFunctionProvider.kt b/src/main/java/com/maddyhome/idea/vim/vimscript/model/functions/IntellijFunctionProvider.kt
index f79e0f788..3a4f47cea 100644
--- a/src/main/java/com/maddyhome/idea/vim/vimscript/model/functions/IntellijFunctionProvider.kt
+++ b/src/main/java/com/maddyhome/idea/vim/vimscript/model/functions/IntellijFunctionProvider.kt
@@ -9,5 +9,5 @@
 package com.maddyhome.idea.vim.vimscript.model.functions
 
 public object IntellijFunctionProvider : VimscriptFunctionProvider {
-  override val functionListFileName: String = "intellij_vimscript_functions.yaml"
+  override val functionListFileName: String = "intellij_vimscript_functions.json"
 }
\ No newline at end of file
diff --git a/src/main/resources/intellij_ex_commands.json b/src/main/resources/intellij_ex_commands.json
new file mode 100644
index 000000000..ebc23ec8b
--- /dev/null
+++ b/src/main/resources/intellij_ex_commands.json
@@ -0,0 +1,11 @@
+{
+    "actionl[ist]": "com.maddyhome.idea.vim.vimscript.model.commands.ActionListCommand",
+    "b[uffer]": "com.maddyhome.idea.vim.vimscript.model.commands.BufferCommand",
+    "ls": "com.maddyhome.idea.vim.vimscript.model.commands.BufferListCommand",
+    "files": "com.maddyhome.idea.vim.vimscript.model.commands.BufferListCommand",
+    "buffers": "com.maddyhome.idea.vim.vimscript.model.commands.BufferListCommand",
+    "!": "com.maddyhome.idea.vim.vimscript.model.commands.CmdFilterCommand",
+    "g[lobal]": "com.maddyhome.idea.vim.vimscript.model.commands.GlobalCommand",
+    "v[global]": "com.maddyhome.idea.vim.vimscript.model.commands.GlobalCommand",
+    "h[elp]": "com.maddyhome.idea.vim.vimscript.model.commands.HelpCommand"
+}
\ No newline at end of file
diff --git a/src/main/resources/intellij_ex_commands.yaml b/src/main/resources/intellij_ex_commands.yaml
deleted file mode 100644
index 631bb8259..000000000
--- a/src/main/resources/intellij_ex_commands.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-# This file was automatically generated by [com.intellij.vim.processor.EXCommandProcessor].
-# If you are going to change it, you are probably doing something wrong, as your changes will be overridden by the next `gradle kspKotlin` run.
-
-actionl[ist]: com.maddyhome.idea.vim.vimscript.model.commands.ActionListCommand
-b[uffer]: com.maddyhome.idea.vim.vimscript.model.commands.BufferCommand
-ls: com.maddyhome.idea.vim.vimscript.model.commands.BufferListCommand
-files: com.maddyhome.idea.vim.vimscript.model.commands.BufferListCommand
-buffers: com.maddyhome.idea.vim.vimscript.model.commands.BufferListCommand
-'!': com.maddyhome.idea.vim.vimscript.model.commands.CmdFilterCommand
-g[lobal]: com.maddyhome.idea.vim.vimscript.model.commands.GlobalCommand
-v[global]: com.maddyhome.idea.vim.vimscript.model.commands.GlobalCommand
-h[elp]: com.maddyhome.idea.vim.vimscript.model.commands.HelpCommand
diff --git a/src/main/resources/intellij_vimscript_functions.json b/src/main/resources/intellij_vimscript_functions.json
new file mode 100644
index 000000000..ddc74e21f
--- /dev/null
+++ b/src/main/resources/intellij_vimscript_functions.json
@@ -0,0 +1,6 @@
+{
+    "line": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.LineFunctionHandler",
+    "col": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.ColFunctionHandler",
+    "has": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.HasFunctionHandler",
+    "submatch": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.SubmatchFunctionHandler"
+}
\ No newline at end of file
diff --git a/src/main/resources/intellij_vimscript_functions.yaml b/src/main/resources/intellij_vimscript_functions.yaml
deleted file mode 100644
index 3e85112c5..000000000
--- a/src/main/resources/intellij_vimscript_functions.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-# This file was automatically generated by [com.intellij.vim.processor.VimscriptFunctionProcessor].
-# If you are going to change it, you are probably doing something wrong, as your changes will be overridden by the next `gradle kspKotlin` run.
-
-line: com.maddyhome.idea.vim.vimscript.model.functions.handlers.LineFunctionHandler
-col: com.maddyhome.idea.vim.vimscript.model.functions.handlers.ColFunctionHandler
-has: com.maddyhome.idea.vim.vimscript.model.functions.handlers.HasFunctionHandler
-submatch: com.maddyhome.idea.vim.vimscript.model.functions.handlers.SubmatchFunctionHandler
diff --git a/vim-engine/build.gradle.kts b/vim-engine/build.gradle.kts
index e56019960..799712c4d 100644
--- a/vim-engine/build.gradle.kts
+++ b/vim-engine/build.gradle.kts
@@ -22,8 +22,8 @@ repositories {
 
 ksp {
   arg("generated_directory", "$projectDir/src/main/resources")
-  arg("vimscript_functions_file", "engine_vimscript_functions.yaml")
-  arg("ex_commands_file", "engine_ex_commands.yaml")
+  arg("vimscript_functions_file", "engine_vimscript_functions.json")
+  arg("ex_commands_file", "engine_ex_commands.json")
 }
 
 dependencies {
@@ -35,7 +35,7 @@ dependencies {
 
     ksp(project(":annotation-processors"))
     implementation(project(":annotation-processors"))
-    implementation("org.yaml:snakeyaml:2.0")
+    compileOnly("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.5.0")
 }
 
 tasks {
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/EngineExCommandProvider.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/EngineExCommandProvider.kt
index fb08521f9..7e91afce8 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/EngineExCommandProvider.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/EngineExCommandProvider.kt
@@ -9,5 +9,5 @@
 package com.maddyhome.idea.vim.vimscript.model.commands
 
 public object EngineExCommandProvider : ExCommandProvider {
-  override val exCommandsFileName: String = "engine_ex_commands.yaml"
+  override val exCommandsFileName: String = "engine_ex_commands.json"
 }
\ No newline at end of file
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/ExCommandProvider.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/ExCommandProvider.kt
index 8e9d4f4d2..c934ee568 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/ExCommandProvider.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/ExCommandProvider.kt
@@ -8,16 +8,18 @@
 
 package com.maddyhome.idea.vim.vimscript.model.commands
 
-import org.yaml.snakeyaml.Yaml
+import kotlinx.serialization.ExperimentalSerializationApi
+import kotlinx.serialization.json.Json
+import kotlinx.serialization.json.decodeFromStream
 import java.io.InputStream
 
 public interface ExCommandProvider {
   public val exCommandsFileName: String
 
+  @OptIn(ExperimentalSerializationApi::class)
   public fun getCommands(): Map<String, LazyExCommandInstance> {
-    val yaml = Yaml()
     val classLoader = this.javaClass.classLoader
-    val commandToClass: Map<String, String> = yaml.load(getFile())
+    val commandToClass: Map<String, String> = Json.decodeFromStream(getFile())
     return commandToClass.entries.associate { it.key to LazyExCommandInstance(it.value, classLoader) }
   }
 
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/EngineFunctionProvider.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/EngineFunctionProvider.kt
index 4d7b30474..f1c55a2dc 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/EngineFunctionProvider.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/EngineFunctionProvider.kt
@@ -9,5 +9,5 @@
 package com.maddyhome.idea.vim.vimscript.model.functions
 
 public object EngineFunctionProvider : VimscriptFunctionProvider {
-  override val functionListFileName: String = "engine_vimscript_functions.yaml"
+  override val functionListFileName: String = "engine_vimscript_functions.json"
 }
\ No newline at end of file
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/VimscriptFunctionProvider.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/VimscriptFunctionProvider.kt
index 93482a3f7..c77a455d8 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/VimscriptFunctionProvider.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/functions/VimscriptFunctionProvider.kt
@@ -8,16 +8,18 @@
 
 package com.maddyhome.idea.vim.vimscript.model.functions
 
-import org.yaml.snakeyaml.Yaml
+import kotlinx.serialization.ExperimentalSerializationApi
+import kotlinx.serialization.json.Json
+import kotlinx.serialization.json.decodeFromStream
 import java.io.InputStream
 
 public interface VimscriptFunctionProvider {
   public val functionListFileName: String
 
+  @OptIn(ExperimentalSerializationApi::class)
   public fun getFunctions(): Collection<LazyVimscriptFunction> {
-    val yaml = Yaml()
     val classLoader = this.javaClass.classLoader
-    val functionDict: Map<String, String> = yaml.load(getFile())
+    val functionDict: Map<String, String> = Json.decodeFromStream(getFile())
     return functionDict.map { LazyVimscriptFunction(it.key, it.value, classLoader) }
   }
 
diff --git a/vim-engine/src/main/resources/engine_ex_commands.json b/vim-engine/src/main/resources/engine_ex_commands.json
new file mode 100644
index 000000000..eafb2d009
--- /dev/null
+++ b/vim-engine/src/main/resources/engine_ex_commands.json
@@ -0,0 +1,128 @@
+{
+    "action": "com.maddyhome.idea.vim.vimscript.model.commands.ActionCommand",
+    "as[cii]": "com.maddyhome.idea.vim.vimscript.model.commands.AsciiCommand",
+    "bd[elete]": "com.maddyhome.idea.vim.vimscript.model.commands.BufferCloseCommand",
+    "cal[l]": "com.maddyhome.idea.vim.vimscript.model.commands.CallCommand",
+    "comc[lear]": "com.maddyhome.idea.vim.vimscript.model.commands.CmdClearCommand",
+    "com[mand]": "com.maddyhome.idea.vim.vimscript.model.commands.CmdCommand",
+    "t": "com.maddyhome.idea.vim.vimscript.model.commands.CopyTextCommand",
+    "co[py]": "com.maddyhome.idea.vim.vimscript.model.commands.CopyTextCommand",
+    "delc[ommand]": "com.maddyhome.idea.vim.vimscript.model.commands.DelCmdCommand",
+    "d[elete]": "com.maddyhome.idea.vim.vimscript.model.commands.DeleteLinesCommand",
+    "delm[arks]": "com.maddyhome.idea.vim.vimscript.model.commands.DeleteMarksCommand",
+    "delf[unction]": "com.maddyhome.idea.vim.vimscript.model.commands.DelfunctionCommand",
+    "dig[raphs]": "com.maddyhome.idea.vim.vimscript.model.commands.DigraphCommand",
+    "dump[line]": "com.maddyhome.idea.vim.vimscript.model.commands.DumpLineCommand",
+    "ec[ho]": "com.maddyhome.idea.vim.vimscript.model.commands.EchoCommand",
+    "e[dit]": "com.maddyhome.idea.vim.vimscript.model.commands.EditFileCommand",
+    "bro[wse]": "com.maddyhome.idea.vim.vimscript.model.commands.EditFileCommand",
+    "exe[cute]": "com.maddyhome.idea.vim.vimscript.model.commands.ExecuteCommand",
+    "qa[ll]": "com.maddyhome.idea.vim.vimscript.model.commands.ExitCommand",
+    "xa[ll]": "com.maddyhome.idea.vim.vimscript.model.commands.ExitCommand",
+    "wqa[ll]": "com.maddyhome.idea.vim.vimscript.model.commands.ExitCommand",
+    "quita[ll]": "com.maddyhome.idea.vim.vimscript.model.commands.ExitCommand",
+    "f[ile]": "com.maddyhome.idea.vim.vimscript.model.commands.FileCommand",
+    "cla[ss]": "com.maddyhome.idea.vim.vimscript.model.commands.FindClassCommand",
+    "fin[d]": "com.maddyhome.idea.vim.vimscript.model.commands.FindFileCommand",
+    "sym[bol]": "com.maddyhome.idea.vim.vimscript.model.commands.FindSymbolCommand",
+    "go[to]": "com.maddyhome.idea.vim.vimscript.model.commands.GotoCharacterCommand",
+    "his[tory]": "com.maddyhome.idea.vim.vimscript.model.commands.HistoryCommand",
+    "j[oin]": "com.maddyhome.idea.vim.vimscript.model.commands.JoinLinesCommand",
+    "ju[mps]": "com.maddyhome.idea.vim.vimscript.model.commands.JumpsCommand",
+    "let": "com.maddyhome.idea.vim.vimscript.model.commands.LetCommand",
+    "lockv[ar]": "com.maddyhome.idea.vim.vimscript.model.commands.LockVarCommand",
+    "unlo[ckvar]": "com.maddyhome.idea.vim.vimscript.model.commands.UnlockVarCommand",
+    "k": "com.maddyhome.idea.vim.vimscript.model.commands.MarkCommand",
+    "ma[rk]": "com.maddyhome.idea.vim.vimscript.model.commands.MarkCommand",
+    "marks": "com.maddyhome.idea.vim.vimscript.model.commands.MarksCommand",
+    "m[ove]": "com.maddyhome.idea.vim.vimscript.model.commands.MoveTextCommand",
+    "n[ext]": "com.maddyhome.idea.vim.vimscript.model.commands.NextFileCommand",
+    "bn[ext]": "com.maddyhome.idea.vim.vimscript.model.commands.NextFileCommand",
+    "tabn[ext]": "com.maddyhome.idea.vim.vimscript.model.commands.NextTabCommand",
+    "noh[lsearch]": "com.maddyhome.idea.vim.vimscript.model.commands.NoHLSearchCommand",
+    "norm[al]": "com.maddyhome.idea.vim.vimscript.model.commands.NormalCommand",
+    "on[ly]": "com.maddyhome.idea.vim.vimscript.model.commands.OnlyCommand",
+    "pa[ckadd]": "com.maddyhome.idea.vim.vimscript.model.commands.PackaddCommand",
+    "Plug[in]": "com.maddyhome.idea.vim.vimscript.model.commands.PlugCommand",
+    "prev[ious]": "com.maddyhome.idea.vim.vimscript.model.commands.PreviousFileCommand",
+    "bp[revious]": "com.maddyhome.idea.vim.vimscript.model.commands.PreviousFileCommand",
+    "N[ext]": "com.maddyhome.idea.vim.vimscript.model.commands.PreviousFileCommand",
+    "tabp[previous]": "com.maddyhome.idea.vim.vimscript.model.commands.PreviousTabCommand",
+    "tabN[ext]": "com.maddyhome.idea.vim.vimscript.model.commands.PreviousTabCommand",
+    "p[rint]": "com.maddyhome.idea.vim.vimscript.model.commands.PrintCommand",
+    "P[rint]": "com.maddyhome.idea.vim.vimscript.model.commands.PrintCommand",
+    "pro[mptfind]": "com.maddyhome.idea.vim.vimscript.model.commands.PromptFindCommand",
+    "promptr[eplace]": "com.maddyhome.idea.vim.vimscript.model.commands.PromptReplaceCommand",
+    "pu[t]": "com.maddyhome.idea.vim.vimscript.model.commands.PutLinesCommand",
+    "q[uit]": "com.maddyhome.idea.vim.vimscript.model.commands.QuitCommand",
+    "clo[se]": "com.maddyhome.idea.vim.vimscript.model.commands.QuitCommand",
+    "hi[de]": "com.maddyhome.idea.vim.vimscript.model.commands.QuitCommand",
+    "red[o]": "com.maddyhome.idea.vim.vimscript.model.commands.RedoCommand",
+    "dis[play]": "com.maddyhome.idea.vim.vimscript.model.commands.RegistersCommand",
+    "reg[isters]": "com.maddyhome.idea.vim.vimscript.model.commands.RegistersCommand",
+    "@": "com.maddyhome.idea.vim.vimscript.model.commands.RepeatCommand",
+    "argu[ment]": "com.maddyhome.idea.vim.vimscript.model.commands.SelectFileCommand",
+    "fir[st]": "com.maddyhome.idea.vim.vimscript.model.commands.SelectFirstFileCommand",
+    "la[st]": "com.maddyhome.idea.vim.vimscript.model.commands.SelectLastFileCommand",
+    "se[t]": "com.maddyhome.idea.vim.vimscript.model.commands.SetCommand",
+    "setl[ocal]": "com.maddyhome.idea.vim.vimscript.model.commands.SetLocalCommand",
+    "sethandler": "com.maddyhome.idea.vim.vimscript.model.commands.SetHandlerCommand",
+    "sh[ell]": "com.maddyhome.idea.vim.vimscript.model.commands.ShellCommand",
+    "sor[t]": "com.maddyhome.idea.vim.vimscript.model.commands.SortCommand",
+    "so[urce]": "com.maddyhome.idea.vim.vimscript.model.commands.SourceCommand",
+    "sp[lit]": "com.maddyhome.idea.vim.vimscript.model.commands.SplitCommand",
+    "vs[plit]": "com.maddyhome.idea.vim.vimscript.model.commands.SplitCommand",
+    "~": "com.maddyhome.idea.vim.vimscript.model.commands.SubstituteCommand",
+    "&": "com.maddyhome.idea.vim.vimscript.model.commands.SubstituteCommand",
+    "s[ubstitute]": "com.maddyhome.idea.vim.vimscript.model.commands.SubstituteCommand",
+    "tabc[lose]": "com.maddyhome.idea.vim.vimscript.model.commands.TabCloseCommand",
+    "tabm[ove]": "com.maddyhome.idea.vim.vimscript.model.commands.TabMoveCommand",
+    "tabo[nly]": "com.maddyhome.idea.vim.vimscript.model.commands.TabOnlyCommand",
+    "u[ndo]": "com.maddyhome.idea.vim.vimscript.model.commands.UndoCommand",
+    "wa[ll]": "com.maddyhome.idea.vim.vimscript.model.commands.WriteAllCommand",
+    "w[rite]": "com.maddyhome.idea.vim.vimscript.model.commands.WriteCommand",
+    "wn[ext]": "com.maddyhome.idea.vim.vimscript.model.commands.WriteNextFileCommand",
+    "wp[revious]": "com.maddyhome.idea.vim.vimscript.model.commands.WritePreviousFileCommand",
+    "wN[ext]": "com.maddyhome.idea.vim.vimscript.model.commands.WritePreviousFileCommand",
+    "wq": "com.maddyhome.idea.vim.vimscript.model.commands.WriteQuitCommand",
+    "x[it]": "com.maddyhome.idea.vim.vimscript.model.commands.WriteQuitCommand",
+    "exi[t]": "com.maddyhome.idea.vim.vimscript.model.commands.WriteQuitCommand",
+    "y[ank]": "com.maddyhome.idea.vim.vimscript.model.commands.YankLinesCommand",
+    "mapc[lear]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand",
+    "nmapc[lear]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand",
+    "vmapc[lear]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand",
+    "xmapc[lear]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand",
+    "smapc[lear]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand",
+    "omapc[lear]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand",
+    "imapc[lear]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand",
+    "lmapc[lear]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand",
+    "cmapc[lear]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand",
+    "map": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "nm[ap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "vm[ap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "xm[ap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "smap": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "om[ap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "im[ap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "lm[ap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "cm[ap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "no[map]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "nn[oremap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "vn[oremap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "xn[oremap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "snor[emap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "ono[remap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "no[remap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "ino[remap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "ln[oremap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "cno[remap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand",
+    "unm[ap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand",
+    "nun[map]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand",
+    "vu[nmap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand",
+    "xu[nmap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand",
+    "sunm[ap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand",
+    "ou[nmap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand",
+    "iu[nmap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand",
+    "lu[nmap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand",
+    "cu[nmap]": "com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand"
+}
\ No newline at end of file
diff --git a/vim-engine/src/main/resources/engine_ex_commands.yaml b/vim-engine/src/main/resources/engine_ex_commands.yaml
deleted file mode 100644
index 27d6407c8..000000000
--- a/vim-engine/src/main/resources/engine_ex_commands.yaml
+++ /dev/null
@@ -1,129 +0,0 @@
-# This file was automatically generated by [com.intellij.vim.processor.EXCommandProcessor].
-# If you are going to change it, you are probably doing something wrong, as your changes will be overridden by the next `gradle kspKotlin` run.
-
-action: com.maddyhome.idea.vim.vimscript.model.commands.ActionCommand
-as[cii]: com.maddyhome.idea.vim.vimscript.model.commands.AsciiCommand
-bd[elete]: com.maddyhome.idea.vim.vimscript.model.commands.BufferCloseCommand
-cal[l]: com.maddyhome.idea.vim.vimscript.model.commands.CallCommand
-comc[lear]: com.maddyhome.idea.vim.vimscript.model.commands.CmdClearCommand
-com[mand]: com.maddyhome.idea.vim.vimscript.model.commands.CmdCommand
-t: com.maddyhome.idea.vim.vimscript.model.commands.CopyTextCommand
-co[py]: com.maddyhome.idea.vim.vimscript.model.commands.CopyTextCommand
-delc[ommand]: com.maddyhome.idea.vim.vimscript.model.commands.DelCmdCommand
-d[elete]: com.maddyhome.idea.vim.vimscript.model.commands.DeleteLinesCommand
-delm[arks]: com.maddyhome.idea.vim.vimscript.model.commands.DeleteMarksCommand
-delf[unction]: com.maddyhome.idea.vim.vimscript.model.commands.DelfunctionCommand
-dig[raphs]: com.maddyhome.idea.vim.vimscript.model.commands.DigraphCommand
-dump[line]: com.maddyhome.idea.vim.vimscript.model.commands.DumpLineCommand
-ec[ho]: com.maddyhome.idea.vim.vimscript.model.commands.EchoCommand
-e[dit]: com.maddyhome.idea.vim.vimscript.model.commands.EditFileCommand
-bro[wse]: com.maddyhome.idea.vim.vimscript.model.commands.EditFileCommand
-exe[cute]: com.maddyhome.idea.vim.vimscript.model.commands.ExecuteCommand
-qa[ll]: com.maddyhome.idea.vim.vimscript.model.commands.ExitCommand
-xa[ll]: com.maddyhome.idea.vim.vimscript.model.commands.ExitCommand
-wqa[ll]: com.maddyhome.idea.vim.vimscript.model.commands.ExitCommand
-quita[ll]: com.maddyhome.idea.vim.vimscript.model.commands.ExitCommand
-f[ile]: com.maddyhome.idea.vim.vimscript.model.commands.FileCommand
-cla[ss]: com.maddyhome.idea.vim.vimscript.model.commands.FindClassCommand
-fin[d]: com.maddyhome.idea.vim.vimscript.model.commands.FindFileCommand
-sym[bol]: com.maddyhome.idea.vim.vimscript.model.commands.FindSymbolCommand
-go[to]: com.maddyhome.idea.vim.vimscript.model.commands.GotoCharacterCommand
-his[tory]: com.maddyhome.idea.vim.vimscript.model.commands.HistoryCommand
-j[oin]: com.maddyhome.idea.vim.vimscript.model.commands.JoinLinesCommand
-ju[mps]: com.maddyhome.idea.vim.vimscript.model.commands.JumpsCommand
-let: com.maddyhome.idea.vim.vimscript.model.commands.LetCommand
-lockv[ar]: com.maddyhome.idea.vim.vimscript.model.commands.LockVarCommand
-unlo[ckvar]: com.maddyhome.idea.vim.vimscript.model.commands.UnlockVarCommand
-k: com.maddyhome.idea.vim.vimscript.model.commands.MarkCommand
-ma[rk]: com.maddyhome.idea.vim.vimscript.model.commands.MarkCommand
-marks: com.maddyhome.idea.vim.vimscript.model.commands.MarksCommand
-m[ove]: com.maddyhome.idea.vim.vimscript.model.commands.MoveTextCommand
-n[ext]: com.maddyhome.idea.vim.vimscript.model.commands.NextFileCommand
-bn[ext]: com.maddyhome.idea.vim.vimscript.model.commands.NextFileCommand
-tabn[ext]: com.maddyhome.idea.vim.vimscript.model.commands.NextTabCommand
-noh[lsearch]: com.maddyhome.idea.vim.vimscript.model.commands.NoHLSearchCommand
-norm[al]: com.maddyhome.idea.vim.vimscript.model.commands.NormalCommand
-on[ly]: com.maddyhome.idea.vim.vimscript.model.commands.OnlyCommand
-pa[ckadd]: com.maddyhome.idea.vim.vimscript.model.commands.PackaddCommand
-Plug[in]: com.maddyhome.idea.vim.vimscript.model.commands.PlugCommand
-prev[ious]: com.maddyhome.idea.vim.vimscript.model.commands.PreviousFileCommand
-bp[revious]: com.maddyhome.idea.vim.vimscript.model.commands.PreviousFileCommand
-N[ext]: com.maddyhome.idea.vim.vimscript.model.commands.PreviousFileCommand
-tabp[previous]: com.maddyhome.idea.vim.vimscript.model.commands.PreviousTabCommand
-tabN[ext]: com.maddyhome.idea.vim.vimscript.model.commands.PreviousTabCommand
-p[rint]: com.maddyhome.idea.vim.vimscript.model.commands.PrintCommand
-P[rint]: com.maddyhome.idea.vim.vimscript.model.commands.PrintCommand
-pro[mptfind]: com.maddyhome.idea.vim.vimscript.model.commands.PromptFindCommand
-promptr[eplace]: com.maddyhome.idea.vim.vimscript.model.commands.PromptReplaceCommand
-pu[t]: com.maddyhome.idea.vim.vimscript.model.commands.PutLinesCommand
-q[uit]: com.maddyhome.idea.vim.vimscript.model.commands.QuitCommand
-clo[se]: com.maddyhome.idea.vim.vimscript.model.commands.QuitCommand
-hi[de]: com.maddyhome.idea.vim.vimscript.model.commands.QuitCommand
-red[o]: com.maddyhome.idea.vim.vimscript.model.commands.RedoCommand
-dis[play]: com.maddyhome.idea.vim.vimscript.model.commands.RegistersCommand
-reg[isters]: com.maddyhome.idea.vim.vimscript.model.commands.RegistersCommand
-'@': com.maddyhome.idea.vim.vimscript.model.commands.RepeatCommand
-argu[ment]: com.maddyhome.idea.vim.vimscript.model.commands.SelectFileCommand
-fir[st]: com.maddyhome.idea.vim.vimscript.model.commands.SelectFirstFileCommand
-la[st]: com.maddyhome.idea.vim.vimscript.model.commands.SelectLastFileCommand
-se[t]: com.maddyhome.idea.vim.vimscript.model.commands.SetCommand
-setl[ocal]: com.maddyhome.idea.vim.vimscript.model.commands.SetLocalCommand
-sethandler: com.maddyhome.idea.vim.vimscript.model.commands.SetHandlerCommand
-sh[ell]: com.maddyhome.idea.vim.vimscript.model.commands.ShellCommand
-sor[t]: com.maddyhome.idea.vim.vimscript.model.commands.SortCommand
-so[urce]: com.maddyhome.idea.vim.vimscript.model.commands.SourceCommand
-sp[lit]: com.maddyhome.idea.vim.vimscript.model.commands.SplitCommand
-vs[plit]: com.maddyhome.idea.vim.vimscript.model.commands.SplitCommand
-'~': com.maddyhome.idea.vim.vimscript.model.commands.SubstituteCommand
-'&': com.maddyhome.idea.vim.vimscript.model.commands.SubstituteCommand
-s[ubstitute]: com.maddyhome.idea.vim.vimscript.model.commands.SubstituteCommand
-tabc[lose]: com.maddyhome.idea.vim.vimscript.model.commands.TabCloseCommand
-tabm[ove]: com.maddyhome.idea.vim.vimscript.model.commands.TabMoveCommand
-tabo[nly]: com.maddyhome.idea.vim.vimscript.model.commands.TabOnlyCommand
-u[ndo]: com.maddyhome.idea.vim.vimscript.model.commands.UndoCommand
-wa[ll]: com.maddyhome.idea.vim.vimscript.model.commands.WriteAllCommand
-w[rite]: com.maddyhome.idea.vim.vimscript.model.commands.WriteCommand
-wn[ext]: com.maddyhome.idea.vim.vimscript.model.commands.WriteNextFileCommand
-wp[revious]: com.maddyhome.idea.vim.vimscript.model.commands.WritePreviousFileCommand
-wN[ext]: com.maddyhome.idea.vim.vimscript.model.commands.WritePreviousFileCommand
-wq: com.maddyhome.idea.vim.vimscript.model.commands.WriteQuitCommand
-x[it]: com.maddyhome.idea.vim.vimscript.model.commands.WriteQuitCommand
-exi[t]: com.maddyhome.idea.vim.vimscript.model.commands.WriteQuitCommand
-y[ank]: com.maddyhome.idea.vim.vimscript.model.commands.YankLinesCommand
-mapc[lear]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand
-nmapc[lear]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand
-vmapc[lear]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand
-xmapc[lear]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand
-smapc[lear]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand
-omapc[lear]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand
-imapc[lear]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand
-lmapc[lear]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand
-cmapc[lear]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapClearCommand
-map: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-nm[ap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-vm[ap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-xm[ap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-smap: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-om[ap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-im[ap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-lm[ap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-cm[ap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-no[map]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-nn[oremap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-vn[oremap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-xn[oremap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-snor[emap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-ono[remap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-no[remap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-ino[remap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-ln[oremap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-cno[remap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.MapCommand
-unm[ap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand
-nun[map]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand
-vu[nmap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand
-xu[nmap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand
-sunm[ap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand
-ou[nmap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand
-iu[nmap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand
-lu[nmap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand
-cu[nmap]: com.maddyhome.idea.vim.vimscript.model.commands.mapping.UnMapCommand
diff --git a/vim-engine/src/main/resources/engine_vimscript_functions.json b/vim-engine/src/main/resources/engine_vimscript_functions.json
new file mode 100644
index 000000000..f598762a1
--- /dev/null
+++ b/vim-engine/src/main/resources/engine_vimscript_functions.json
@@ -0,0 +1,14 @@
+{
+    "abs": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.AbsFunctionHandler",
+    "empty": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.EmptyFunctionHandler",
+    "exists": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.ExistsFunctionHandler",
+    "function": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.FunctionFunctionHandler",
+    "funcref": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.FuncrefFunctionHandler",
+    "get": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.GetFunctionHandler",
+    "join": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.JoinFunctionHandler",
+    "len": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.LenFunctionHandler",
+    "sin": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.SinFunctionHandler",
+    "split": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.SplitFunctionHandler",
+    "tolower": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.TolowerFunctionHandler",
+    "toupper": "com.maddyhome.idea.vim.vimscript.model.functions.handlers.ToupperFunctionHandler"
+}
\ No newline at end of file
diff --git a/vim-engine/src/main/resources/engine_vimscript_functions.yaml b/vim-engine/src/main/resources/engine_vimscript_functions.yaml
deleted file mode 100644
index 0b7cc08f0..000000000
--- a/vim-engine/src/main/resources/engine_vimscript_functions.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-# This file was automatically generated by [com.intellij.vim.processor.VimscriptFunctionProcessor].
-# If you are going to change it, you are probably doing something wrong, as your changes will be overridden by the next `gradle kspKotlin` run.
-
-abs: com.maddyhome.idea.vim.vimscript.model.functions.handlers.AbsFunctionHandler
-empty: com.maddyhome.idea.vim.vimscript.model.functions.handlers.EmptyFunctionHandler
-exists: com.maddyhome.idea.vim.vimscript.model.functions.handlers.ExistsFunctionHandler
-function: com.maddyhome.idea.vim.vimscript.model.functions.handlers.FunctionFunctionHandler
-funcref: com.maddyhome.idea.vim.vimscript.model.functions.handlers.FuncrefFunctionHandler
-get: com.maddyhome.idea.vim.vimscript.model.functions.handlers.GetFunctionHandler
-join: com.maddyhome.idea.vim.vimscript.model.functions.handlers.JoinFunctionHandler
-len: com.maddyhome.idea.vim.vimscript.model.functions.handlers.LenFunctionHandler
-sin: com.maddyhome.idea.vim.vimscript.model.functions.handlers.SinFunctionHandler
-split: com.maddyhome.idea.vim.vimscript.model.functions.handlers.SplitFunctionHandler
-tolower: com.maddyhome.idea.vim.vimscript.model.functions.handlers.TolowerFunctionHandler
-toupper: com.maddyhome.idea.vim.vimscript.model.functions.handlers.ToupperFunctionHandler