nore
在vim中映射键是什么意思?例如,这两个映射有什么区别?
:map ddd ddjdd
和
:noremap ddd ddjdd
这意味着映射不是n递归的。
为了显示,
:nmap x dd
x
假设您在正常模式下映射到dd
(删除行),以节省一些时间,删除行。一切正常,直到您需要其他映射中的 x(删除字符)来删除两个字符,
:nmap c xx
因为现在上层映射真的
:nmap c dddd
即将删除两行。
因此,为了保留“原始”映射(vim 键),您可以使用非递归方式进行操作,
:nnoremap x dd
:nnoremap c xx
一切正常(映射不......啊,你明白了)......
使用“nore”进行所有映射通常是一个好习惯,因为您永远不知道哪些插件可能依赖于什么,以及使用“普通”映射破坏了哪些 vim 行为。
这一切都包含在内置文档中
map
:
对于 map 命令适用的模式,将键序列 {lhs} 映射到 {rhs}。然后进一步扫描包含 {rhs} 的结果以查找映射。这允许嵌套和递归使用映射。
并且noremap
:
对于 map 命令适用的模式,将键序列 {lhs} 映射到 {rhs}。不允许映射 {rhs},以避免嵌套和递归映射。通常用于重新定义命令。{Vi 无此功能}
nore
代表非递归。它会导致映射的右侧忽略映射。
如果您阅读整个单词,它会有所帮助。“noremap”,如“无重新映射”。这意味着不能更改映射。
我认为是vi
这样一个反直觉的设置,它map
代表递归映射,而不是明确地添加re
到递归映射
https://learnvimscriptthehardway.stevelosh.com/chapters/05.html
什么时候应该使用这些非递归变体而不是它们的正常对应物?
总是。
不,说真的,总是。
使用裸 *map 只是在安装插件或添加新的自定义映射时要求痛苦。