我使用的是极简 FreeBSD 系统,需要使用内置六编辑器来编辑文件。具体来说,这不是 vim、vim-tiny 或其他替代品。它是“4BSD bug-for-bug 兼容”nvi 编辑器。
它几乎按预期工作。这手册页表示 control-T 和 control-D 将根据 缩进/取消缩进shiftwidth
。 Control-T 有效,但 control-D 无效。它实际上将 ^D 字符输入到文件中。
如果我确实让 vim 进入系统,control-T 和 control-D 会按预期工作,所以这不是终端错误解释按键的问题。 Vi 本身并不解释 control-D。
有人遇到过这个吗?解决方案?使用 vim 不是一个选择。
答案1
太长;博士; vim
不是vi
。
在 中vi
,您应该使用 Control-T 而不是 Tab 来缩进一行。
如果您发现很难重新训练,您可以添加从 Tab 到 Control-T 的输入模式映射:
printf 'map! \x16\t \x14\n' >> ~/.nexrc
在真实的vi
和nvi
克隆的(在 FreeBSD 中使用)中,control-D 将擦除自动缩进字符直到之前的“shiftwidth”边界。它会不是通过按 Control-I、Tab 或 Space,擦除您手动输入的 Tab 或 Space 字符。
答案2
这是 bug 与 bug 兼容性的一部分。
在源代码的评论中对此进行了很长的讨论,在/usr/src/contrib/nvi/vi/v_txt.c
.输入被视为文字␄
字符除非 ai
模式已开启和最后插入的字符是自动缩进字符(通过Control+T或新行上的自动缩进)。
注释还指出,原始vi
的Control+T和Control+D受到更多限制,只有在它们是在插入模式下键入的第一个内容时才会影响缩进。