Як очистити попередній вихід у терміналі в Mac OS X?


523

Я знаю clearкоманду, яка "очищає" поточний екран, але це робиться лише надрукуючи багато нових рядків - очищений вміст просто прокручується вгору.

Чи є спосіб повністю стерти весь попередній вихід з терміналу, щоб я не міг досягти цього навіть прокручуючи вгору?


1
Ви коли-небудь знаходили спосіб зробити це, що працює в сценарії оболонки?
Zev Eisenberg

7
@ZevEisenberg Я так не думаю. У всякому разі, зараз я думаю, що мені це зовсім не потрібно. Я задоволений Command+K.
Еоніл

@ZevEisenberg моя оновлена ​​відповідь (та ще одна відповідь) показує вам, як це зробити зі сценарію.
Алок Сінгал

Відповіді:


1098

Щоб очистити термінал вручну:

+K

Command+ Kдля нових клавіатур

Щоб очистити термінал всередині сценарію оболонки;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'

@fearless_fool apple.stackexchange.com/a/31887 може це зробити? Якщо це станеться, будь ласка, повідомте мене!
Алок Сінгал

Ну так, але дивіться нижче ( stackoverflow.com/a/26615036/558639 ) для кращого способу.
безстрашний_фол

9
Якщо ви випадково натиснули це, як би ви перейшли до перегляду очищеного буфера?
Джошуа Пінтер

4
@JoshPinter, просто не натискайте його випадково. :) (Подумайте про використання clearдля всіх випадків, за винятком випадків, коли вам потрібна історія прокрутки, щоб фактично зникнути, наприклад, коли ви збираєтесь друкувати.)
Wildcard

2
@Wildcard Досить справедливо. :) Гарна порада щодо використання clear. Я відчуваю, що їх слід змінити. Введення тексту clearздається більш навмисним, ніж ударом Command + K.
Джошуа Пінтер

85

Кращий спосіб очистити екран із сценарію ...

