remap
、noremap
、nnoremap
和vnoremap
映射命令在Vim中有什么区别?
发布于 2010-09-23 07:24:15
remap
是一个使映射递归工作的选项。默认情况下,它是开着的,我建议您这样做。其余的是映射命令,如下所述:
:map
和:noremap
是各种映射命令的、递归、和:noremap
版本。例如,如果我们运行:
:map j gg (moves cursor to first line)
:map Q j (moves cursor to first line)
:noremap W j (moves cursor down one line)
然后:
j
将映射到gg
。Q
也将映射到gg
,因为j
将被扩展为递归映射。W
将映射到j
(而不是gg
),因为非递归映射不会扩展j
。现在请记住,Vim是一个模式编辑器。它有普通模式、可视模式和其他模式。
对于每一组映射,都有一个在正常、可视、选择和运算符模式(:map
和:noremap
)中工作的:map
,一个在正常模式(:nmap
和:nnoremap
)中工作的,一个在可视模式(:vmap
和:vnoremap
)中工作的。
有关这方面的更多指导,请参见:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
发布于 2012-07-26 19:00:13
我认为Vim文档应该解释了命名这些命令的意义。告诉你他们做什么并不能帮你记住名字。
map
是所有递归映射命令的“根”。根表单适用于“普通”、"visual+select“和”运算符挂起“模式。(我用的是“根”一词,就像在语言学中那样
noremap
是所有非递归映射命令的“根”。根表单适用于与map
相同的模式。(考虑一下nore
前缀,意思是“非递归”)。
(请注意,也有适用于insert &命令行的!
模式,如map!
。)
有关“递归”在此上下文中的含义,请参见下文。
在像n
这样的模式字母前修改映射工作的模式。它可以选择适用模式列表的子集(例如,仅“可视”),也可以选择map
不适用的其他模式(例如“插入”)。
使用help map-modes
将向您展示几个表,这些表将解释如何控制映射应用于哪些模式。
模式字母:
n
:仅正常v
:可视化并选择o
:操作员-挂起x
:仅限于视觉s
:只选择i
:插入c
:命令行l
:插入,命令行,regexp-搜索(和其他.统称为“Lang”伪模式)“递归”是指将映射展开为结果,然后将结果展开为另一个结果,依此类推。
当其中一个是真的时,扩展就停止了:
在这一点上,Vim的最终结果的默认“意思”被应用/执行。
"Non-recursive“意味着映射只展开一次,并且应用/执行该结果。
示例:
nmap K H
nnoremap H G
nnoremap G gg
以上原因导致K
扩展到H
,然后H
扩展到G
和stop。因为nnoremap
,它就停止了,它会立即膨胀和停止。G
的含义将被执行(即“跳转到最后一行”)。最多只能在扩展链中应用一次非递归映射(这将是最后一次进行扩展)。
G
到gg
的映射仅适用于按G
,而不适用于按K
。无论K
是否递归映射,此映射都不会影响按下G
,因为导致K
扩展停止的是第2行,因此不会使用第3行。
发布于 2014-01-22 12:03:08
一个不同之处是:
:map
nvo
== normal + (visual + select) +运算符挂起:map!
ic
==插入+命令行模式如help map-modes
表中所述。
因此:map
并不能映射到所有模式()。
要映射到所有模式,您需要同时使用:map
和:map!
。
https://stackoverflow.com/questions/3776117
复制相似问题