在命令行上使用自定义标签完成功能仅在PS中特定文件类型之间循环

时间:2019-03-01 11:39:54

标签: powershell tab-completion programmable-completion

我使用PowerShell基于PSReadline的标签完成功能,并且希望实现以下自定义完成行为:

我有一个文件夹

File1.java
File1.class
File2.java
File2.class

如果我在java之后使用制表符,则会得到文件列表:

java .\File
File1.java
File1.class
File2.java
File2.class

但是我想使用快捷方式,所以我只能滚动.java文件,而没有显示扩展名。我也想摆脱名称中的“。\”。

因此,如果我写java并使用制表符,我想拥有

java File1

下一个选项卡给出

java File2

以此类推(带有制表符或其他键)。

我还想知道,在编译Java文件之前,我已经有了文件夹

File1.java
File2.java

我现在想编写javac并使用tab,这样我得到

javac File1.java

然后再次显示标签

javac File2.java

依此类推。

这可能吗?

1 个答案:

答案 0 :(得分:0)

使用Register-ArgumentCompleter cmdlet(PSv5 +):

Register-ArgumentCompleter -Native -CommandName java -ScriptBlock {
    param($wordToComplete)
    (Get-ChildItem $wordToComplete*.java).BaseName
}

Register-ArgumentCompleter -Native -CommandName javac -ScriptBlock {
    param($wordToComplete)
    (Get-ChildItem $wordToComplete*.java).Name
}

要为调用完成定义替代键或和弦,请使用Set-PSReadLineKeyHandler;例如,使 Ctrl + K 调用补全:

Set-PSReadLineKeyHandler -Key ctrl+k -Function TabCompleteNext
Set-PSReadLineKeyHandler -Key ctrl+shift+k -Function TabCompletePrevious

请注意,这会全局影响完成-您无法以这种方式实现特定于命令的完成键。