🐳
PowerShell+pecoでWindowsのエクスプローラでのストレスを減らす
経緯
Windowsを使っているとエクスプローラがたくさん開いていることがあります。エクスプローラを開き直すのが面倒くさいからだと思うのです。
ショートカットを用意しても押し間違いでイライラします。
なので、PowerShell + pecoですぐにエクスプローラを開けるようにします
必要なもの
PowerShell
chocolatey(https://chocolatey.org/)
Peco
準備
chocolateyのインストール
上記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
まとめ
- PowerShell起動
- pefで移動
- PowerShellからエクスプローラを起動
これですぐに開き直せるので、マウス操作が下手くそな私にはなかなか良いです。
Discussion