vim中的remap,noremap,nnoremap和vnoremap映射命令有什么区别?

vim中的remap,noremap,nnoremap和vnoremap映射命令有什么区别?


remap是使映射以递归方式工作的选项 。 默认情况下它是开启的,我建议你离开它。 其余的是映射命令 ,如下所述:

:map:noremap是各种映射命令的递归非递归版本。 这意味着如果你这样做:

:map j gg
:map Q j
:noremap W j

j将被映射到ggQ也将被映射到gg ,因为j将被扩展用于递归映射。 W将被映射到j (而不是gg ),因为对于非递归映射j不会被扩展。

现在请记住Vim是一个模态编辑器 。 它具有正常模式, 可视模式和其他模式。

对于这些映射集合中的每一个,都有一个映射可以在普通模式,可视模式,选择模式和运算符模式下工作( :map:noremap ),一种以普通模式( :nmap:nnoremap )工作,一种以可视模式:vmap:vnoremap )等等。

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

:help :map
:help :noremap
:help recursive_mapping
:help :map-modes

我认为vim文档应该解释这些命令命名背后的含义。 只是告诉你他们做了什么并不能帮助你记住名字。

map是所有递归映射命令的“根”。 根表格适用于“正常”,“视觉+选择”和“操作员未决”模式。 (我在语言学中使用术语“根”。)

noremap是所有非递归映射命令的“根”。 根表格适用于与map相同的模式。 (认为nore前缀意思是“非递归”。)

(请注意,也有像map!这样的!模式适用于插入和命令行。)

请参阅下面的“递归”在这种情况下的含义。

n这样的模式字母可以修改映射工作的模式。它可以选择适用模式列表的一个子集(例如,只有“可视化”),或者选择其他map不适用的模式(例如“插入”) 。

使用help map-modes将向您显示一些表格,解释如何控制地图适用的模式。

模式字母:

  • n :只有正常
  • v :可视化和选择
  • o :运营商未决
  • x :仅限视觉
  • s :只选择
  • i :插入
  • c :命令行
  • l :insert,command-line,regexp-search(及其他,统称为“Lang-Arg”伪模式)
  • 递归 ”意味着映射被扩展为结果,然后结果被扩展为另一个结果,依此类推。

    当其中一种情况属实时,扩展会停止:

  • 结果不再映射到其他任何东西。
  • 已经应用了非递归映射(即,“noremap”[或其一个类似]是最后的扩展)。
  • 在这一点上,应用/执行vim的最终结果的默认“含义”。

    非递归 ”意味着映射只扩展一次,并且结果被应用/执行。

    例:

     nmap K H
     nnoremap H G
     nnoremap G gg
    

    以上导致K扩展到H ,然后H扩展到G并停止。 它会因为nnoremap而停止,该nnoremap会立即扩展并停止。 G的含义将被执行(即“跳到最后一行”)。 最多只有一个非递归映射将应用在扩展链中(这将是最后一次扩展)。

    Ggg的映射仅适用于按G ,但如果按K则不适用。 这个映射不影响按K ,不管G是否递归映射,因为它是第2行,导致K的扩展停止,所以不使用第3行。


    注意, vnoremapvmap在Visual和Select模式下工作。 要仅在可视模式下进行映射,请使用xmapxnoremap

    链接地址: http://www.djcxy.com/p/22601.html

    上一篇: What is the difference between the remap, noremap, nnoremap and vnoremap mapping commands in vim?

    下一篇: amazon EC2. Problems with permissions