9 个版本
0.2.8 | 2023 年 12 月 10 日 |
---|---|
0.2.7 | 2023 年 12 月 10 日 |
0.1.5 | 2023 年 11 月 15 日 |
#986 在 命令行工具
每月 74 次下载
155KB
349 行
posh-fzf
Fzf 与 PowerShell 5.1 和 pwsh >= 7 的键绑定集成。
安装
- 运行
cargo install posh-fzf
,或从 发布版 下载最新版本。 - 安装
fd
和fzf
。- 对于 Windows,我推荐安装 scoop,并运行
scoop install fzf fd
。
- 对于 Windows,我推荐安装 scoop,并运行
- 将其添加到
code $PROFILE
Invoke-Expression (&posh-fzf init | Out-String)
# Customize the key bindings to your liking
Set-PSReadLineKeyHandler -Key 'Ctrl+t' -ScriptBlock { Invoke-PoshFzfSelectItems }
Set-PSReadLineKeyHandler -Key 'Alt+c' -ScriptBlock { Invoke-PoshFzfChangeDirectory }
Set-PSReadLineKeyHandler -Key 'Ctrl+r' -ScriptBlock { Invoke-PoshFzfSelectHistory }
内置命令
命令 | 描述 |
---|---|
调用-PoshFzfSelectItems |
选择一个或多个项并将其粘贴到终端。 |
调用-PoshFzfChangeDirectory |
显示所有子目录,如果选择,则 cd 到该目录。 |
调用-PoshFzfSelectHistory |
按最近顺序显示不同的历史命令。 |
调用-PoshFzfStartProcess |
使用 进程 API 启动进程。请参阅下面的自定义命令。 |
调用-PoshFzfInsertUtf8 |
强制 UTF-8 编码插入文本。 |
调用-PoshFzfTempEnv |
暂时设置环境变量,并在执行脚本块后重置它们。 |
自定义命令
您可以通过调整它以使用 Invoke-PoshFzf
cmdlet 来在键绑定中使用任何 fzf
命令。
[!NOTE]
-HeightRowsOrPercent
必须与 fzf 的--height
参数匹配。这是由于当 fzf 被调用时需要滚动终端时,fzf 和 PSReadline 一起工作得不是很好。
例如,而不是 git branch | fzf
,你会得到
Set-PSReadLineKeyHandler -Key 'Alt+b' -ScriptBlock {
$branch = git branch | Invoke-PoshFzfStartProcess -FileName "fzf" -Arguments @("--height=45%") -HeightRowsOrPercent "45%"
if ($branch) {
$branch = $branch.Replace("*", "").Trim()
[Microsoft.PowerShell.PSConsoleReadLine]::DeleteLine()
Invoke-PoshFzfInsertUtf8("git checkout '$branch'")
[Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine()
}
}
您还可以执行除了 fzf
之外的程序。
例如,zoxide 通过 zoxide query -
提供了一种检查其 db 的方法。内部,它调用 fzf
。
而不是使用以下代码:$selection = (zoxide 查询 -i)
,可以像这样调用
Set-PSReadLineKeyHandler -Key 'Ctrl+shift+z' -ScriptBlock {
# 45% height comes from: https://github.com/ajeetdsouza/zoxide/blob/a624ceef54a31de2d0624e9eb14ce65024cc9e79/src/cmd/query.rs#L92
$fzfSelection = Invoke-PoshFzfStartProcess -FileName "zoxide" -Arguments @("query", "-i") -HeightRowsOrPercent "45%"
if ($fzfSelection) {
[Microsoft.PowerShell.PSConsoleReadLine]::DeleteLine()
Invoke-PoshFzfInsertUtf8("cd $fzfSelection")
[Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine()
}
}
使用 fzf 环境变量
您可以临时设置 FZF_DEFAULT_COMMAND
,以下示例来自 posh-fzf.ps1
function Invoke-PoshFzfChangeDirectory {
Invoke-PoshFzfTempEnv @{FZF_DEFAULT_COMMAND = 'fd --type d --hidden --exclude ".git"'} -ScriptBlock {
$directory = Invoke-PoshFzfStartProcess -FileName "fzf" -Arguments @("$defaultHeightArg", "--preview", "fd . {} --maxdepth 1")
if ($directory) {
[Microsoft.PowerShell.PSConsoleReadLine]::DeleteLine()
Invoke-PoshFzfInsertUtf8 "cd $directory"
[Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine()
}
}
}
依赖
约 2-3MB
约 51K SLoC