Che*_*tan 1045 mapping vim command
Vim中的remap,noremap,nnoremap和vnoremap映射命令有什么区别?
DrA*_*rAl 1523
remap是一个使映射以递归方式工作的选项.默认情况下它已打开,我建议你保持这种状态.其余的是映射命令,如下所述:
:map并且:noremap是各种映射命令的递归和非递归版本.这意味着,如果你这样做:
:map j gg
:map Q j
:noremap W j
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Kel*_*vin 248
我认为Vim文档应该解释这些命令命名背后的含义.告诉你他们做了什么并不能帮助你记住这些名字.
map是所有递归映射命令的"根".根表单适用于"正常","视觉+选择"和"操作员待定"模式.(我在语言学中使用术语"root" .)
noremap是所有非递归映射命令的"根".根形式适用于相同的模式map.(将nore前缀视为"非递归".)
(请注意,也存在!类似的模式map!适用于插入和命令行).
请参阅下文,了解"递归"在此上下文中的含义.
预先设置模式字母,例如n修改映射所适用的模式.它可以选择适用模式列表的子集(例如,仅"视觉"),或选择map不适用的其他模式(例如"插入").
使用help map-modes将显示一些表,说明如何控制映射适用的模式.
模式字母:
n:只有正常v:视觉和选择o:运营商待定x:仅视觉s:仅选择i: 插入c: 命令行l:insert,命令行,regexp-search(以及其他.集体称为"Lang-Arg"伪模式)" 递归 "表示将映射扩展为结果,然后将结果扩展为另一个结果,依此类推.
当其中一个成立时,扩展停止:
此时,应用/执行Vim对最终结果的默认"含义".
" 非递归 "表示映射仅展开一次,并且应用/执行该结果.
例:
nmap K H
nnoremap H G
nnoremap G gg
Run Code Online (Sandbox Code Playgroud)
以上原因K扩展到H,然后H扩展到G并停止.它会停止,因为nnoremap它会立即扩展和停止.G将执行的含义(即"跳到最后一行").最多只有一个非递归映射将应用于扩展链(这将是最后一次扩展).
映射G到gg仅适用于您按G,但如果按则不会K.K无论是否G以递归方式映射,此映射都不会影响按下,因为第2行会导致扩展K停止,因此不会使用第3行.
Mah*_*oud 37
我将简单解释一下映射命令。
首先,我们有两个通用映射命令:
map-在正常、可视、选择和操作员挂起模式下递归工作。map!-在插入和命令行模式下递归工作。这些命令的非递归变体是:
noremap-在正常、可视、选择和操作员挂起模式下递归工作。noremap!-在插入和命令行模式下以非递归方式工作。您可以将其视为no[remap] {lhs} {rhs}将键序列映射{lhs}到的意思{rhs},但不要重新 映射任何命令{rhs}以避免嵌套和递归映射。
然后,我们有特定于模式的命令:
nmap-在正常模式下递归工作。imap-在插入模式下递归工作。vmap-在视觉和选择模式下递归工作。xmap-在视觉模式下递归工作。smap-在选择模式下递归工作。cmap-在命令行模式下递归工作。omap-在运算符挂起模式下递归工作。以及它们的非递归变体:
nnoremap-在正常模式下非递归工作。inoremap-在插入模式下非递归工作。vnoremap-在视觉和选择模式下以非递归方式工作。xnoremap-在视觉模式下非递归工作。snoremap-在选择模式下非递归工作。cnoremap-在命令行模式下以非递归方式工作。onoremap-在运算符挂起模式下以非递归方式工作。最后,remap是一个布尔选项,允许映射递归工作。值得一提的是,您应该始终将此选项保留为默认值on。
Cir*_*四事件 19
一个区别是:
:map 不nvo==正常+(视觉+选择)+运算未决:map!不ic ==插入+命令行模式如help map-modes表中所述.
所以:map不映射到所有模式.
要映射到您需要的所有模式:map和:map!.