4

我使用 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

等等。

这可能吗?

4

1 回答 1

4

使用Register-ArgumentCompletercmdlet (PSv5+):

# With `java`, cycle through *.java files, but without the extension.
Register-ArgumentCompleter -Native -CommandName java -ScriptBlock {
    param($wordToComplete)
    (Get-ChildItem $wordToComplete*.java).BaseName
}

# With `javac`, cycle through *.java files, but *with* the extension.
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

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

于 2019-03-01T13:16:27.297 回答