Последовательности управления XTerm для удаления слов вперед/назад?

Последовательности управления XTerm для удаления слов вперед/назад?

Я считаюЭта статьядолжно помочь мне найти управляющую последовательность для удаления слов вперед/назад.

Насколько я понимаю, последовательность управления должна начинаться с этого, \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

Я никогда не видел такой последовательности. Если подумать, удаление слова — довольно сложная операция, сложнее других операций, и я не думаю, что какая-либо другая операция хоть как-то заботится о том, что находится на экране. Например, что завершает слово? '_'? '-'? '.'?

Связанный контент