другое,

Улучшение командной строки в PowerShell, WSL, Windows Terminal и VS Code

Mar 12, 2022 · 10 мин. на прочтение
Улучшение командной строки в PowerShell, WSL, Windows Terminal и VS Code
Поделиться

Последнее время стало модным использовать продвинутую командную строку в PowerShell или bash/zsh. В этой статье я расскажу, что нужно сделать в PowerShell, WSL, Windows Terminal и VS Code, чтобы кастомизировать командную строку и воспользоваться всеми её преимуществами.

assets/images/oh-my-posh/1.png

Краткий план действий:

Из официальной документации я мало что понял. Пришлось разбираться самому. Поэтому сейчас я по порядку опишу путь, который пришлось пройти мне, чтобы заставить всё работать как надо.

Установка шрифта Nerd

assets/images/oh-my-posh/5.png

На картинке выше, показаны некоторые варианты оформления (тем) командной строки. На самом деле таких тем много, и вы можете их изменять и создавать свои. Как вы видите, почти все варианты содержат глифы (графические символы). Если шрифт, который используется в терминале, не содержит соответствующие глифы, в командной строке могут появиться символы замены, например квадрат - ▯ или знак вопроса �. Чтобы в терминале отображались все глифы, нужно сначала установить шрифт Nerd с сайта проекта https://www.nerdfonts.com/.

Nerd Fonts улучшает предназначенные для разработчиков шрифты с большим количеством глифов (значков). В частности, чтобы добавить большое количество дополнительных глифов из популярных «культовых шрифтов», таких как Font Awesome, Devicons, Octicons и других.

Посмотрев несколько шрифтов, я остановил свой выбор на Caskaydia Cove Nerd Font.

Все шрифты можно посмотреть по ссылке https://www.nerdfonts.com/font-downloads.

Скачав нужный шрифт, нужно его установить. Заходим в архив, выбираем нужный шрифт и открываем его.

assets/images/oh-my-posh/3.png

А затем, в открывшемся окне, нажимаем кнопку Install

assets/images/oh-my-posh/4.png

Шрифт установлен, можно переходить к следующему шагу - установке Oh My Posh.

Установка и настройка Oh My Posh для PowerShell

Как сказано в официальной документации, Oh My Posh — это настраиваемый механизм командной строки, для любой оболочки, которая имеет возможность настроить командную строку с помощью функции или переменной. Чтобы воспользоваться этим механизмом в PowerShell, нужно установить и импортировать соответствующий модуль.

Но это может не получится, если параметр ExecutionPolicy в PowerShell установлен в Restricted или иное значение, которое не позволяет запускать удалённые скрипты. Что бы проверить текущие политики, выполните команду Get-ExecutionPolicy. Чтобы их изменить, запустите PowerShell от имени администратора и выполните команду и нажмите Y, а затем Enter для подтверждения.

Set-ExecutionPolicy RemoteSigned

Это позволит вам установить нужный модуль.

assets/images/oh-my-posh/6.png

ВНИМАНИЕ: После изменения ExecutionPolicy закройте окно PowerShell, которое вы открывали с повышенными привелегиями и откройте новое, с правами обычного пользователя.

Чтобы установить модуль Oh My Posh выполните следующую команду.

Install-Module oh-my-posh -Scope CurrentUser

Если пакетный менеджер NuGet ещё не установлен, то PowerShell запросит разрешение на его установку. Введите Y и нажмите Enter.

Далее вас предупредят, что вы собираетесь ставить модуль из недоверенного репозитория PSGallery. На самом деле всё нормально. Просто изначально все репозитории считаются недоверенными. Можете смоело продолжать установку введя Y и нажав Enter.

assets/images/oh-my-posh/7.png

Обновите профиль PowerShell, отредактировав файл Microsoft.PowerShell_profile.ps1. Самым простым способом открытия этого файла, явялется выполнение следующей команды.

notepad $PROFILE

Если файла не существует, то система предложет вам его создать. Нажмите Yes в диалоговом окне.

assets/images/oh-my-posh/8.png

Добавьте следующий фрагмент в конце файла. Вместо jandedobbeleer можете написать название другой темы. Я для себя выбрал именну эту.

Import-Module oh-my-posh
Set-PoshPrompt -Theme jandedobbeleer

Сохраните и закройте файл. Теперь каждый новый экземпляр PowerShell будет запущен с импортом Oh My Posh и установкой темы командной строки.

Запустите новый экземляр PowerShell. При первом запуске вы можете увидеть процесс импорта установленного ранее модуля Oh My Posh. Он выполниться один раз. Все последующие запуски PowerShell будут проходить как обычно.

assets/images/oh-my-posh/9.png

После запуска вы увидите обновлённую командную строку, как показано на картинке ниже. Обратите внимание, что не все символы отображаются корректно. Это связано с тем, что в терминале PowerShell сейчас используется шрифт, который не поддерживает глифы.

assets/images/oh-my-posh/10.png

Зайдите в настройки терминала PowerShell и выберите шрифт с поддержкой глифов, который вы установили ранее. Или установите его сейчас, если вы пропустили этот шаг.

assets/images/oh-my-posh/13.png

assets/images/oh-my-posh/11.png

Как установить шрифт с поддержкой глифов, смотри в начале статьи.

Как только вы установите нужный шрифт, вы сразу же увидите правильное отображение командной строки.

assets/images/oh-my-posh/12.png

Установка и настройка Oh My Posh для WSL

