如何像POSH Git一样添加powershell自动完成

如何像POSH Git一样添加powershell自动完成,git,powershell,posh-git,Git,Powershell,Posh Git,我正在为powershell使用POSH git,例如 git checkout mini<tab> 我想为git checkout创建一个别名gco gco mini<tab> 是否可以将制表符完成转发给高级git处理程序?没有“git处理程序”这样的东西。posh git shell所做的唯一一件事就是用自己的实现替换默认的TabExpansion函数 您需要修改它们的实现以获得所需的行为 如果要修改它,只需在posh git shell中运行以下命令: note

我正在为powershell使用POSH git,例如

git checkout mini<tab>
我想为git checkout创建一个别名gco

gco mini<tab>
是否可以将制表符完成转发给高级git处理程序?

没有“git处理程序”这样的东西。posh git shell所做的唯一一件事就是用自己的实现替换默认的TabExpansion函数

您需要修改它们的实现以获得所需的行为

如果要修改它,只需在posh git shell中运行以下命令:

notepad (Get-Command TabExpansion).ScriptBlock.File
您可以用您选择的编辑器替换记事本

编辑

在这种特殊情况下,几乎没有办法做到这一点。尽管我不会投入太多的时间,但由于这个实现的复杂性,我会尝试说服tab函数您实际使用了“git checkout”:

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

顺便说一句:没有办法在PowerShell中创建这样的别名:PowerShell中的别名可以替换命令,而不是命令+参数(对于后者,您需要定义函数)。

有一种简单的方法可以通过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
那么短,但其他gitter可能会识别
git co
而不是
gco

Ok。这很有趣,但不清楚我将如何编辑该文件,为gco添加一个单独的选项卡扩展,使其行为类似于git CommittedModified answer,并使用一种可能(而且可能是最直接的)方法来实现这一目标。我找到了一种更好的非侵入式方法,使用PowerTab扩展来实现这一点。
git config --global alias.co checkout
git co develop