Powershell alias

В cmd, равно как и в bash, существуют alias — сокращения, позволяющие выполнять несколькими символами длинные команды.

В частности, для ConEmu я написал пару алиасов следующего содержания: alias v="%ConEmuDir%\vim\vim.exe" -new_console:s50V:noR:d:"%CD%":C:"%ConEmuDir%\icons\pidi-icons\dark\tool.ico":W:"%Conemudir%\Backgrounds\outlets.png" $* и alias vh="%ConEmuDir%\vim\vim.exe" -new_console:s50H:noR:d:"%CD%":C:"%ConEmuDir%\icons\pidi-icons\dark\tool.ico":W:"%Conemudir%\Backgrounds\outlets.png" $*

Эти команды позволяют открывать редактор vim в отдельной вкладке ConEmu, которая будет располагаться справа от или внизу под экраном действующего терминала. Параметры команды -new_console: s50V = открыть новую консоль с разделением экрана вертикально на 50%; noR = disable «Press Enter or Esc to close console», don't enable «Long console output» when starting command from Far Manager, force start hooks server in the parent process; d:"%CD%" = установить текущую директорию для открываемой консоли; C:"%ConEmuDir%\icons\pidi-icons\dark\tool.ico" = установить иконку; W:"%Conemudir%\Backgrounds\outlets.png" = установить фон. "$*" передаёт развернутой команде все параметры, которые были переданы самому алиасу.

Мне понравился Powershell, так что я решил сделать такие же алиасы там, однако это оказалось не так-то просто.

Powershell не умеет делать длинные алиасы — для этого необходимо создавать функцию, и делать алиас уже на неё. Если мы хотим создать алиас vv (vim vertical), то это можно сделать так:

Function VimVertical {
   <...>
}

New-Alias -Name vv -Value VimVertical

Казалось бы, вполне очевидно переписать "%ConEmuDir%\vim\vim.exe" на ${env:ConEmuDir}\vim\vim.exe, однако это не сработает, он будет ругаться. Также возникают проблемы с обработкой кавычек, которые необходимо передавать в ConEmu именно в таком виде.

Через немалое время в поисковике было выяснено, что нужно поставить перед такой командой амперсанд (&). Кавычки экранируются символом `, а аргументы полностью передаются параметром $args.

В итоге получилось следующее:

Function VimVertical {
   & ${env:ConEmuDir}\vim\vim.exe -new_console:s50V:noR:C:`"${env:ConEmuDir}\icons\pidi-icons\dark\tool.ico`":W:`"${env:ConEmuDir}\Backgrounds\outlets.png`" $args
}

New-Alias -Name vv -Value VimVertical

Ну и до кучи сделал алиасы на системные папки:

Function Go-Downloads
{
   chdir $env:USERPROFILE\Downloads
}

New-Alias -Name dl -Value Go-Downloads -Force

Function Go-Home
{
   chdir $env:USERPROFILE
}

New-Alias -Name ~ -Value Go-Home -Force

Function Go-Documents
{
   chdir $env:USERPROFILE\Documents
}

New-Alias -Name docs -Value Go-Documents -Force

Пока всё.