如何使用 ed 的“插入”命令在一行中插入一个单点?

Bre*_*ent 7 ed

如何在ed编辑器的一行中插入一个单点?通常,一行上的点单独结束插入;它可以以某种方式逃脱吗?

Jef*_*ler 7

不,您不能单独在一行中插入句点,因为这是ed停止插入文本的指令;请参阅早期ed 手册页之一(第 7 页):

通过在行首单独键入句点 (.) 来退出输入模式。

您可以通过不单独输入句点来解决它;例如:Space.Enter后跟.Enter后跟s/^ //。您可以使用除 Space 之外的任何其他字符作为标记,只要您在后续s//命令中将其配对即可。

不能单独插入句点;当追加、更改或插入一行时,ed最终会调用该append_lines函数;该函数在buffer.c中读取由换行符(via get_stdin_line)分隔的输入。作为其中的一部分,它会检查句点是否是结果中唯一的内容(除了尾随的换行符);下面,“ibufpp”是指向输入文本的指针,“size”是该缓冲区的长度:

if( size == 2 && **ibufpp == '.' ) { *ibufpp += size; return true; }
Run Code Online (Sandbox Code Playgroud)

您可以在以下位置下载压缩的 tar 包:http : //download.savannah.gnu.org/releases/ed/或查看Debian 的上游页面 edOpenBSD 的 ed 页面,其中相应的代码在main.c 中

ed(1) Conference twitter post 中发现的另一个选项是输入任何其他单个字符,然后用句点替换该字符:

  1. xEnter
  2. .Enter
  3. s/./.