#键绑定 #fzf #powershell #模糊搜索 #环境变量 #pwsh

app posh-fzf

为 PowerShell 提供的 Fzf 键绑定集成

9 个版本

0.2.8 2023 年 12 月 10 日
0.2.7 2023 年 12 月 10 日
0.1.5 2023 年 11 月 15 日

#986命令行工具

Download history

每月 74 次下载

MIT 许可证

155KB
349

posh-fzf

Crates.io Build Status

Fzf 与 PowerShell 5.1 和 pwsh >= 7 的键绑定集成。

demo

安装

  1. 运行 cargo install posh-fzf,或从 发布版 下载最新版本。
  2. 安装 fdfzf
    • 对于 Windows,我推荐安装 scoop,并运行 scoop install fzf fd
  3. 将其添加到 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