Sheldon と、入れて嬉しい Zsh Plugin
Shell に限らず、Plugin Manger は迷います。
迷った挙句、git-submodule で Plugin を管理していました。
source ${ZDOTDIR}/submodules/zsh-autosuggestions/zsh-autosuggestions.zsh
カッコつけた結果
意味がわからないなって個人的に思いました。
Sheldon
追加するたびに、submodule コマンドを実行して、 .zshrc
にパスを追加する。
という作業は二重管理してる感じも流石に辛いということで Plugin Manager を探すことにしました
こういう時、まずは awesome でみます。
ということで、 sheldon にしました。
選定理由は、Rust で書かれていたから。
早そうですよね、あとかっこいいから人に勧めやすい。
ということで早速移行
shell = "zsh"
[plugins]
[plugins.zsh-autosuggestions]
github = "zsh-users/zsh-autosuggestions"
- source ${ZDOTDIR}/submodules/zsh-autosuggestions/zsh-autosuggestions.zsh
+ eval "$(sheldon source)"
当時のコミット
Plugin
簡単に Plugin が入れれるようになったので、他の Plugin も入れてみたくなりました。
zsh-autosuggestions
これはすでに入れていたもの
history をベースに入力コマンドのサジェストをしてくれる
zsh-syntax-highlighting
入力したコマンドにシンタックスハイライトをつけてくれる
有効な時は青く光って、無効な入力時には赤くなる。
typo が事前にわかるので嬉しい
zsh-abbr
この記事で紹介したい目玉
alias をより綺麗に設定できる。
何が嬉しい
以下のような設定をする
abbr dc='docker compose'
プロンプトに入力する時は
$ dc
こうなるわけだが、
コマンド実行時には
$ docker compose
と Alias の中身を展開してから実行してくれる。
すると何が嬉しいかというと、
history に元のコマンドが貯まるようになる
僕は元々、入力と実行結果を見比べて、
結局何入力したのかわかんなくなる。という点で alias をあんまり設定していなかったのだが、
実行時に alias の中身を展開してくれるのであれば、そこはクリアされる。
前述した zsh-autosuggestions と相性がとても良い。
suggest されるコマンドが、正しい形になっている。
history が汚れないメリット
history を使って、コマンドを実行することはザラにある
私は、 fzf を使って history を検索したりして、
よくわからない、覚える気にもなれない サーバーとの接続コマンドなんかを叩いている。
こんな感じ
function fzf-history-selection() {
BUFFER=`history -n 1 | tac | awk '!a[$0]++' | fzf-tmux -p --reverse --height 40%`
CURSOR=$#BUFFER
zle reset-prompt
}
zle -N fzf-history-selection
bindkey '^H' fzf-history-selection
fzf-tmux
をすると、tmux のpopup を使って、fzf を表示することができる。
tmux が起動してなければ、普通に fzf として走る優れもの。(地味に嬉しい)
これで、history から実行コマンドを探すときに、
元のコマンドで探すことができるようにもしています。
ただし
alias したコマンドを history から元の実行コマンドで検索して実行することはないです。
だって、それしないための alias だし。
気分がとても良い
zsh-abbr は(僕の例では) dc
って入力したら docker compose
と展開してから実行してくれます。
dc
って入力すると、 docker compose
と入力されるのです。
alias と違い、プロンプトに表示されるんです。
僕はちょっとしかタイプしてないのに、たくさん入力してくれるんです。
気分が良いですね。
最後に
sheldon を入れる前は、そもそも zsh plugin を入れるのが面倒くさくて、そもそも探しもしてなかったのですが、
設定も楽だし、多分早いし、で嬉しいです。
また、plugin を探すようになったおかげで、いろんな素晴らしい plugin と出会うことができました。
他にも探してみたり、なければ作ってみたりもしたいので、
たくさんターミナルを触らなきゃなと思います。
Discussion