Командная строка и Windows

Надо признать, что время не стоит на месте и за те 9 лет что я не работал с Windows много что изменилось. Довольно неожиданным для меня открытием оказалось современное состояние командной строки на Windows, которая дошла до некого рабочего состояния. Не совсем, конечно, Vim так же хреново работает как и раньше, но всё же. Итак, как сделать окружение Windows относительно удобным для того, кто привык к *NIX.

CMD – страшное творение майкрософтовского гения застрявшее в начале 90-х. Совершенно никуда не годное чудовище, которое заменяется на ConEmu и PowerShell.

ConEmu дает великолепную расширяемую консоль, а PowerShell оказался вполне себе хорошим шеллом, пусть и слегка не дотягивающим до идеала уровня Zsh, но всё равно очень достойным решением. По умолчанию конфигурация немного не удобная, но после небольших косметических улучшений заданных через profile.ps1 работа стала ощутимо удобнее.

Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete

function prompt {
  $p = Split-Path -leaf -path (Get-Location)
  "$p> "
}

Set-Alias -Name vim -Value nvim

Функция MenuComplete включает меню-подобное дополенние для команд PowerShell и доступных приложений, которое, к сожалению, не работает для подкоманд самого приложения. Тоесть gi+`tab` выдаст предложение дополнить до git, но git pu+`tab` уже не выдаст предложения дополнить до git push, что работает для Zsh.

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

Приятным открытием было наличие в PowerShell алиасов для приложений, так я сразу же перенаправил Vim, установленный Git на NeoVim при помощи встроенной команды Set-Alias.

Из привычных команд, которые нашлись в PowerShell можно отметить ii ., которая открывает в Explorer текущую директорию и аналог which под именем Get-Command. Как и положенно работает поиск в истории команд через ctrl+r.

Так же в наличии имеются алиасы для директорий следующего вида:

$prj='C:\Users\user_name\projects\'
...
cd $prj

По умолчанию PowerShell откажется исполнять profile.ps1 на старте так как он не подписан, но это легко исправляется следующим образом (наверное, должен существовать более правильный способ, но для меня и этот сгодился):

Set-ExecutionPolicy -ExecutionPolicy Bypass

После того как я осознал, что нормальная консоль для Windows всё же есть, вторым приятным открытием для меня оказалось приложение Chocolatey, представляющее собой очень продвинутый пакетный менеджер для Windows с возможность установки и обновления приложений. В нем нашлось и нормально установилось почти всё, что мне было нужно: cURL, LLVM, Python, NeoVim, CMake и т.д. Установка ничем не сложнее чем через Brew или Apt. Например так выглядит установка CMake для всех пользователей с автоматическим ответом Yes на все запросы в процессе установки.

choco install cmake.install --installargs '"ADD_CMAKE_TO_PATH=System"' -y

Теперь осталось понять как настроить полноценную работу в Vim, так как я временно сижу в пусть и не плохом, но всё же не дотягивающем по удобству для меня CLion и можно будет сказать что Windows стал адекватной средой разработки

Leave a Reply