7

nore在vim中映射键是什么意思?例如,这两个映射有什么区别?

:map ddd ddjdd

:noremap ddd ddjdd
4

5 回答 5

15

这意味着映射不是n递归的。

为了显示,

:nmap x dd

x假设您在正常模式下映射到dd(删除行),以节省一些时间,删除行。一切正常,直到您需要其他映射中的 x(删除字符)来删除两个字符,

:nmap c xx

因为现在上层映射真的

:nmap c dddd

即将删除两行。

因此,为了保留“原始”映射(vim 键),您可以使用非递归方式进行操作,

:nnoremap x dd
:nnoremap c xx

一切正常(映射不......啊,你明白了)......

使用“nore”进行所有映射通常是一个好习惯,因为您永远不知道哪些插件可能依赖于什么,以及使用“普通”映射破坏了哪些 vim 行为。

于 2012-04-22T21:39:26.347 回答
3

这一切都包含在内置文档中

map

对于 map 命令适用的模式,将键序列 {lhs} 映射到 {rhs}。然后进一步扫描包含 {rhs} 的结果以查找映射。这允许嵌套和递归使用映射。

并且noremap

对于 map 命令适用的模式,将键序列 {lhs} 映射到 {rhs}。不允许映射 {rhs},以避免嵌套和递归映射。通常用于重新定义命令。{Vi 无此功能}

于 2012-04-22T21:48:00.187 回答
1

nore代表非递归。它会导致映射的右侧忽略映射。

于 2012-04-22T21:13:45.493 回答
0

如果您阅读整个单词,它会有所帮助。“noremap”,如“无重新映射”。这意味着不能更改映射。

于 2012-04-22T21:13:33.073 回答
0

我认为是vi这样一个反直觉的设置,它map代表递归映射,而不是明确地添加re到递归映射

https://learnvimscriptthehardway.stevelosh.com/chapters/05.html

什么时候应该使用这些非递归变体而不是它们的正常对应物?

总是。

不,说真的,总是。

使用裸 *map 只是在安装插件或添加新的自定义映射时要求痛苦。

于 2022-01-04T01:14:29.097 回答