Amelio Vazquez-Reina Asked: 2019-11-27 10:19:54 +0800 CST2019-11-27 10:19:54 +0800 CST 2019-11-27 10:19:54 +0800 CST 用于向后/向前删除单词的 XTerm 控制序列? 772 我相信这篇文章应该可以帮助我找到向后/向前删除单词的控制序列。 \u001b[我的理解是,控制序列将从“控制序列引入器”开始(我从另一个答案中得到这个),但并不真正知道完整的字符串应该是什么。 上下文(根据另一个 SO 问题):我的目标是发出控制序列,用于从键盘快捷键(键绑定)中删除 VSCode 终端中的单词 terminal xterm 2 个回答 Voted stolenmoment 2019-11-27T11:09:51+08:002019-11-27T11:09:51+08:00 我从来没有见过这样的顺序。如果你仔细想想,删除一个单词是相当复杂的,比其他操作更复杂,而且我认为任何其他操作都不关心屏幕上的内容。例如,什么终止了一个词?'_'?'-'?'.'? Best Answer Stéphane Chazelas 2019-11-27T22:38:13+08:002019-11-27T22:38:13+08:00 没有这样的东西,你可以看到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行尾,或删除x 个单元格(并将之后的内容向左移动)。tput dch x (tput这里是 terminfo 数据库的 shell 接口,其想法是避免硬编码转义序列,使用与您的语言等效的)。 查看backward-kill-word一些 shell 的小部件(script例如使用记录其输出),我看到readline使用 BS 进行运动和dch删除,同时zsh使用 BScub和重写的组合。tcsh似乎正在做一些绝对列定位 ( hba) 并用于dch删除,ksh93 发送一个 CR 并重写整行。
我从来没有见过这样的顺序。如果你仔细想想,删除一个单词是相当复杂的,比其他操作更复杂,而且我认为任何其他操作都不关心屏幕上的内容。例如,什么终止了一个词?'_'?'-'?'.'?
没有这样的东西,你可以看到
ctlseq
文档没有任何单词单词的提及。还有一个问题是使用什么背景颜色来擦除以及是否将单词右侧的内容移到左侧。您可能必须考虑包装在终端右边距的单词。您的一些选择是:
发送与要删除的单词中的单元格一样多的 BS 字符,然后发送尽可能多的 SPC(注意它使用当前背景颜色),然后再次发送尽可能多的 BS 字符(再次将光标移回):
那应该可以在几乎所有终端上工作。
相同,但使用
tput cub x
(其中x
是单元格的数量)将光标向后移动该数量,而不是使用一系列 BS。您可以使用tput ech x
擦除这些单元格(使用当前背景颜色或不取决于终端)而不是
tput ech x
,您可以使用擦除到tput el
行尾,或删除x 个单元格(并将之后的内容向左移动)。tput dch x
(
tput
这里是 terminfo 数据库的 shell 接口,其想法是避免硬编码转义序列,使用与您的语言等效的)。查看
backward-kill-word
一些 shell 的小部件(script
例如使用记录其输出),我看到readline
使用 BS 进行运动和dch
删除,同时zsh
使用 BScub
和重写的组合。tcsh
似乎正在做一些绝对列定位 (hba
) 并用于dch
删除,ksh93 发送一个 CR 并重写整行。