Якщо ви використовуєте додаток для терміналів OSX (як зазначено в ОП), кращим підходом (завдяки https://apple.stackexchange.com/a/113168 ) є саме такий:

clear && printf '\e[3J'

або більш стисло (підказка шапки на https://stackoverflow.com/users/4834046/qiuyi ):

printf '\33c\e[3J'

який очищає буфер прокрутки, а також екран. Є й інші варіанти, див. Https://apple.stackexchange.com/a/113168 для отримання додаткової інформації.

оригінальна відповідь

Відповідь AppleScript, наведена в цій темі, працює, АЛЕ у неї є неприємний побічний ефект очищення будь-якого вікна терміналу, який, як буває, активний. Це дивно, якщо ви запускаєте сценарій в одному вікні і намагаєтеся виконати роботу в іншому!

Ви уникаєте цього, вдосконалюючи AppleScript, щоб очистити екран лише в тому випадку, якщо він передній, виконуючи це (взято з https://apple.stackexchange.com/a/31887 ):

osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'

... але як тоді, коли це не поточне вікно, вихід буде складатись до тих пір, поки він знову не стане актуальним, що, ймовірно, не є тим, що ви хочете.


1
Я використав "кращий шлях" в, .bash_profileі це приголомшливо, тому що я більше не отримую глюкований буфер іноді, коли відкриваю нове вікно терміналу.
Патрік Робертс

1
Це найбільш концептуально правильна відповідь. Відповідь qiuyi дозволяє уникнути && при жертві трохи читабельності. Якщо відповідь Алока можна було б розширити, щоб очистити термінал, на якому працює поточний сценарій, це було б вдосконаленням, але це простіше.
Зак Морріс

1
Це сценарій кращий для сценаріїв. Дякую купу!
Енді

Це ідеально підходить, коли ви ssh'd до якоїсь іншої системи, дякую!
JBRWilkinson

48

Гарний спосіб printf '\33c\e[3J'


3
Це найкращий спосіб. Ми повинні визначити псевдонім на зразокalias cls='printf "\33c\e[3J"'
mpyw

Дякую, це саме те, що мені було потрібно.
GigaBass

Працює і в iTerm2
Андерс Зоммарін

1
@ LoïcFaure-Lacroix \33cвиконує еквівалент clearкоманди, яка в основному просто прокручує екран, поки ви не зможете побачити його попередній вміст. Він очищає екран, але не буфер прокрутки назад (тобто ви все ще можете використовувати панелі прокрутки, щоб побачити старий вихід). Додайте \e[3Jфактично очищення буфера назад прокрутки.
luiss

@EirNym, додайте function cls { printf '\33c\e[3J\33c' }рядок у ~/.profile(або загальносистемний /etc/profile). Це повинно працювати для настільних середовищ у macOS, FreeBSD, Linux тощо. Зауважте, додаткове \33cзначення для очищення зайвих \e[3Jлітералів у не-macOS (в основному для Linux / FreeBSD нам потрібно лише printf '\33c').
вулкан ворон

33

Помістіть це у свій .bash_profile або .bashrc

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}

Це має бути правильна відповідь. AppleScript може бути безладним, але ей, робота виконується. Дякую.
чорниця

Зрештою, але інша відповідь зазначає, що це очищає всі вікна!
Майкл Буше

20

У Mac OS X Terminal ця функція вже вбудована в додаток Terminal як View->Clear Scrollback(за замовчуванням є CMD+ K).

Таким чином, ви можете перепризначити це, як вам подобається, за допомогою ярликів клавіатури Apple. Просто додайте новий ярлик для Terminal командою "Очистити прокрутку". (Я використовую CMD+ L, тому що це схоже на CTRL+, Lщоб очистити поточний вміст екрану, не очищаючи буфер.)

Не впевнений, як би ви використовували це в сценарії (можливо, AppleScript, як вказували інші).


1
Станом на Yosemite (10.10), View->Clear Scrollbackйого більше немає в меню терміналу. Однак комбінація клавіш CMD+ Kвсе ще працює.
Nicolas Miari

1
@NicolasMiari Схоже , Clear Scrollbackтільки що переїхав з Viewдо Editв Йосеміті.
BrainSteel

10

За допомогою Mac OS X Yosemite (10.10) використовуйте Option + Command + Kдля очищення прокрутки в Terminal.app.


9

Або ви можете надіслати розрив сторінки (канал форми ASCII), натиснувши:

CTRL+L

Хоча це технічно лише починає нову сторінку, це має такий же чистий ефект, як і всі інші методи, при цьому набагато швидше (за винятком рішення Apple + K, звичайно).

А оскільки це команда управління ASCII, вона працює у всіх оболонках.


1
Це очищає екран, але залишає буфер прокрутки недоторканим.
Джордж

це не те саме, якщо ви хочете використовувати cmd + f для
зразка

7

Щоб видалити лише останній вихід:

+L

Щоб повністю очистити термінал:

+K


6

Command + K очистить попередній результат

Щоб очистити введений текст, спершу перейдіть вліво з " Command + A ", а потім очистіть текст праворуч від вказівника з " Control + K ".

Наочні приклади: введіть тут опис зображення



5

Роби правильно, роби все правильно!

Очистити до попередньої позначки:Command-L

Очистити до попередньої закладки:Option-Command-L

Очистити для початку: Command-K

Допоможіть вашим хлопцям!


1

Я не міг змусити жодне з перерахованих вище працювати (на macOS).

Комбінація працювала для мене -

IO.write "\e[H\e[2J\e[3J"

Це очищає буфер і екран


Що таке IO.write? Мені довелося замінити його на printf, щоб він працював. Все одно, дякую. Це найкраще працює для мене
Фіцю

1
Я не впевнений, чому я вибрав IO.write. Це має працювати так само, проте ви вирішили надрукувати ці символи в терміналі.
Майкл Болдрі

1

Якщо ввести наступне в терміналі, ви видалите історію (тобто використання стрілки вгору нічого не отримає), але не очистить екран:

history -c

Це робить. @phil чи видаляє їх назавжди з диска, чи їх все ще можливо отримати?
Стівен Руз

В основному він видаляє файл ~ / .bash_history, тому якщо ви зможете відновити це, ви можете відновити команди, які були очищені
Райан Пендлтон

Ні, це не працює. Прокручена історія все ще існує, і я можу прокрутити їх, щоб переглянути їх знову.
Еоніл

26
Не те, що просили. Це очищає історію, а не поточний буфер, які є двома дуже різними речами.
Шон Камерон

1
Не те, що просили, а шкідливе ; Мене це просто покусало, і моя історія містила важливі речі.
Елазар

0

Спробуйте це, якщо ви перевантажені результатом, якщо хочете фільтру

активність adb -d оболонки dumpsys | grep ActivityRecord


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.