diff --git a/src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands/MapCommandTest.kt b/src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands/MapCommandTest.kt
index 73fe66cc1..c4d06de69 100644
--- a/src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands/MapCommandTest.kt
+++ b/src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands/MapCommandTest.kt
@@ -124,12 +124,12 @@ class MapCommandTest : VimTestCase() {
   }
 
   private fun addTestMaps() {
-    // TODO: Support smap and lmap
+    // TODO: Support lmap
     enterCommand("map all foo") // NVO
     enterCommand("nmap normal foo")
     enterCommand("imap insert foo")
     enterCommand("vmap visual+select foo")  // V -> Visual+Select
-//    enterCommand("smap select foo") // TODO: Support smap
+    enterCommand("smap select foo")
     enterCommand("xmap visual foo")
     enterCommand("omap op-pending foo")
     enterCommand("map! insert+cmdline foo") // IC
@@ -151,6 +151,7 @@ class MapCommandTest : VimTestCase() {
         |   all           foo
         |n  normal        foo
         |o  op-pending    foo
+        |s  select        foo
         |x  visual        foo
         |v  visual+select   foo
       """.trimMargin()
@@ -182,6 +183,7 @@ class MapCommandTest : VimTestCase() {
     assertExOutput(
       """
         |   all           foo
+        |s  select        foo
         |x  visual        foo
         |v  visual+select   foo
       """.trimMargin()
@@ -189,7 +191,6 @@ class MapCommandTest : VimTestCase() {
   }
 
   @Test
-  @Disabled("smap not yet supported")
   fun `test output of smap shows maps for Select mode`() {
     configureByText("\n")
     addTestMaps()
@@ -320,6 +321,7 @@ class MapCommandTest : VimTestCase() {
         |noxall           foo
         |n  normal        foo
         |o  op-pending    foo
+        |s  select        foo
         |x  visual        foo
         |v  visual+select   foo
       """.trimMargin()
@@ -339,6 +341,7 @@ class MapCommandTest : VimTestCase() {
         |no all           foo
         |n  normal        foo
         |o  op-pending    foo
+        |s  select        foo
         |x  visual        foo
         |v  visual+select   foo
       """.trimMargin()
diff --git a/vim-engine/src/main/antlr/Vimscript.g4 b/vim-engine/src/main/antlr/Vimscript.g4
index fd6ec92ad..f878d404f 100644
--- a/vim-engine/src/main/antlr/Vimscript.g4
+++ b/vim-engine/src/main/antlr/Vimscript.g4
@@ -692,6 +692,7 @@ MAP_CLEAR:              ('mapc' | 'nmapc' | 'vmapc' | 'xmapc' | 'smapc' | 'omapc
                     |   (('mapc' | 'nmapc' | 'vmapc' | 'xmapc' | 'smapc' | 'omapc' | 'imapc' | 'cmapc') 'lea')
                     |   (('mapc' | 'nmapc' | 'vmapc' | 'xmapc' | 'smapc' | 'omapc' | 'imapc' | 'cmapc') 'lear');
 MAP:                    'map'
+                    |   'smap'
                     |   'nm' | 'vm' | 'xm' | 'om' | 'im' | 'cm'
                     |   (('nm' | 'vm' | 'xm' | 'om' | 'im' | 'cm') 'a')
                     |   (('nm' | 'vm' | 'xm' | 'om' | 'im' | 'cm') 'ap')
@@ -701,7 +702,8 @@ MAP:                    'map'
                     |   (('no' | 'nno' | 'vno' | 'xno' | 'ono' | 'ino' | 'cno') 're')
                     |   (('no' | 'nno' | 'vno' | 'xno' | 'ono' | 'ino' | 'cno') 'rem')
                     |   (('no' | 'nno' | 'vno' | 'xno' | 'ono' | 'ino' | 'cno') 'rema')
-                    |   (('no' | 'nno' | 'vno' | 'xno' | 'ono' | 'ino' | 'cno') 'remap');
+                    |   (('no' | 'nno' | 'vno' | 'xno' | 'ono' | 'ino' | 'cno') 'remap')
+                    |   ('snor' | 'snore' | 'snorem' | 'snorema' | 'snoremap');
 UNMAP:                  'unm' | 'nun' | 'vu' | 'xu' | 'sunm' | 'ou' | 'iu' | 'cu'
                     |   'vun' | 'xun' | 'oun' | 'iun' | 'cun'
                     |   'nunm' | 'vunm' | 'xunm' | 'ounm' | 'iunm' | 'cunm'
diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/mapping/MapCommand.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/mapping/MapCommand.kt
index 084553b59..449325bae 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/mapping/MapCommand.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/mapping/MapCommand.kt
@@ -148,22 +148,24 @@ data class MapCommand(val range: Range, val cmd: String, val modifier: CommandMo
 
   companion object {
     private val COMMAND_INFOS = arrayOf(
-      // TODO: Support smap, lmap
+      // TODO: Support lmap
       CommandInfo("map", "", MappingMode.NVO, true),
       CommandInfo("map", "", MappingMode.IC, true, bang = true),
       CommandInfo("nm", "ap", MappingMode.N, true),
       CommandInfo("vm", "ap", MappingMode.V, true),
       CommandInfo("xm", "ap", MappingMode.X, true),
+      CommandInfo("smap", "", MappingMode.S, true),
       CommandInfo("om", "ap", MappingMode.O, true),
       CommandInfo("im", "ap", MappingMode.I, true),
       CommandInfo("cm", "ap", MappingMode.C, true),
 
-      // TODO: Support snoremap, noremap!, lnoremap
+      // TODO: Support lnoremap
       CommandInfo("no", "remap", MappingMode.NVO, false),
       CommandInfo("no", "remap", MappingMode.IC, false, bang = true),
       CommandInfo("nn", "oremap", MappingMode.N, false),
       CommandInfo("vn", "oremap", MappingMode.V, false),
       CommandInfo("xn", "oremap", MappingMode.X, false),
+      CommandInfo("snor", "emap", MappingMode.S, false),
       CommandInfo("ono", "remap", MappingMode.O, false),
       CommandInfo("ino", "remap", MappingMode.I, false),
       CommandInfo("cno", "remap", MappingMode.C, false),