Как добавить автозаполнение PowerShell, как POSH Git

Я использую POSH Git для PowerShell и может сделать, например,

git checkout mini<tab>

и я получаю

git checkout minidisk

Я хотел бы создать псевдоним gco для git checkout, чтобы сделать

gco mini<tab>

получить

gco minidisk

Можно ли перенаправить завершение табуляции в обработчик POSH git?

3 ответа

Нет такой вещи как "git handler". Единственное, что делает шикарная оболочка - это замена функции TabExpansion по умолчанию собственной реализацией.

Вам нужно изменить их реализацию, чтобы получить поведение, которое вы хотите.

Если вы хотите изменить его, просто запустите эту команду в оболочке posh-git:

notepad (Get-Command TabExpansion).ScriptBlock.File

Вы можете заменить блокнот на ваш редактор по вашему выбору.

РЕДАКТИРОВАТЬ

Есть несколько способов сделать это в данном конкретном случае. Несмотря на всю сложность этой реализации, хотя я бы не стал тратить слишком много времени, я просто попытался бы убедить функцию табуляции в том, что вы действительно использовали 'git checkout':

function TabExpansion($line, $lastWord) {
   $line = $line -replace '^gco ', 'git checkout '
   # rest of the function as it is...

Кстати, в PowerShell нет способа создания псевдонима: псевдонимы в PowerShell могут заменять команду, а не команду + аргументы (для последнего вам потребуется определить функцию).

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

# Load posh-git example profile
. 'C:\tools\poshgit\dahlbyk-posh-git-c481e5b\profile.example.ps1'


# Create a function for registering alias's that support tab expansion
function Register-TabExpansion-Alias([string]$alias, [string]$expansion) {

    Invoke-Expression "function global:$alias { $expansion `$args }"

    Register-TabExpansion -Name $alias -Type Command {
        param($Context, [ref]$TabExpansionHasOutput, [ref]$QuoteSpaces) 

        $Argument = $Context.Argument
        if ( $Argument -notlike '^\$' ){
            $TabExpansionHasoutput.Value = $true 
            TabExpansion "$expansion $Argument"
        }
    }.GetNewClosure()
}

Register-TabExpansion-Alias "gco" "git checkout"
Register-TabExpansion-Alias "grb" "git rebase"

Другой вариант - использовать псевдонимы git, например

git config --global alias.co checkout

Теперь вы можете использовать:

git co develop

Не совсем короткий как gco но другие раздражители, вероятно, признают git co над gco,

Другие вопросы по тегам