При использовании Terminal.app вы можете очистить экран, используя встроенную оболочку clear
или нажав ^+ L(Control-L).
Однако все, что это делает, это сдвигает текущее содержимое экрана на одну высоту экрана и сбрасывает курсор / ввод в первой строке. Это означает, что вы все еще можете прокрутить назад и увидеть это.
То, что вы также можете сделать, это сбросить весь прокрутку нажатием ⌘+ K(Command-K).
После того, как вы сделали это, вы не можете прокрутить назад вообще.
В определенных ситуациях (особенно перед запуском screen
или vim
) я хотел бы сбросить прокрутку назад до того, как команда действительно выполнится.
Есть команда (как clear
), которая реализована в OS X, которая позволяет мне сделать это? Учитывая существование pbcopy
и pbpaste
, я думаю, может существовать нечто подобное, что позволит мне сделать это.
источник
clear && printf '\e[3J'
(Вы выбрали неправильный ответ как правильный ответ!)Ответы:
Терминал поддерживает расширение escape-последовательности ED (Erase in Display) для удаления обратной прокрутки. Это также поддерживается xterm. Команда ED, описанная в руководстве по VT100 , принимает эти значения для параметра Ps:
Терминал ( и xterm ) добавляет:
Обратите внимание, что при этом стирается только прокрутка назад, а не экран. Это позволяет вам стереть один или другой, или оба, отправив две escape-последовательности.
Например, вы можете очистить экран и прокрутку с помощью следующей команды оболочки:
clear && printf '\e[3J'
(Команда
clear
ищет соответствующую последовательность для очистки экрана для текущего терминала, но escape-последовательность «erase scroll-back» является пользовательской и должна быть жестко запрограммирована. Если вы поместите это в сценарий оболочки, который вы не знаете наверняка будет только когда - либо будет работать с терминалом, вы должны проверить , что$TERM_PROGRAM
этоApple_Terminal
перед его отправкой.)источник
alias clear="clear && printf '\e[3J'"
echo $'#!/usr/bin/env bash\n/usr/bin/clear\nprintf \'\\e[3J\'' >clr; chmod +x clr
⌘K, ярлык «Вид> Очистить прокрутку».
ОБНОВЛЕНИЕ : Это может быть автоматизировано с AppleScript следующей командой:
... что вы можете, конечно,
alias
на что угодно, или сохранить в функции в вашем~/.profile
скрипте входа в систему :)Однако в целях безопасности, чтобы иметь возможность использовать это даже в фоновом режиме, не рискуя нажать клавишу для неправильного фронтального приложения, я бы посоветовал окружить его следующим тестом:
... который дает нам следующий код:
... который, в свою очередь, должным образом избежал и
alias
издал, заканчивается:А вот и твой новый
clear
! :)источник
vim
) оболочка выполняла «сброс с прокруткой» перед выполнением vim. Программный, не интерактивный.clear
; то есть он очищает экран, но я все еще могу прокрутить назад. УдарCommand
K
работает нормально.Вот код, который работает как для терминала MacOS, так и для iTerm2. Ему также не нужно окно, чтобы быть на переднем плане.
Как это работает
Это состав из 3 escape-последовательностей ANSI , в частности, команд "Control Sequence Introducer" .
\033
это escape-последовательность, которая жестко кодирует кодовую точку для символа, который она представляет. Ведущий0
указывает, что остальная часть последовательности кодирует восьмеричное значение, в данном случае,33
восьмеричное. Десятичное значение этого27
(3 * 8^1 + 3 * 8^0
=3 * 8 + 3
=24 + 3
=27
). В ASCII кодовой точкой27
является символ «ESC» (escape).CSI
Команды начинаются сESC [
, иначе\033[
. Зная это, мы можем разбить строку на 3 части.CSI 2 J
CSI n J
n
значение устанавливается на2
, что вызывает второй вариант: «Если n равно 2, очистить весь экран (и переместить курсор в верхний левый угол в DOS ANSI.SYS)».CSI 3 J
:CSI n J
n
значение устанавливается равным3
третьему варианту: «Если n равно 3, очистите весь экран и удалите все строки, сохраненные в буфере прокрутки (эта функция была добавлена для xterm и поддерживается другими терминальными приложениями)».CSI 1 ; 1 H
:CSI n ; m H
n
Иm
значения оба установлены на1
, что означает эта команда перемещает курсор в верхнем углу крайний левый.источник
CSI n J
" (где n = 2) + "CSI n J
" (где n = 3) + "CSI n ; m H
" (где n, m = 1, 1), что переводится как: "ED - Erase in Display" (вариант 2), «ED - Стереть на дисплее» (вариант 3), «CUP - Положение курсора» (перемещение на 1, 1)