其中ed
有一个有用的c
命令,允许用户对特定行进行更改。 (rlwrap
一旦更改了一行,使用 as well 可以更轻松地进行更改,因为可以使用向上和向下箭头来引入先前的更改。)
使此类更改变得更加容易的一项功能是ed
复制要更改的行,而无需再次重新键入全部或大部分内容,并且可以简单地使用后退箭头进行所需的任何更改,而无需使用鼠标复制并粘贴要编辑的行。
例如:
1 This line must be changed
c
This line must be changed
而不是这样,这是默认行为:
1 This line must be changed
c
BLANK LINE
我不确定使用 之外的程序是否可以实现这一点ed
?
答案1
c
当您使用中的命令更改行时ed
,编辑器会询问您用什么来替换该行。它不会用该行的旧内容预先填充替换内容,因为作为一个简单的行编辑器,它没有任何方式允许您交互地修改新文本。
但是,如果您ed
与 Readline 库包装器一起使用rlwrap
,这将使您能够在将文本提交到 之前在 Readline 中进行行间编辑ed
。特别是,如果您已经编写了要更改的行最近足够(以便它仍然在 Readline 的历史记录中),您可以使用Up-Arrow或任何其他适当的键绑定来循环或搜索该行的历史记录并在发出命令后对其进行编辑c
。
通过该实用程序的选项或通过编辑 Readline 配置文件rlwrap
可以调整保存的历史记录的大小。这是另一个问题的主题:-s
~/.inputrc
如何增加 .ed_history 文件的大小
带注释的ed
编辑会话(#
将注释添加到会话中)创建一个包含两行的文档并以上面讨论的方式更改第一行:
$ rlwrap ed newfile # start ed with rlwrap
newfile: No such file or directory
a # add lines
this line must change
this line is ok
. # done adding lines
1c # change first line
this line is now ok too # pressed up-arrow to find the old line, edited it
. # done changing
,n # output all lines with line numbers
1 this line is now ok too
2 this line is ok