вкратце: это возможно, но сложно, как привязки .inputrc
.
long: Как предложено в комментарии, вы можете сделать что-то подобное в командной строке bash и в привязках строки чтения.
Сохранение / восстановление курсора будет неэффективным, поскольку единственная точка, в которой вы сможете надежно очистить остальную часть экрана, будет нажатием Enter для завершения выбора.
После передачи управления accept-line
уже слишком поздно очищать оставшуюся часть экрана. Возможно (но сложно) определить серию реальных и специальных «привязок клавиш», чтобы заставить readline выполнять более одной операции. См., Например,
Но этот подход ограничивает вас отправкой символов в bash и выдачей команд в readline. Ни одна из команд readline не очищает
printf '\033[J'
остаток экрана. Ближайшим из них будет встроенный в readline clear-screen
(, а не , что вы хотите). Ваша привязка должна сделать что-то вроде
начало строки
printf '\ 033 [J';
» конец строки
accept-line
конец строки
работал бы вокруг причуды readline. Это позволяет вам нажать Enter в любом месте на линии. Если бы ваш курсор был в середине строки, у вас был бы только фрагмент вашего ввода, оставшегося видимым (хотя bash получил бы всю строку).
Даже в самом простом вопросе, с которого вы начинаете, скрывается некоторая сложность. Я бы начал с
sed -E 's/\(([^()]*)\)/\1/'
, повторенного до тех пор, пока не осталось скобок пар . Это заменяет самый внутренний текст:
$ echo "((body))" | sed -E 's/\(([^()]*)\)/\1/'
(body)
Однако, как предлагает Кусалананда , для удаления команд TeX вы должны проверить Detex
, который доступен в TeX Live (и в большинстве дистрибутивов). Такая обработка требует большего, чем совпадение скобок или фигурных скобок: вам нужно немного знать о поведении различных команд. Даже в вашем примере \ color
необходимо обработать одним способом, \ textbf
другим ...