1

В vim и многих других текстовых редакторах вы можете прокрутить конец файла до верхней части экрана, оставив остальные строки пустыми. Но в терминале по умолчанию конец строки фиксируется в конце экрана терминала, поэтому текущая строка всегда отображается внизу. Как прокрутить текущую строку, добавив пустые строки между последней строкой и нижней частью экрана?

Спасибо

1 ответ1

3

Экранирующие последовательности \e[B и \e[A перемещают курсор вниз и вверх соответственно, ограничивая область просмотра. Экранирующие последовательности \eD (называемые "индекс") и \eM ("обратный индекс") также перемещаются вниз и вверх, но также при необходимости прокручивают область просмотра. (Обратите внимание на отсутствие символа [ в последних.)

Я рекомендую вам напечатать пару "индексных" символов, за которыми следует такое же количество "курсора вверх" (или "обратного индекса"). Например:

echo -ne '\eD\eD\eD\e[A\e[A\e[A'

перемещает курсор вниз на 3 строки, прокручивая весь видовой экран, если необходимо, а затем перемещает его обратно вверх. Эффективно он гарантирует, что в нижней части экрана есть как минимум 3 пустые строки.

Вы можете подключить его к своему $PS1 (первичное приглашение оболочки), просто убедитесь, что оно заключено между \[ и \] чтобы оболочка знала, что эти символы не перемещают курсор по горизонтали, например:

PS1='\[\eD\eD\eD\e[A\e[A\e[A\]prompt$ '

Вы также можете распечатать его из $PROMPT_COMMAND В этом случае, если я правильно помню, его нужно заключить в байт 0x01 (^A) и 0x02 (^B).

Примечание. Сочетания клавиш \e[3A и \e[3B перемещают курсор вверх / вниз на 3 строки (и, очевидно, вы можете заменить 3 на любое число). Последовательности "индекс" и "обратный индекс" не имеют таких ярлыков.

Я бы оставил это на ваше усмотрение, чтобы программно выяснить предпочитаемое вами количество строк на основе высоты терминала.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .