Содержание статьи
- Проверка команд
- Автоматическое завершение команд
- Повтор команд из истории
- Ввод команды в несколько строк
- Настраиваем комбинации клавиш при работе в командной строке: Модуль PSReadLine
- Basic editing functions
- Интеграция с Git: модуль posh-git
- Оформляем приглашение командной строки: модуль Oh My Posh
- Установка шрифтов Powerline
- Установка модуля Oh My Posh
- Оформляем списки файлов и каталогов: модуль Terminal-Icons
- Выводы
Представь себе, насколько приятно пользоваться терминалом и оболочкой, которые отображают полезную информацию (например, состояние репозитория Git), подсказывают нужные команды и проверяют их корректность, позволяют выполнять постоянно повторяемые действия несколькими нажатиями клавиш.
В сети можно найти много информации о приемах работы в командных оболочках операционных систем macOS и Linux и об инструментах для их настройки. Например, для популярной современной оболочки Zsh разработан специальный фреймворк Oh My Zsh, который упрощает управление конфигурациями, темами и плагинами для расширения функциональности консоли.
О стандартной для Windows оболочке PowerShell (которая, кстати, кросс‑платформенная, ей можно пользоваться во всех операционных системах) говорят и пишут реже. Чтобы устранить этот пробел, я посвятил ее особенностям, использованию и возможностям целую книгу «Современный PowerShell», второе издание которой вышло буквально месяц назад. Многие просто не знают о стандартной функциональности PowerShell и считают, что этот командный интерпретатор значительно уступает тому же Zsh по удобству работы и возможностям кастомизации. В этой статье я постараюсь показать, что это не так, и расскажу, какие встроенные возможности и дополнительные модули (в том числе Oh My Posh) помогут тебе сделать свою работу в консоли PowerShell более производительной, удобной и приятной.
Проверка команд
Оболочка PowerShell анализирует команду по мере ее набора, не дожидаясь завершения ввода. При этом названия команд, параметров и переменных, а также ключевые конструкции и другие элементы языка отображаются разным цветом. Это помогает лучше понять структуру команд и снижает вероятность ошибки при наборе.
Если при наборе команды получается синтаксически неверная конструкция (например, мы забыли поставить закрывающую скобку или не написали команду после знака конвейера), то последний знак >
в приглашении командной строки окрасится в красный цвет.
Автоматическое завершение команд
Работая в терминале, совсем не обязательно полностью набирать длинные команды с несколькими параметрами. PowerShell поддерживает автоматическое завершение разных частей своих команд:
- пути к файлам и каталогам в файловой системе. В записи путей файловой системы можно использовать шаблонные символы:
?
(заменяет один произвольный символ) и*
(заменяет любое количество произвольных символов); - имена самих команд PowerShell и их параметров;
- имена переменных, определенных в оболочке;
- имена свойств и методов объектов.
Возможностью автоматического завершения команд можно пользоваться в двух режимах — подстановка единичного значения или выбор из всех возможных вариантов.
Нажимая клавишу Tab, мы будем циклически перебирать все возможные варианты по одному. Например, введем в командной строке PowerShell первую часть имени командлета, глагол get
:
PS C:\Users\andrv> get-
Нажмем клавишу Tab, в командной строке первый подходящий командлет:
PS C:\Users\andrv> Get-Acl
Еще раз нажав Tab, получим следующий по алфавиту командлет:
PS C:\Users\andrv> Get-Alias
Нажимая далее клавишу Tab, мы можем перебрать все командлеты, начинающиеся с глагола Get
.
Посмотрим, как PowerShell может помочь при наборе свойств и методов объектов. Введем следующие команды:
PS C:\Users\andrv> $s='qwerty'
PS C:\Users\andrv> $s.len
Нажмем клавишу Tab:
PS C:\Users\andrv> $s.Length
Оболочка автоматически подставила свойство Length
, имеющееся у символьных переменных. Если подставляется имя метода (функции), а не свойства, то после его имени автоматически ставится круглая скобка. Например, введем следующую команду:
PS C:\Users\andrv> $s.sub
Нажмем клавишу Tab:
PS C:\Users\andrv> $s.Substring(
Теперь можно вводить параметры метода Substring
.
Для завершения ввода команды удобнее не перебирать варианты по одному, а посмотреть на их полный список и выбрать в нем нужный пункт. Такое меню с вариантами автодополнения открывается по нажатию комбинации клавиш Ctrl-пробел. По предложенным вариантам можно переходить с помощью клавиш со стрелками либо нажимая начальные буквы команд. Для вставки в командную строку выбранного варианта нужно нажать Enter.
Например, если после имени команды через пробел набрать знак тире и нажать Ctrl-пробел, то ты увидишь список всех параметров, поддерживаемых этой командой. Для текущего выбранного свойства на экране отображается его тип.
Чтобы быстро посмотреть все имеющиеся у объекта свойства и методы, нужно ввести его имя, точку и нажать Ctrl-пробел. Для свойств будет указан их тип, а для методов — список аргументов и тип возвращаемого значения.
Повтор команд из истории
Для циклического просмотра истории выполнявшихся команд используются клавиши управления курсором ↑ (предыдущая команда) и ↓ (следующая команда). Выбранную команду из истории можно сразу выполнить или изменить нужным образом.
Если ты помнишь только часть команды (необязательно с начала), то по ней можно найти подходящие варианты среди тех команд, которые выполнялись в оболочке раньше. Строка для поиска в таком режиме активируется нажатием комбинации клавиш Ctrl-r (поиск по истории команд назад) или Ctrl-s (поиск по истории команд вперед). При этом поиск будет инкрементальным, то есть результат уточняется после ввода каждой новой буквы.
Также, кроме автоматического завершения частей команд, PowerShell поддерживает технологию автодополнения IntelliSense, когда оболочка сразу выдает подходящий завершенный вариант из списка вводившихся ранее команд. Принять предложенный вариант можно одним нажатием клавиши «вправо».
По умолчанию режим IntelliSense в PowerShell отключен, активировать его в текущей сессии можно следующей командой:
Set-PSReadLineOption -PredictionSource 'History'
Ввод команды в несколько строк
По умолчанию нажатие клавиши Enter при наборе команды завершает ее ввод, после чего оболочка определяет, чем является введенная строка:
- синтаксически верной завершенной командой или выражением PowerShell. В этом случае команда выполняется (выражение вычисляется) и оболочка переходит к приему следующей команды;
- корректной незавершенной командой или выражением PowerShell, которые могут быть продолжены после пробела. В таком случае ввод команды продолжается на следующей строке (символ перевода строки при этом рассматривается как обычный разделяющий пробел).
Например, вычислим значение выражения 10+2-3+(5*4-3), расположив его на трех строках:
PS C:\Users\andrv> 10+
〉〉 2-3+(
〉〉 5*4-3)
26
Как видим, приглашение при вводе дополнительных строк меняется на символы 〉〉
— это признак того, что продолжается ввод предыдущей команды.
Таким образом, многословные команды можно располагать на нескольких строках. При этом можно свободно перемещаться по строкам команды, изменять их, добавлять новые строки выше и ниже текущей строки. Новая строка после текущей вставляется по нажатию комбинации Shift-Enter, а перед текущей строкой — по нажатию Ctrl-Enter.
Но как быть, если ты набрал синтаксически верную команду с несколькими параметрами и ее нужно продолжить на новой строке, а не выполнить? В этом случае последним символом в строке нужно ввести обратный апостроф ` и нажать Enter. После этого ввод команды продолжится со следующей строки.
PS C:\Users\andrv> Get-Process `
-Name powershell
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
688 45 58568 77196 3,59 14916 3 powershell
Настраиваем комбинации клавиш при работе в командной строке: Модуль PSReadLine
Если некоторые из описанных выше возможностей на твоем компьютере не работают, то это может быть связано с отсутствием в оболочке подключенного модуля PSReadLine. В Windows PowerShell 5.1 для Windows 10/11 и в кросс‑платформенных версиях PowerShell этот модуль должен быть установлен по умолчанию. Увидеть список подключенных модулей и проверить наличие в нем PSReadLine можно с помощью команды Get-Module:
PS C:\Users\andrv> Get-Module | Select Name, Version
Name Version
Microsoft.PowerShell.Management 3.1.0.0
Microsoft.PowerShell.Security 3.0.0.0
Microsoft.PowerShell.Utility 3.1.0.0
Microsoft.WSMan.Management 3.0.0.0
PSReadline 2.1.0
Подробную информацию о модуле PSReadLine можно посмотреть следующим образом:
PS C:\Users\andrv> Get-Module PSReadline | Format-List
Name : PSReadline
Path : C:\Program Files\WindowsPowerShell\Modules\
PSReadline\2.1.0\PSReadLine.psm1
Description : Great command line editing in the PowerShell
console host
ModuleType : Script
Version : 2.1.0
NestedModules : {Microsoft.PowerShell.PSReadLine2}
ExportedFunctions : PSConsoleHostReadLine
ExportedCmdlets : {Get-PSReadLineKeyHandler, Get-PSReadLineOp
tion, Remove-PSReadLineKeyHandler, Set-PSRe
adLineKeyHandler...}
ExportedVariables :
ExportedAliases :
Если модуль PSReadLine не обнаружен, то его нужно установить с помощью следующей команды:
Install-Module PSReadLine -Force -Scope CurrentUser -SkipPublisherCheck
В PSReadLine определены сочетания клавиш для выполнения различных действий, в том числе для редактирования текста в командной строке. Например:
Клавиатурная комбинация | Действие |
---|---|
Ctrl-влево | Перемещение курсора влево на одно слово |
Ctrl-вправо | Перемещение курсора вправо на одно слово |
Home | Перемещение курсора в начало текущей строки |
End | Перемещение курсора в конец текущей строки |
Ctrl-Home | Удаление символов от текущей позиции курсора до начала строки |
Ctrl-End | Удаление символов от текущей позиции курсора до конца строки |
Esc | Очистка строки (удаление всех введенных символов) |
Ctrl-z | Отмена изменений |
Ctrl-y | Повтор изменений |
Посмотреть все поддерживаемые клавиатурные комбинации и операции можно с помощью команды Get-PSReadlineKeyHandler
:
PS C:\Users\andrv> Get-PSReadlineKeyHandler
Basic editing functions
Key Function Description
Enter AcceptLine Accept the input or move to the
next line if input is missing
a closing token.
Shift+Enter AddLine Move the cursor to the next line
without attempting to execute
the input
Backspace BackwardDeleteChar Delete the character before the
cursor
Ctrl+h BackwardDeleteChar Delete the character before the
cursor
Ctrl+Home BackwardDeleteLine Delete text from the cursor to
the start of the line
Ctrl+Backspace BackwardKillWord Move the text from the start of
the current or previous word to
the cursor to the kill ring
Ctrl+w BackwardKillWord Move the text from the start of
the current or previous word to
the cursor to the kill ring
Ctrl+C Copy Copy selected region to the sys
tem clipboard. If no region is
selected, copy the whole line
...
Каждая операция, поддерживаемая PSReadLine, здесь отнесена к одной из категорий:
- Basic editing functions — основные функции редактирования;
- Cursor movement functions — функции для перемещения курсора;
- History functions — функции для работы с историей команд;
- Completion functions — функции автодополнения при вводе;
- Miscellaneous functions — различные функции;
- Selection functions — функции для выделения текста;
- Search functions — функции для поиска символов в строке ввода.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»