🐳

PowerShell+pecoでWindowsのエクスプローラでのストレスを減らす

2024/12/31に公開

経緯

Windowsを使っているとエクスプローラがたくさん開いていることがあります。エクスプローラを開き直すのが面倒くさいからだと思うのです。
ショートカットを用意しても押し間違いでイライラします。

なので、PowerShell + pecoですぐにエクスプローラを開けるようにします

必要なもの

PowerShell
chocolatey(https://chocolatey.org/)
Peco

準備

chocolateyのインストール

https://chocolatey.org/install
上記URLからインストールしてください

pecoのインストール

$ choco install peco

# ローカルのインストールの確認
$ choco list -lo

本題

PowerShellのProfileを編集

Profileのパスを表示する

$ $PROFILE
C:¥...¥Microsoft.PowerShell_profile.ps1

PowerShellの起動時に実行されるスクリプトです。
このスクリプトファイルに以下を追加します


# visualstudio_codeでファイルを開くため。notepadでも良い
$editor = "code"
# 移動したいpathを追加するため。
$pecoList = "~/.pecoList"

function pef {
        switch($args[0]) {
                "add" {
                        pefAdd($args[1])
                }
                "edit" {
                        pefEdit
                }
                "rm" {
                        pefRm
                }
                default {
                        pefCd
                }
        }
}

# pathのリストに追加
function pefAdd($p) {
        switch($p) {
                "." {
                        $pwd.path >> $pecoList
                }
                default {
                        $p >> $pecoList
                }
        }
}

# pecoを使ってディレクトリ移動
function pefCd {
        cd $(cat $pecoList | peco)
}

# pecoを使ってeditorを起動
function pefEdit {
        Invoke-Expression "$editor $(cat $pecoList | peco)"
}

# pathのリストを削除
function pefRm {
        $p = (cat $pecoList | peco)
        if ($p) {
                $typename = "System.Management.Automation.Host.ChoiceDescription"
                $yes = new-object $typename("&Yes", "yes")
                $no = new-object $typename("&No", "no")
                $assembly = $yes.getType().AssemblyQualifiedName
                $choice = new-object "System.Collections.ObjectModel.Collection``1[[$assembly]]"
                $choice.add($yes)
                $choice.add($no)
                $answer = $host.ui.PromptForChoice($p, "remove?", $choice, 0)
                if ($answer -eq 0) {
                        $data = $(cat $pecoList)
                        $i = [Array]::IndexOf($data, $p)
                        $data[$i] = $null
                        $data | Out-File $pecoList
                }
        }
}

頻繁にpowershellからvs_codeを開くので、editorの起動もできるようにしました。

使ってみる

# カレントのディレクトリをパス追加. ~/.pecoListに追加されます
$ pef add .

# 登録したパスからディレクトリ移動. pecoでリストから選択するとディレクトリを変更できます
$ pef

# ディレクトリ移動後、エクスプローラを起動
$ start .

# 選択したpathでeditor起動
$ pef edit

# 登録したパスを削除. pecoでリストから選択すると削除できます。普通にファイルを修正しても良いです
$ pef rm

まとめ

  1. PowerShell起動
  2. pefで移動
  3. PowerShellからエクスプローラを起動

これですぐに開き直せるので、マウス操作が下手くそな私にはなかなか良いです。

Discussion