2019-12-06 [長年日記]
zshを導入した
業務の切り替わりで時間ができたので、ブートドライブをHDDからSSDに切り替えたところPCの応答がかなり良くなったので、zshを入れることにした。
色々試行錯誤したのだけど、最終的にzplugをベースにpreztoとその他便利そうなユーティリティーを入れることに。
- prezto
- zsh-completions
- zsh-autosuggestions
- zsh-syntax-highlighting
- fzf
テーマはせっかくだしちょっと派手めにということで、Powerlevel10kにしてアイコンがもりもり表示されるようにした。
軽く使ってみた感じ、zsh-autosuggestionsとfzfがかなり便利で、VSCodeのgitプラグインが微妙に使いにくい感じのところが(VSCode内の)terminalを立ち上げてCUIで操作するのがよさそうな感触がある。
fzfに関しては、gitについていろいろなサンプルがあるのだけど、いまいちフィットする感じではなかったので結局ほぼフルスクラッチで書いてしまった。
function check-git-repository {
git remote > /dev/null
return $?
}
function fzf-git-add {
check-git-repository || return $?
local selected=$(git status -s -uall | awk '{if (substr($0,2,1) !~ / /) print $0}' |
fzf -m --reverse --preview-window up:20 --exit-0 \
--preview="[[ {} == '??'* ]] && echo {} | awk '{print \$2 }' | xargs colordiff -u /dev/null ||
awk '{print $2}')
if [[ -n "$selected" ]]; then
selected=$(tr "\n" " " <<< $selected)
git add $(echo $selected)
echo "Completed"
fi
}
function fzf-git-checkout {
check-git-repository || return $?
local branches=$(git branch -a)
local branch=$(echo $branches | fzf --exit-0 --reverse \
--preview-window up:20 \
--preview="echo {} | awk '{print substr(\$0, 3)}' | xargs git log --color --graph --decorate=full
[[ $branch == "" ]] && return
branch=$(echo $branch | awk '{print substr($0,3)}')
if [[ $branch == "remotes/"* ]];then
# remote branch
branch=$(echo $branch | sed "s#remotes/[^/]*/##")
echo $branches | grep "^$branch$" > /dev/null
if [[ $? == 0 ]]; then
echo "$branch is already exist."
fi
fi
git checkout $branch
}
git addはstage済みのファイルがリストアップされないようにとか、untracked fileは/dev/nullとdiffを取ることによってプレビューをそれっぽくするというのがポイント。
git checkoutはリモートブランチをチェックアウトしたときにエラーになったりdetachedにならないようにというのがポイントだけど、複数リモートリポジトリが存在する場合にどこまで正しく動作するかはチェックしていない。
実際はaliasに設定して3文字のコマンドで実行できるようにしてある。あとはdotfilesでの管理に置き換えたい。
ZAP