Я считаюЭта статьядолжно помочь мне найти управляющую последовательность для удаления слов вперед/назад.
Насколько я понимаю, последовательность управления должна начинаться с этого, \u001b[
поскольку это"вводчик контрольной последовательности"(Я получил это отэтот другой ответ), но на самом деле не знаю, какой должна быть полная строка.
Контекст (согласно другому вопросу SO): Моя цель — выдать управляющую последовательность для удаления слов в терминале VSCode с помощью сочетания клавиш (привязки клавиш)
решение1
Нет такого понятия, вы можете видетьctlseq
в документе нет ни единого упоминания ословоword. Также есть вопрос, какой цвет фона использовать для стирания и нужно ли смещать то, что справа от слова, влево или нет. Возможно, вам придется рассмотреть слова, которые переносятся на правый край терминала.
Вот некоторые из ваших вариантов:
отправьте столько символов 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, идея в том, чтобы избежать жесткого кодирования управляющих последовательностей, используйте эквивалент для вашего языка).
Глядя на backward-kill-word
виджеты некоторых оболочек (использующих, script
например, для регистрации их выходных данных), я вижу, readline
что использует BS для перемещения и dch
удаления, в то время как zsh
использует комбинацию BS и cub
и перезаписи. tcsh
похоже, что выполняет какое-то абсолютное позиционирование столбцов ( hba
) и использует dch
для удаления, ksh93 отправляет CR и перезаписывает всю строку.
решение2
Я никогда не видел такой последовательности. Если подумать, удаление слова — довольно сложная операция, сложнее других операций, и я не думаю, что какая-либо другая операция хоть как-то заботится о том, что находится на экране. Например, что завершает слово? '_'? '-'? '.'?