1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-05-17 15:34:04 +02:00

Implement smap and snoremap

Support for sunmap and smapclear already exists, and vmap would introduce a Select mode map.

Fixes VIM-2260
This commit is contained in:
Matt Ellis 2024-11-05 23:05:28 +00:00 committed by Alex Pláte
parent 5fc4462b03
commit 976771d11a
3 changed files with 13 additions and 6 deletions
src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands
vim-engine/src/main
antlr
kotlin/com/maddyhome/idea/vim/vimscript/model/commands/mapping

View File

@ -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()

View File

@ -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'

View File

@ -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),