是否有写入提示缓冲区的命令/程序/Cmdlet?



我正在尝试查看是否可以将命令的输出写入提示缓冲区以允许进一步编辑?像这样的东西,其中Write-PromptBuffer是所需的命令:

PS C:> echo "foo bar" | Write-PromptBuffer
PS C:> foo bar

相当于 zsh 对print -z所做的(见 http://zsh.sourceforge.net/Guide/zshguide03.html(

我这样做的主要动机是:

PS C:> Get-Content (Get-PSReadLineOption).HistorySavePath | fzf

这将"转储"选定的(在fzf术语中接受的(条目作为提示符中的可编辑命令。

(注意:我熟悉PSFzf,但我正在尝试找到一个通用命令来执行此操作,因为我还有其他用例可以从中受益(

例如,PSReadLine 模块可以插入到缓冲区中

[Microsoft.PowerShell.PSConsoleReadLine]::Insert("foo bar")

但是,由于这是为了编辑当前行缓冲区而不是下一行,因此您需要这样做,因此请执行类似操作

#pipeline to variable $myBuffer function
function Write-PromptBuffer {
param (  
[parameter(ValueFromPipeline, ValueFromRemainingArguments = $true)]
$global:myBuffer
)
}
#Add a PSReadLineKeyHandler to insert $myBuffer
Set-PSReadLineKeyHandler -Key Alt+x `
-ScriptBlock {
param($key, $arg)   # The arguments are ignored in this example
#write to buffer
[Microsoft.PowerShell.PSConsoleReadLine]::Insert($myBuffer)
}

现在用字符串填充$myBuffer并使用 Alt+w 调用它

PS C:> echo "foo bar" | Write-PromptBuffer
PS C:> foo bar

或者,不要漂亮,您可以使用发送密钥

function Write-PromptBuffer {
param (  
[parameter(ValueFromPipeline, ValueFromRemainingArguments = $true)]
$myBuffer
)
(new-object -com wscript.shell).SendKeys($myBuffer)
}

希望这有帮助,

最新更新