Если вы используете Windows 10 версии 2004 и выше (Build 19041 и выше) или Windows 11, и у вас ещё не установлен WSL, но вы хотите его установить, то запустите команду wsl --install в терминале powershell с повышенными привилегиями, а после установки WSL перезапустите Windows. После перезапуска, установка продолжится. Более подробные сведения об установке и настройке WSL смотрите в моей статье “Установка и настройка WSL” (comming soon...)

Для установки Oh My Posh в Linux (WSL) нам потребуется пакетный менеджер Homebrew. Поэтому сначала запустите WSL и установите там Homebrew, выполнив следующую команду и следуйте инструкциям в окне терминала.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

После того, как Homebrew будет установлен, нужно выполнить неколько команд, чтобы добавить Homebrew в PATH и в профиль командной оболочки bash.

test -d ~/.linuxbrew && eval "$(~/.linuxbrew/bin/brew shellenv)"
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
test -r ~/.bash_profile && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.bash_profile
echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.profile

После установки и настройки Homebrew, можно приступать к установке Oh My Posh. Выполните следубщие команды.

brew tap jandedobbeleer/oh-my-posh
brew install oh-my-posh

Установите пакет unzip. Он понадобится для распаковки архива с темами. Этот шаг можно пропустить, если вы скачаете тему самостоятельно, извлекёте из архива файл с темой для Oh My Posh и положите его в домашнюю директорию пользователя. Иначе, выполните нижеследующие команды.

sudo apt install unzip

Теперь нужно скачать и распаковать темы.

mkdir -p $(brew --prefix)/oh-my-posh/themes
wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/themes.zip -O $(brew --prefix)/oh-my-posh/themes/themes.zip
unzip $(brew --prefix)/oh-my-posh/themes/themes.zip -d $(brew --prefix)/oh-my-posh/themes
chmod u+rw $(brew --prefix)/oh-my-posh/themes/*.json
rm $(brew --prefix)/oh-my-posh/themes/themes.zip

Скопируйте файл темы в домашнюю директорию.

cp $(brew --prefix)/oh-my-posh/themes/jandedobbeleer.omp.json ~/jandedobbeleer.omp.json

А затем запустите oh-my-posh.

test -e ~/jandedobbeleer.omp.json && eval "$(oh-my-posh --init --shell bash --config ~/jandedobbeleer.omp.json)"

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

assets/images/oh-my-posh/23.png

На этом установка и настройка Oh My Posh для WSL завершена.

Настройка Windows Terminal для правильного отображения глифов

После запуска Windows Terminal вам нужно будет тольк сменить шрифт, иначе командная строка будет отображаться без глифов.

assets/images/oh-my-posh/16.png

Чтобы это исправить, зайдите в настройки Windows Terminal, выберите профиль по умолчанию и на вкладке Appearance установите нужный шрифт. Затем нажмите Save и откройте новое окно терминала.

assets/images/oh-my-posh/17.png

На этот раз командная строка будет отображать глифы, но есть одна проблема. При открытии WSL-терминала, первая командная строка отображается с дефектом. В ней присутствуют пропуски. Я не понял почему это происходит. Если нажать Enter, то следующая строка отобразиться нормально.

assets/images/oh-my-posh/18.png

Я не придумал ничего лучше, чем добавить команду очистки экрана в файл .profile, чтобы она выполнялась каждый раз, при запуске сессии. Вы тоже можете это сделать, выполнив следующую команду.

echo "clear" >> ~/.profile 

Теперь, если переоткрыть терминал, то всё будет выглядеть как надо.

assets/images/oh-my-posh/19.png

И на этом часть по настройке Windows Terminal завершена. Посмотрите другю мою статью, где я описываю, как настроить более приятный вид Windows Terminal (comming soon...).

Настройка VS Code для правильного отображения глифов

Если вы откроете VS Code, и в нём откроете Terminal, то вы увидите, что глифы в нём тоже отображатся неправильно. Всё дело в настройках шрифтов.

assets/images/oh-my-posh/24.png

Зайдите в настройки, выберите Terminal, пролистайте до настройки Integrated: Font Family и введите название своего шрифта. В моём случае это CaskaydiaCove NF. Полное название настройки terminal.integrated.fontFamily, можете вбить её в строку поиска настроек, для быстрого перехода к ней.

assets/images/oh-my-posh/20.png

Если вы используете плагин Remote - WSL в VS Code, то возможно вам пригодится ещё один совет. Дело в том, что когда вы откроете новую сессию в WSL в VS Code, то заметите, что там ничего не поменялось. VS Code, при запуске bash в WSL, не читает данные из файла .profile, которые мы туда поместили.

assets/images/oh-my-posh/21.png

Чтобы это исправить, можно ввести команду

bash -l

Параметр -l (согласно справочной странице) заставляет «bash действовать так, как если бы он был вызван как оболочка входа в систему». Оболочки входа читают определенные файлы инициализации из вашего домашнего каталога, такие как .profile.

Но чтобы не делать это каждый раз вручную, давайте изменим конфигурацию VS Code.

К уже имеющимся настройкам, если они есть, добавьте следующие.

assets/images/oh-my-posh/22.png

"terminal.integrated.defaultProfile.linux": "bash",
    "terminal.integrated.profiles.linux": {
        "bash": {
            "path": "bash",
            "args": [
                "-l"
            ]
        }
    }

Сохраните и перезапустите WSL-сессию. На этот раз у Вас всё должно отображаться правильно.

Вот и всё, чем я хотел поделиться в этой статье. Оставльяйте свои комментарии и отзывы. Всем мира и добра!

Заходите в группу Telegram
Если есть вопросы или хотите пообщаться, то заходите в мою группу Telegram.