【macOS で PowerShell Core】PSFzf でコマンド履歴を曖昧検索する

PowerShell Core でもコマンド履歴を楽ちん検索
2021.09.18

普段 PowerShell Core と zsh を使い分けています。

zsh を使っていて便利だと思う点が 1つあります。 曖昧検索ツールの便利さです。 pecofzf を導入することでコマンド履歴やパスなどの検索が超強化されます (私は peco を使っています)。

『PowerShell Core でも同じようなことできないかな…』

と思って調べてみるとありました(嬉)。 PSFzf という fzf のラッパーがあるみたいです。

img

– 画像引用: kelleyma49/PSFzf | Github

今回はこれを入れて、PowerShell Core を便利にしていきます。

※ちなみに今回は導入しませんでしたが、 poco という peco ベースの検索モジュールもあります

前提条件

macOS Big Sur(バージョン 11.5.2) で試しています。

PowerShell Core の情報は以下の通り。

> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.1.4
PSEdition                      Core
GitCommitId                    7.1.4
OS                             Darwin 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:31 PDT 2021…
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

※ macOS の PowerShell Core 導入は以前ブログにしています

1. fzf のインストール

前提条件として fzf が使える必要があります。Githubの Installation を参考に導入しておきましょう。

macOS、Homebrew を使っているので以下コマンドで導入しました。

# インストール
> brew install fzf

# インストール後確認
> fzf --version
0.27.2 (brew)

PSFzf は fzf コマンドを使用します。 Get-Command を使って、PowerShell が fzf コマンドを使用できるかチェックしましょう。

> Get-Command fzf*

CommandType     Name      Version    Source
-----------     ----      -------    ------
Application     fzf       0.0.0.0    /usr/local/bin/fzf
Application     fzf-tmux  0.0.0.0    /usr/local/bin/fzf-tmux

2. PSFzf のインストール

PowerShell Core にて以下コマンドを実行してインストールします。

Install-Module -Name PSFzf

▼ 確認

> Get-InstalledModule | ? Name -eq PSFzf

Version  Name   Repository  Description
-------  ----   ----------  -----------
2.2.9    PSFzf  PSGallery   A thin wrapper around Fzf…

3. 動作確認・カスタマイズ

$PROFILE (~/.config/powershell/Microsoft.PowerShell_profile.ps1 ) に設定を入れてカスタマイズしていきながら、動作確認していきます。

ファイルパスの検索

Ctrl + t で カレントディレクトリ内ファイルパスの検索を行う設定を入れます。

Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t'

▼ ファイルパスのインクリメンタル検索ができました

img

コマンド履歴の検索

Ctrl + r で コマンド履歴の検索を行う設定を入れます。

Set-PsFzfOption -PSReadlineChordReverseHistory 'Ctrl+r'

▼ コマンド履歴のインクリメンタル検索ができました

img

検索画面の調整

FZF_DEFAULT_OPTS 環境変数の設定で補完画面を調整できます。

$env:FZF_DEFAULT_OPTS="--height 50% --layout=reverse"

▼ 例: 画面の高さ 50%、レイアウト反転

img

※ほか調整できる内容は fzf の Layout 項を参照ください

Tab 補完の強化

PowerShell Core の タブ補完を PSFzf に置き換えることが出来ます。

Set-PSReadLineKeyHandler -Key Tab -ScriptBlock { Invoke-FzfTabCompletion }

▼ 例: "Get-C" で Tab を押してみました

img

おわりに

以上、PSFzf を導入してみました。 他にも便利な拡張をあればどんどん入れていきたいですね。

参考