Вопрос или проблема
Когда я использую vagrant на Windows, я иногда обнаруживаю, что новые строки не обрабатываются должным образом. Это обычно происходит после выполнения vagrant ssh
. В результате текст выглядит следующим образом:
This machine with the name 'default' was not found
configured for this environment.
В bash, когда происходит такая ошибка терминала, я могу выполнить команду reset
, и это очищает и сбрасывает настройки терминала. Как я могу сделать что-то похожее в Powershell/CMD, чтобы не приходилось закрывать окно и начинать новый сеанс powershell/cmd?
Хотя это не замена команде Linux reset
, этот скрипт PowerShell обновит ширину буфера окна вашего PowerShell в соответствии с шириной окна, что может исправить упомянутые вами проблемы с выравниванием.
Я использую этот скрипт, чтобы убрать горизонтальную полосу прокрутки, которая появляется, когда я уменьшаю окно по горизонтали.
function reset {
Set-Buffer-Width-To-Screen-Width
Clear-Host
}
function Set-Buffer-Width-To-Screen-Width {
$h = Get-Host
$ui = $h.UI.RawUI
$bufferSize = $ui.BufferSize
$windowSize = $ui.WindowSize
$bufferSize.Width = $windowSize.Width
$ui.BufferSize = $bufferSize
}
Используйте CLS
как в командной строке, так и в PowerShell.
Примечание: В PowerShell CLS
технически является псевдонимом команды Clear-Host
.
CLS Очистить экран – Windows CMD – SS64
Синтаксис:
CLS
Если CLS направлен в файл, на консоль или выполняется через FOR /F, он выведет символ перевода строки (ASCII 10).
Ошибки:
Если экран успешно очищен, %ERRORLEVEL% =
не изменяется (это ошибка). Если задан неверный переключатель = 1
Clear-Host – PowerShell – SS64 Clear-Host
Очистить экран.
Синтаксис:
Clear-Host
Стандартные псевдонимы для Clear-Host:
clear
,cls
Насколько я могу судить, нет встроенной команды Windows, эквивалентной “reset” в Linux.
Однако, можно легко создать свою собственную. Вам просто нужно выдать последовательность “(ESC)c” в терминал. Это можно сделать из bat-файла.
Используя редактор, который поддерживает управляющие символы, такие как этот (я использовал Notepad++, похоже, ни Windows Notepad, ни VSCode не могут использоваться при моем быстром проверке), создайте bat-файл с строкой:
echo (ESC)c
(Это специальный символ “ESC”, вводимый с помощью ALT+027, а не буквально “(ESC)”).
Выполнение указанного bat-файла “полностью” сбросит терминал. (По крайней мере, такие вещи как перенос строк, видимость курсора, цвета…)
Ответ или решение
Сброс терминала в операционных системах позволяет восстановить его исходные настройки, когда в процессе работы с ним происходят различные коллизии, такие как проблемы с разметкой текста или некорректные переходы на новую строку. В частности, при работе с vagrant
на Windows такие проблемы могут возникать после команд типа vagrant ssh
. В мире Linux задача решается простой командой reset
. Однако, Windows не поддерживает аналогичное решение по умолчанию для PowerShell и CMD. Тем не менее, существует несколько подходов, к которым стоит прибегнуть для достижения схожих результатов.
Теория
Команда reset
в Linux эффективно очищает экран и восстанавливает исходные параметры терминала, такие как настройки цвета, разметку, а также убирает нежелательные изменения в состоянии терминала. Это очень удобно при сбоях в визуализации, вызванных, например, удалёнными сессиями подключения.
В Windows PowerShell и Command Prompt аналогичного инструмента не предусмотрено. Вместо этого можно использовать комбинацию команд и скриптов для частичного достижения того же эффекта. Это особенно важно для пользователей, активно работающих в средах с неоднородными настройками, например, при запуске виртуальных машин или удалённых сеансов.
Пример
Один из способов частично сбросить настройки терминала в Windows PowerShell — это использование скрипта, который адаптирует размер буфера к текущим размерам окна. Рассмотрим следующий скрипт:
function reset {
Set-Buffer-Width-To-Screen-Width
Clear-Host
}
function Set-Buffer-Width-To-Screen-Width {
$h = Get-Host
$ui = $h.UI.RawUI
$bufferSize = $ui.BufferSize
$windowSize = $ui.WindowSize
$bufferSize.Width = $windowSize.Width
$ui.BufferSize = $bufferSize
}
С помощью этого скрипта можно устранить проблемы с «ломаной» разметкой текста и избавиться от горизонтального ползунка. Также можно использовать команду CLS
для очистки экрана, которая является эквивалентом команды Clear-Host
в PowerShell.
Применение
-
Создание и использование скрипта:
- В PowerShell можно создать функцию
reset
, как показано в примере выше. Она выполнит две операции: установка ширины буфера, чтобы она соответствовала текущему окну, и очистка экрана командойClear-Host
. - После создания функции, её можно вызывать просто введя
reset
в терминал.
- В PowerShell можно создать функцию
-
Альтернативный подход с batch файлом:
- Можно использовать batch файл, чтобы передать терминалу ESC-последовательность, «перезагружающую» его настройки. Это можно сделать через текстовый редактор, поддерживающий контрольные символы, например, Notepad++.
- Создайте файл со строкой
echo (ESC)c
, где(ESC)
замените на соответствующий символ, используя ALT+027. Запуск такого файла выполнит программный сброс терминала.
Заключение
Хотя в Windows нет прямого аналога команды reset
, пользователи PowerShell или CMD могут вручную настроить свои сессии терминала для устранения нестандартного поведения. Использование указанных методов поможет быстро решить большинство проблем, связанных с нарушением разметки и стабильной работы терминала. При этом речь идёт скорее о настройке и улучшении работы уже действующего инструмента, чем о полном его сбросе, как в случае с reset
в Linux.
Учитывая разнообразие задач в IT, крайне важно понимать, как можно гибко управлять доступными инструментами вашего рабочего окружения для обеспечения максимальной эффективности работы.