[長年日記]zshを導入した業務の切り替わりで時間ができたので、ブートドライブをHDDからSSDに切り替えたところPCの応答がかなり良くなったので、zshを入れることにした。試行錯誤したのだけど、最終的にzplugをベースにpreztoとその他便利そうなユーティリティーを入れることに。preztozsh-completionszsh-autosuggestionszsh-syntax-highlightingfzfテーマはせっかくだしちょっと派手めにということで、Powerlevel10kにしてアイコンがもりもり表示されるようにした。軽く使ってみた感じ、zsh-autosuggestionsとfzfがかなり便利で、VSCodeのgitプラグインが微妙に使いにくい感じのところが(VSCode内の)terminalを立ち上げてCUIで操作するのがよさそうな感触がある。fzfに関しては、gitについていろいろなサンプルがあるのだけど、いまいちフィットする感じではなかったので結局ほぼフルスクラッチで書いてしまった。fileは/dev/nullとdiffを取ることによってプレビューをそれっぽくするというのがポイント。checkoutはリモートブランチをチェックアウトしたときにエラーになったりdetachedにならないようにというのがポイントだけど、複数リモートリポジトリが存在する場合にどこまで正しく動作するかはチェックしていない。実際はaliasに設定して3文字のコマンドで実行できるようにしてある。あとはdotfilesでの管理に置き換えたい。for-each-refを使えばいいんじゃないだろうかということで、サクッと作ってみた。方針としては以下のような感じ。show-refによりrefspecを参照することによりリモートブランチかどうかを判定し、リモートのブランチの場合は-bでブランチを作成してdetachを防止する。これだけだとすでに同名のローカルブランチが存在した場合エラーになるので、エラーメッセージを表示しつつ、既存のローカルブランチをチェックアウトする。この場合、リモートブランチとローカルブランチが別のものを指している場合等では意図するものとは別のものをチェックアウトしてしまう可能性があるけど、レアケースなのでメッセージを出すことにより許容範囲内ということにした。意図せずorigin/branch_aをトラッキングしているbranch_aをチェックアウトしてしまう。