powershell - 是否有写入提示缓冲区的命令/程序/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
或者不漂亮,你可以使用 SendKeys
function Write-PromptBuffer {
param (
[parameter(ValueFromPipeline, ValueFromRemainingArguments = $true)]
$myBuffer
)
(new-object -com wscript.shell).SendKeys($myBuffer)
}
希望这可以帮助,
推荐阅读
- python - Python:如果包含所有负值,如何删除列?
- postgresql - 如何在 Redshift 集群中占用空间?
- nginx - nginx如何限制用户在一分钟内发出的请求数?
- django - 我怎样才能显示真实的产品价格和折扣价
- python - Pandas 日期转换时间数据 '3-Oct-24 20:54' 与格式 '%d-%b-%Y %H:%M' 不匹配
- c# - 如何在openxml电子表格c#中设置波斯字体名称
- r - R中的K均值聚类与图
- laravel - “消息”:“为 foreach() 提供的参数无效”
- ios - 将 oneSignal 与 swift 一起使用时出现“在范围内找不到类型 'OSPermissionSubscriptionState”错误
- reactjs - React with TS 中奇怪的“解析错误:意外的令牌”