fzfを使った対話選択 + スクリプトによる保存/呼び出しで非常に快適です。一度登録してしまえばカレントディレクトリ移動でパス入力が不要になります。
スクリプト
ファイル名:Favorite-Dirs.ps1
<#
.SYNOPSIS
よく使うディレクトリを管理しfzfで選択
.DESCRIPTION
よく使うディレクトリを管理しfzfで選択
.EXAMPLE
#>
# 保存ファイル(ドキュメントフォルダなどに)
$FavFile = "$HOME\Documents\Favorite-Dirs.txt"
# ディレクトリをお気入りへ追加
function Add-FavDir {
$current = Get-Location
if (-not (Test-Path $FavFile)) {
New-Item -ItemType File -Path $FavFile -Force | Out-Null
}
if (-not (Select-String -Path $FavFile -Pattern ([regex]::Escape($current)) -Quiet)) {
Add-Content -Path $FavFile -Value $current
Write-Host "✔ 登録しました: $current"
} else {
Write-Host "⚠ 既に登録済み: $current"
}
}
# ディレクトリの移動
function Go-FavDir {
if (-not (Test-Path $FavFile)) {
Write-Warning "お気に入りディレクトリがありません。"
return
}
$target = Get-Content $FavFile | fzf --prompt "Select Directory> "
if ($target -and (Test-Path $target)) {
Set-Location $target
} else {
Write-Warning "選択が無効かディレクトリが存在しません。"
}
}
# ディレクトリをお気入りから削除
function Remove-FavDir {
$target = (Get-Content $FavFile | fzf --prompt "削除するディレクトリ> ").Trim()
if (-not $target) {
Write-Host "❌ 削除対象が選択されませんでした。"
return
}
# 元の内容とフィルタ後を確認(デバッグ用)
$original = Get-Content $FavFile
$filtered = $original | Where-Object { $_.Trim() -ne $target }
if ($filtered.Count -eq $original.Count) {
Write-Warning "⚠ 一致する行が見つからず、削除されませんでした。"
return
}
# バックアップ(念のため)
Copy-Item $FavFile "$FavFile.bak" -Force
# 上書き保存
if ($filtered.Count -eq 0) {
Set-Content $FavFile -Value $null
} else {
$filtered | Set-Content $FavFile
}
Write-Host "🗑️ 削除しました: $target"
}
Set-Alias addfav Add-FavDir
Set-Alias gofav Go-FavDir
Set-Alias rmfav Remove-FavDir
事前準備
- PowerShell版のfzfがインストール済みであること。
- Favorite-Dirs.ps1を直接実行しても良いですが、$profileからFavorite-Dirs.ps1が実行される様にすることが前提です。
使い方
- PowerShell上で記憶したいディレクトリにカレントディレクトリを移動しaddfavを実行するとカレントディレクトリパスが登録
- gofavを実行すると登録された一覧がfzfで選択肢として表示されるので、選択するとそのディレクトリに移動
- rmfav実行でカレントディレクトリが一覧から削除されます。
コメント