首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Vim中的remap、noremap、nnoremap和vnoremap映射命令之间有什么区别?

Vim中的remap、noremap、nnoremap和vnoremap映射命令之间有什么区别?
EN

Stack Overflow用户
提问于 2010-09-23 07:13:30
回答 4查看 287.2K关注 0票数 1.4K

remapnoremapnnoremapvnoremap映射命令在Vim中有什么区别?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-23 07:24:15

remap是一个使映射递归工作的选项。默认情况下,它是开着的,我建议您这样做。其余的是映射命令,如下所述:

:map:noremap是各种映射命令的、递归、:noremap版本。例如,如果我们运行:

代码语言:javascript
运行
复制
: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)中工作的。

有关这方面的更多指导,请参见:

代码语言:javascript
运行
复制
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
票数 2K
EN

Stack Overflow用户

发布于 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”伪模式)

递归”是指将映射展开为结果,然后将结果展开为另一个结果,依此类推。

当其中一个是真的时,扩展就停止了:

  1. 结果不再映射到其他任何东西。
  2. 已经应用了非递归映射(即"noremap“或其同类之一是最终的扩展)。

在这一点上,Vim的最终结果的默认“意思”被应用/执行。

"Non-recursive“意味着映射只展开一次,并且应用/执行该结果。

示例:

代码语言:javascript
运行
复制
 nmap K H
 nnoremap H G
 nnoremap G gg

以上原因导致K扩展到H,然后H扩展到G和stop。因为nnoremap,它就停止了,它会立即膨胀和停止。G的含义将被执行(即“跳转到最后一行”)。最多只能在扩展链中应用一次非递归映射(这将是最后一次进行扩展)。

Ggg的映射仅适用于按G,而不适用于按K。无论K是否递归映射,此映射都不会影响按下G,因为导致K扩展停止的是第2行,因此不会使用第3行。

票数 374
EN

Stack Overflow用户

发布于 2014-01-22 12:03:08

一个不同之处是:

  • :map nvo == normal + (visual + select) +运算符挂起
  • :map! ic ==插入+命令行模式

help map-modes表中所述。

因此:map 并不能映射到所有模式()。

要映射到所有模式,您需要同时使用:map:map!

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3776117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档