LoginSignup
8
8

More than 1 year has passed since last update.

PowerShellモジュールのPSFzfとZLocationをつかってみる

Posted at

CUI操作を便利にするコマンドは色々と有名なものがありますが、そのなかの一つとしてfzfコマンドがあります。

fzfコマンドはコマンドラインであいまい検索を提供するコマンドで。
入力履歴選択だったり、入力補完選択だったりをフィルタしたりします。

本記事ではPowerShellからfzfコマンドを利用しやすくラップしたPSFzfモジュールについて説明します。
またPSFzfPSReadLineZLocationモジュールと連携することができるので、ここらへんについても少しだけ。

  • PSReadLineはPowerShellコンソール上で入力補完だったり、色付けだったりの機能を提供するモジュール。
  • ZLocationモジュールはJump-Locationモジュールの後継で、ディレクトリ移動をサポートするモジュールになります。

Webサイト

fzf
PSFzf
ZLocation

インストール

PSFzf Prerequisites

PSFzfのPrerequisitesを読むと、fzfを事前にインストールが必要と記載があるので、fzfコマンドをインストールします。

fzfコマンドのインストール

fzf windows

PowerShellのパッケージマネージャであるChocolateyもしくは、Scoopfzfコマンドをインストールできるようです。(2021年12月現在はwingetはない模様)

どちらも利用していない場合はダウロードページページからバイナリをダウンロードして環境変数PATHを通して下さい。

PSFzfとZLocationモジュールのインストール

PSFzfおよびZLocationについてはどちらもPowerShell Galleryで公開されているため下記のコマンドレットでインストールできます。

モジュールのインストール
Install-Module -Name PSFzf -scope currentUser
Install-Module -Name ZLocation -scope currentUser

インストール後にモジュールを読み込んで、Aliasを有効にするために下記のコマンドを実行します。

起動プロファイル設定
# PSFzfの読み込みとAlias有効化
Import-Module PSFzf
Enable-PsFzfAliases
# ZLocationの読み込み
Import-Module ZLocation

ただし、これだけでは実行したプロセスでモジュールが読み込まれるだけなので、起動時に毎回モジュールを読み込むようにするには、起動プロファイルに下記を追加して下さい。
(起動プロファイルの場所は自動変数$profileで確認できます。)

Invoke-FuzzySetLocation(alias fd)

Invoke-FuzzySetLocation(aliad fd)コマンドで、カレントディレクトリ以下のディレクトリの一覧が表示されるので、移動したいディレクトリを選択すると移動することができます。

下記のような構造を持ったc:\temp\fzfがカレントディレクトリの際にInvoke-FuzzySetLocationを実行してみます。

image.png

Invoke-FuzzySetLocation(alias fd)を実行するとディレクトリの一覧が出てくるので、移動したいディレクトリを選択してENTERを入力すると選択したディレクトリに移動できます。

image.png

なお、一覧が表示されている画面で検索値を入力すると、一覧がフィルタされます。下記画像はfoobarでフィルタした場合。

image.png

Invoke-FuzzyEdit(alias fe)

環境変数EDITORに設定されたエディタで、ファイルを開きます。

$env:EDITOR='notepad'と設定するとnotepadで開きます。

image.png

上記画像のように、コマンドを実行すると一覧が出力されるので、editしたいファイルを選択してENTERを実行すると指定されたEDITORでファイルが開きます。 画像の例ではc:\temp\fzf\hello world\helloworld.txtを開きます。

Invoke-FuzzyZLocation(alias fz)

コマンドを実行すると、ZLocationの入力履歴一覧を表示して入力履歴からディレクトリを移動することができます。

image.png

ZLocationcdしたディレクトリを記憶しており、ディレクトリに移動した回数で重み付けをして、よく移動するディレクトリを選択しやすくします。

ZLocationについて

ZLocationモジュールのInvoke-ZLocationコマンドレットを実行すると一覧が表示されます。
aliasとしてzが登録されている。

image.png

zコマンドを実行すると Weight と Path が表示されます。

たとえばこの状態でz fzと実行すると、部分一致してWeightが一番大きいc:\temp\fzfに移動します。

image.png

Invoke-FuzzyHistory(alias fh)

PSReadlineで提供されている実行履歴をfzfでフィルタできます

image.png

^cd c:\temp\fzfでフィルタした場合。

なおPSReadlineの機能としても、CTRL-Rを入力して下記画像のように過去実行したコマンド検索を提供しています。

image.png

PSReadLineでも実行履歴検索もを提供していますが、CTRL-Rfzfを利用したフィルタに変更する事もできます。

下記を実行すればCTRL-Rの動作をfzfを利用した実行履歴検索に上書きする事ができます。

コマンド履歴検索をfzfを利用
# replace 'Ctrl+t' and 'Ctrl+r' with your preferred bindings:
Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t' -PSReadlineChordReverseHistory 'Ctrl+r'

image.png

永続的にCTRL-Rの動作を上書きした倍は、起動プロファイルに追加して下さい。

Tab Expansion

PSFzfでは一部コマンドのタブ補完を置き換えることができます。
下記でタブ拡張を有効化すると。

PowerShell:Tab Expansionを有効化
Set-PSReadLineKeyHandler -Key Tab -ScriptBlock { Invoke-FzfTabCompletion }

  • git
  • Get-Service,Start-Service,Stop-Service
  • Get-Process,Start-Process

のタブ補完を置き換えます。

下記画像はGet-Serviceの入力補完をPSFzfに切り替えた場合。

image.png

get-serviceスペースと入力した後にtabキーを押して、^sshでフィルタした場合。

総評

Invoke-FuzzySetLocation(alias fd)Invoke-FuzzyZLocation(alias fz)が便利そうと感じたため、本ツールを導入してみました。

色々と使い方があるモジュールとなっていますが、一つでも便利そうと感じたら一度使ってみるのもありかもしれません。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8