繁体   English   中英

如何添加像POSH Git一样的PowerShell自动完成功能

[英]How to add powershell autocomplete like POSH Git

我正在使用POSH git for powershell,例如可以做

git checkout mini<tab>

我明白了

git checkout minidisk

我想为git checkout创建一个别名gco来做

gco mini<tab>

要得到

gco minidisk

是否可以将标签完成转发给POSH git处理程序?

没有“git handler”这样的东西。 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...

BTW:在PowerShell中无法创建类似的别名:PowerShell中的别名可以替换命令,而不是命令+参数(对于后者,您需要定义函数)。

有一种简单的方法可以通过PowerTab powershell插件添加自己的选项卡扩展挂钩。 一旦安装了PowerTab。 (您可以通过使用管理员权限shell巧妙地执行此操作),然后在您的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 over gco

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM