$scriptblock = { param($wordToComplete, $commandAst, $cursorPosition) $words = $commandAst.ToString() if ( $wordToComplete ) { $matches = (($words[0..$cursorPosition] -join '') | Select-String -Pattern "\s+" -AllMatches).Matches if ( $matches ) { $cursorPosition = $matches[-1].Index - 1 } } $words = $words[0..$cursorPosition] -join '' -split "\s+" if ( $words.Count -ge 2 ) { pyenv completions $words[1] | where { $_ -match $wordToComplete } } else { pyenv commands | where { $_ -match $wordToComplete } } } Register-ArgumentCompleter -Native -CommandName pyenv -ScriptBlock $scriptblock