用于向后/向前删除单词的 XTerm 控制序列?

用于向后/向前删除单词的 XTerm 控制序列?

我相信本文应该帮助我找到向后/向前删除单词的控制序列。

我的理解是控制序列\u001b[将从“控制序列引入器”(我从这个另一个答案),但并不真正知道完整的字符串应该是什么。

上下文(根据另一个 SO 问题):我的目标是发出用于从键盘快捷键(键绑定)删除 VSCode 终端中的单词的控制序列

答案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 和 和 重写的组合cubtcsh似乎正在做一些绝对列定位(hba)并用于dch删除,ksh93 发送一个 CR 并重写整行。

答案2

我从来没有见过这样的顺序。如果你仔细想想,删除一个单词是相当复杂的,比其他操作更复杂,而且我认为任何其他操作都不会以任何方式关心屏幕上的内容。例如,什么是单词的结尾? '_'? '-'? '.'?

相关内容