Answers:
remap
是使映射递归工作的选项。默认情况下它处于打开状态,我建议您采用这种方式。其余为映射命令,如下所述:
:map
并且:noremap
是各种映射命令的递归和非递归版本。这意味着如果您这样做:
:map j gg
:map Q j
:noremap W j
j
将映射到gg
。Q
将也被映射到gg
,因为j
会为递归映射扩大。W
将被映射到j
(而不是gg
),因为j
不会为非递归映射扩展。
现在请记住,Vim是模式编辑器。它具有普通模式,可视模式和其他模式。
对于这些映射集中的每组,都有一种映射在正常,可视,选择和运算符模式(:map
和:noremap
)下工作,在正常模式(:nmap
和:nnoremap
)下工作,在可视模式(:vmap
和:vnoremap
)下工作。
有关此的更多指导,请参阅:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
noremap
与的相反map
。我的意思是删除映射的东西。感谢您的回答。它使我
:map
,等等并不是在所有模式下都可以工作,确切地说,并不是在所有常见模式下都可以工作(特别是正常模式,可视模式,选择模式和操作员待定模式)。如果要使映射以插入,命令行或lang-arg模式工作,则需要使用:map!
等。(来源:vimdoc.sourceforge.net/htmldoc/map.html#map-overview)
我认为Vim文档应该已经解释了这些命令命名的含义。仅仅告诉您他们所做的事情并不能帮助您记住名字。
map
是所有递归映射命令的“根”。根格式适用于“普通”,“可视+选择”和“操作员待定”模式。(我在语言学中使用“根”一词。)
noremap
是所有非递归映射命令的“根”。根格式适用于与相同的模式map
。(认为nore
前缀表示“非递归”。)
(请注意,还有一些!
类似的模式map!
适用于插入和命令行。)
在此上下文中,“递归”的含义请参见下文。
在模式字母前添加类似n
修改映射所使用的模式的模式字母。它可以选择适用模式列表的子集(例如,仅“可视”),或者选择其他map
不适用于的模式(例如,“插入”)。
使用help map-modes
将显示一些表格,这些表格解释如何控制映射应用于哪些模式。
模式字母:
n
:仅正常v
:视觉并选择o
:待处理运算符x
:仅视觉s
:仅选择i
: 插c
: 命令行l
:插入,命令行,正则表达式搜索(及其他。统称为“ Lang-Arg”伪模式)“ 递归 ”表示将映射扩展为一个结果,然后将该结果扩展为另一个结果,依此类推。
当满足以下条件之一时,扩展停止:
此时,将应用/执行Vim最终结果的默认“含义”。
“ 非递归 ”表示映射仅扩展一次,并且结果被应用/执行。
例:
nmap K H
nnoremap H G
nnoremap G gg
以上原因K
扩展到H
,然后H
扩展到G
并停止。由于停止nnoremap
,它会立即扩展并停止。G
将执行的含义(即“跳至最后一行”)。在扩展链中最多将应用一个非递归映射(这将是最后一次发生的扩展)。
映射G
到gg
如果按只适用G
,但如果您按下K
。K
无论是否G
以递归方式映射,此映射都不会影响按,因为第2行导致K
停止扩展,因此不会使用第3行。
map
仅适用于普通,可视,选择和操作员待定模式,不适用于所有模式。
一个区别是:
:map
是否nvo
==正常+(可视+选择)+运算符待处理:map!
是否ic
==插入+命令行模式如help map-modes
表中所述。
因此:map
并非映射到所有模式。
要映射到所有模式,您需要:map
和:map!
。
command mode
是normal mode
viz的另一个历史名称。第5 章vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro)。缩写“ c”代表“命令行”。换句话说,默认情况下:对于insert +命令行模式,将 lhs map! lhs rhs
递归映射到rhs 。除非在〜/ .vimrc中明确禁用了默认选项。在那种情况下,映射将不是递归的(不建议)。remap
set noremap[!]
vnoremap
并vmap
在“视觉和选择”模式下工作。要仅在可视模式下进行映射,请使用xmap
和xnoremap
。