2019-07-28

pocoで捗る日常生活

以前ちょっとだけ触れたpocoを使いだしてから、よく使うディレクトリへの移動とか、PSReadlineのHistoryからよく使うコマンドを引っ張り出すとかの、インタラクティブなコマンドが作りやすくとて捗っている。

Gistにあげたプロファイルにまるっと書いているのだけど、ココではコメントも添えて書いておく。

PSReadlineのhistoryを見る/実行する

作った関数は以下の通り。似たようなモジュールはPSGalleryに何個かあるけど、pocoで書きたかったので自作した次第。

function Show-ReadLineHistory() {
    Get-Content -Path (Get-PSReadlineOption).HistorySavePath | Select-Object -Unique | Select-Poco -CaseSensitive
}
Set-Alias pghy Show-ReadLineHistory -Option AllScope

function Invoke-ReadLineHistory() {
    Show-ReadLineHistory | Select-Object -First 1 | Invoke-Expression
}
Set-Alias pihy Invoke-ReadLineHistory -Option AllScope

途中でSelect-Object -Uniqueを挟んでいるのは、わたしがやたら同じコマンドを繰り返すので重複を省くため😅

Select-Object -First 1はpoco自体の機能不足(選択機能がない)のを補うためである😭

ちなみにPowerShellのHistoryが謎な件についてはソースはこの辺。

Get-Historyは現在のセッションの情報しか取らない。でも実は(Get-PSREeadlineOption).HistorySavePathに保存されている、という話🤔

~\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txtな感じでテキストファイルに保存されている。

ちなみに本来のGet-History実行結果のような履歴ごとにIDを振るのはやってない。

お気に入りのディレクトリへ移動する

これはパクリ。仕事で使うリポジトリはghqを使わないで決められたディレクトリへcloneすることを期待されてたりするので、そのときにこういう任意のディレクトリへの移動ができるやつが重宝してる。

Big Sky :: Windows のコマンドプロンプトを10倍便利にするコマンド「peco」

あと編集機能は未実装。わたしの用途では編集よりも削除機能のほうが良いかなと思ったりしてるところ🤔

function Set-SelectedLocation {
    param(
        [ValidateSet("Add", "Move", "Edit")]$Mode = "Move",
        [string]$Location
    )
    switch ($Mode) {
        "Add" {
            if ($Location) {
                Write-Output "$Location" | Out-File -Append -Encoding UTF8 "~/.poco-cd"
                break
            }
        }
        "Move" {
            Get-Content -Path "~/.poco-cd" | Select-Poco -CaseSensitive | Select-Object -First 1 | Set-Location
            break
        }
        "Edit" {
            break
        }
    }
}
Set-Alias pcd Set-SelectedLocation -Option AllScope

雑なまとめ

これらのツールをpocoの補完ツールとしてもうちと洗練してもいいかもしれんなあと思ったりしてる🤔

Tags: poco powershell