LoginSignup
4
5

More than 5 years have passed since last update.

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

Posted at

経緯

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からエクスプローラを起動

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

4
5
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
4
5