代码之家  ›  专栏  ›  技术社区  ›  Chetan

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

  •  985
  • Chetan  · 技术社区  · 14 年前

    这两者有什么区别 remap noremap , nnoremap vnoremap 在Vim中映射命令?

    4 回复  |  直到 4 年前
        1
  •  1754
  •   Mateen Ulhaq    4 年前

    remap 是一个 选项 这使得映射递归地工作。默认情况下,它是开着的,我建议你保持这种方式。其余的都是 映射命令 ,描述如下:

    :map :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公司 ,因为 日本 将展开递归映射。
    • W 将映射到 )因为 日本

    现在记住Vim是一个 模态编辑器 . 它有一个 模式, 模式和其他模式。

    对于每一组映射,都有一个 mapping 在正常、可视、选择和操作员模式下工作( :无映射 :nmap :nnoremap ),一个处于可视模式( :vmap :vnoremap )等等。

    :help :map
    :help :noremap
    :help recursive_mapping
    :help :map-modes
    
        2
  •  320
  •   Peter Mortensen icecrime    6 年前

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

    map 是所有递归映射命令的“根”。根窗体适用于“正常”、“可视+选择”和“操作员挂起”模式。(我用“根”这个词 linguistics .)

    noremap 是所有非递归映射命令的“根”。根形式应用于与相同的模式 . (想想 nore

    (请注意,还有 ! 模式如 map! 适用于插入命令行的。)

    在模式字母前面加上 n 修改映射工作的模式。它可以选择适用模式列表的一个子集(例如,仅“视觉”),或选择其他 地图

    使用 help map-modes 将向您展示几个表,说明如何控制映射应用于哪些模式。

    模式字母:

    • :仅正常
    • v :目视并选择
    • o :操作员挂起
    • x :仅可视
    • s
    • i :插入
    • c :命令行
    • l :insert、命令行、regexp search(以及其他。统称为“Lang-Arg”伪模式)

    递归的 表示将映射展开为一个结果,然后将结果展开为另一个结果,依此类推。

    当其中一个为真时,展开停止:

    1. 结果不再映射到任何其他对象。

    此时,应用/执行Vim对最终结果的默认“含义”。

    非递归 “表示映射只展开一次,并应用/执行该结果。

     nmap K H
     nnoremap H G
     nnoremap G gg
    

    以上原因 K 扩展到 H 小时 扩展到 G 停下来。它停止是因为 nnoremap

    映射 gg K公司 不管是否 K公司 停下来,这样3号线就不用了。

        3
  •  22
  •   Ciro Santilli OurBigBook.com    9 年前

    • :map nvo ==正常+(可视+选择)+运算符挂起
    • :map! ic ==插入+命令行模式

    如上所述 help map-modes 桌子。

    map 不映射到所有模式 .

    要映射到所有模式,您需要两者 :地图 :地图! .