完全に出遅れで、今頃ファジーファインダーを使いはじめて便利だったので、fzfのwiki(Example)に記載のfdaとfdr(linux版)をPowerShell(Windows)に移植してみました。
PowerShellのスクリプトのプログラミングははじめてだったので、ものすごくコード量少ないのに、エラー出まくりで半日時間が溶けてしまった(@_@;)
以下、PowerShellへの移植版です。(Windowsでのみ、動作確認しています)
注) WSLでは動きません
# fda - including hidden directories
function global:fda() {
$_Dirs = Get-ChildItem -Recurse -Directory 2>nul
| foreach {
$_.FullName | Resolve-Path -Relative
}
$_Dirs = $($_Dirs | Sort-Object 2>nul | fzf +m) && cd ($_Dirs)
}
# fdr - cd to selected parent directory
function global:fdr() {
param (
[String] $Path
)
if ($Path -eq "") {
$_Path = Convert-Path .
}
$script:_Dirs = @()
$script:_Qualifier = Join-Path (Split-Path $_Path -qualifier) "\"
function get_parent_dirs {
param (
[String] $Path
)
if ($Path -eq "") {
$_Path = Convert-Path .
}
if ($_Path -ne $_Qualifier) {
$_Path = Convert-Path (Split-Path $_Path)
}
If ((Get-Item $_Path).PSIsContainer) {
$script:_Dirs += ($_Path)
} Else {
return
}
If ($_Path -eq $_Qualifier) {
For ($i = $script:_Dirs.Count; $i -ge 0; $i--) {
Echo $script:_Dirs[$i]
}
} Else {
get_parent_dirs ((Get-Item $_Path).FullName)
}
}
$DIR=$(get_parent_dirs (Get-Item $_Path).FullName | fzf)
cd $DIR
}
上記のコードをPowerShellのプロファイルとして登録することで、PowerShellを起動したときに自動で読み込み、コマンドが使えるようになります。
登録方法はPowerShellの初学者向けに簡単に説明すると
まず、$PROFILE変数で登録されているプロファイルのパスを確認してください。
$PROFILE | Select-Object *
- すべてのユーザー、すべてのホスト - $PROFILE.AllUsersAllHosts
- すべてのユーザー、現在のホスト - $PROFILE.AllUsersCurrentHost
- 現在のユーザー、すべてのホスト - $PROFILE.CurrentUserAllHosts
- 現在のユーザー、現在のホスト - $PROFILE.CurrentUserCurrentHost
- 現在のユーザー、現在のホスト - $PROFILE
$PROFILE変数は上から4つと、ショートカット的に使える$PROFILEがあり、特に理由がなければ、最後の$PROFILEを使えば良いでしょう。
次に、メモ帳で$PROFILEで指定されているプロファイルのファイルを開き、このページの最初に記載のコードをまるっと貼り付け(既存のコードがある場合は追記)て保存後、メモ帳とPowerShellを終了してください。
notepad $PROFILE
そして、おもむろにPowerShellを開くと、問題がなければ "fda" と "fdr" の2つのコマンドが使えるようになっているはずです。
使い方は説明するまでもないかもしれませんが、"fda"の方は、あいまい検索でカレントディレクトリ配下のディレクトリへ移動できます。
"fdr"については、カレントディレクトリからドライブのルートディレクトリに向かってディレクトリがリストアップされるので、こちらもあいまい検索でディレクトリ移動できるというものです。
タイトルにもあるように、コマンドの内部でfzfを呼んでいるので、操作自体fzfそのものです。
いつになるかわかりませんが、気が向いたら他のコマンドも移植するかもしれないので、自分で移植するのが面倒という人は気長に待っていると、そのうちコードが降ってくるかもしれません(笑
それでは、次の投稿でお会いしましょう。
さいごまでお読みいただき、ありがとうございました。