きっかけ
今までbash -> zsh -> fish -> zshと使ってきて色々不満点がありました。
- fish
- メリット
- カスタマイズ楽すぎる
- 標準で十分すぎる補完が効く
- npmコマンドの補完なども自動で効く
- 高速
- デメリット
- いわずもがな文法が...
- メリット
- zsh
- メリット
- カスタマイズ性はかなり高い
- POSIX準拠
- デメリット
- カスマイズがだるい
- 遅い
- ワイルドカードが動かないときがある(自分のせいの可能性もある)
- メリット
という感じでbashの乗り換えも検討していました。
達成したいこと
-
warpなどの高機能ターミナルエミュレータの力を借りずに基本的にbashだけで機能させる。
-
Tabを補完をzshほど強く効かせることを目標にする。
-
zsh-syntaxhighlighting, zsh-autosuggestionなどの機能を使用できるようにする。
-
gitの表示
導入
使用したツール
-
Ble.sh
- 簡単に言うとbashをzshのように使いやすくしたカスタマイズされたshellです。Tab補完もハイライトなど自動でされます。
-
bash-it
- プラグインマネージャでcompletionなどの補完を楽に管理することができるツール。
インストール
- Ble.sh
git clone --recursive --depth 1 --shallow-submodules https://github.com/akinomyoga/ble.sh.git
make -C ble.sh install PREFIX=~/.local
echo 'source ~/.local/share/blesh/ble.sh' >> ~/.bashrc
- bash-it
git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it
~/.bash_it/install.sh
カスタマイズ
bash-it
エイリアス(alias)が標準で整備されています。導入するだけでエイリアスを入れることができますが、私は自分で設定しているので導入をパスしました。
bash-itのプラグイン導入
これが非常に便利でした。使いたいプラグインを選ぶだけです。
bash-it enable plugin git sudo ssh
completionの導入
使いたいツールを選んで同様に入れるだけです
bash-it enable completion docker docker-compose ssh yarn
これでzshに負けないくらいの補完がつきます。
.bashrcのカスタマイズ
特に効果が高いものをピックアップします
- 補完で大文字小文字を無視(大文字でも小文字でTab補完有効)
bind 'set completion-ignore-case on'
- Tabでメニューを表示して選択する
bind 'TAB:menu-complete'
bind 'set show-all-if-ambiguous on'
pnpm補完
ここにもありますが、bashでもバシバシ効かせます。
pnpm completion bash > ~/completion-for-pnpm.bash
echo 'source ~/completion-for-pnpm.bash' >> ~/.bashrc
挙動
zshやfishのようにオプションの補完やコマンド有無によるハイライト、suggesitionなどもしっかり機能するようになりました。
また、gitブランチも表示されて非常に快適です。
warpと組み合わせればより高機能になりますが、ほとんどbashだけで動作しているので当初の目標は達成できました。
zsh, fishを使用の方も是非参考にしてください。
以上です。お疲れ様でした。
また何かあれば追記します。