我正在读《学习 vi 编辑器》这本书(琳达·兰姆和阿诺德·罗宾斯,第 6 版)。第115页,书上有一个这样的命令:
:map ^J xyz
xyz 部分本身在这里并不重要,我的问题是制作该^J
部分。
我尝试过ctrl+ V ctrl+ j(例如ctrl+v可以用来转义 Enter)和直接ctrl+j
在这两种情况下都不起作用。
我在 FreeBSD 11.0 中使用 vi 编辑器,它不是 vim (vi 改进)。
- - - 编辑 - - -
视频:
00:05 - 映射 ctrl+K 执行 dd (删除整行)
00:19 - 尝试使用 ctrl+J 执行相同的操作,但它不起作用,因为 ctrl+J 触发了一个表。
00:25 - 使用 ctrl+V ctrl+J 重试。它也不起作用,触发表。
00:33 - 尝试精确映射“^J”
00:44 - 尝试使用 ctrl+J,但它没有按预期工作。它可以输入序列“^J”。
答案1
这实际上似乎是书中的一个错误。该示例后面是以下注释:
在前面的例子中,尽管
^J
是一个六命令(它将光标向下移动一行),此键可以安全映射,因为它实际上与命令相同j
。有许多键要么执行与其他键相同的操作,要么很少使用。但是,您应该熟悉六命令之前,您可以通过在地图定义中使用它们来大胆地禁用它们的正常使用。
通常的推论为^J
是controlJ。但是第六版中提到的 vi 都不允许在文本中插入文字 control/J,因为这是类 Unix 系统的行结束符(^@
当尝试转义 control/J 时,vim 会给你一个空字符,其他编辑忽略这一点)。 A文字“ ^J
”不适用于注释,因为这些字符不是六命令。
您可以使文字” ^J
“工作,当然。但这不是这个例子的重点。很可能作者想要一些其他有趣的角色,并出于某种原因改变了它。