答案1
没有这样的东西,你可以看看ctlseq
文档没有任何提及单词单词。还有一个问题是使用什么背景颜色来擦除以及是否将单词右侧的内容移至左侧。您可能必须考虑在终端右侧边缘换行的单词。
您的一些选择是:
发送与要删除的单词中的单元格一样多的 BS 字符,然后发送尽可能多的 SPC(注意它使用当前背景颜色),然后再次发送尽可能多的 BS 字符(将光标再次移回):
$ printf 'foo bar\b\b\b \b\b\b+\n' foo +
该软件几乎可以在所有终端上运行。
相同,但使用
tput cub x
(其中x
是单元格数)将光标向后移动该量,而不是使用 BS 序列。您可以使用tput ech x
删除这些单元格(使用当前背景颜色或不使用当前背景颜色,具体取决于终端)$ printf 'foo bar'; tput cub 3; tput ech 3; printf '+\n' foo +
而不是
tput ech x
,您可以使用擦除到tput el
行尾,或者tput dch x
删除x 个单元格(并将其后的内容向左移动)。
(tput
这里是 terminfo 数据库的 shell 接口,其想法是避免硬编码转义序列,使用适合您的语言的等效内容)。
查看backward-kill-word
一些 shell 的小部件(script
例如用于记录其输出),我看到readline
使用 BS 进行运动和dch
删除,同时zsh
使用 BS 和 和 重写的组合cub
。tcsh
似乎正在做一些绝对列定位(hba
)并用于dch
删除,ksh93 发送一个 CR 并重写整行。
答案2
我从来没有见过这样的顺序。如果你仔细想想,删除一个单词是相当复杂的,比其他操作更复杂,而且我认为任何其他操作都不会以任何方式关心屏幕上的内容。例如,什么是单词的结尾? '_'? '-'? '.'?