Как добавить автозаполнение 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
,