この記事は Git Advent Calendar 2015 の 9日目です。
昨日は kaneshin さんの Gitリポジトリをメンテナンスして軽量化する - Qiita でした。 レポジトリをダイエットしたい時に便利そうですね。
"git " って打つのめんどくさくない…?
git
って打つのめんどくさいですよね。
git st
って打とうとしてgits t
などと打ってしまうと、zsh: command not found: gits
などと言われてしまうと、もうやる気もなくなって家に帰りたくなってしまいますよね。
また、git
コマンドは連続で打つことが多々あります。
$ git st $ git df $ git aa $ git ci $ git st $ git ps
などと打ってると生きるのがつらくなってきますね。
これだけのコマンドにgit
って6回打っています。スペースを含めると24文字です。
なんて無駄なタイプ数なのでしょうか。
(ちなみに、上のコマンドはそれぞれstatus
, diff
, add .
, commit
, push
の alias です。)
じゃあ "git" 抜きでサブコマンドを実行できればいいじゃん!
と思ったら、gitsh
というものがあるようです。便利な世の中ですね。
賢明な皆様は勿論 Arch Linux をお使いのことだと思いますが、PKGBUILD
が用意されているので簡単にインストール出来るようです。
また、Macの場合はhomebrewからインストール出来るようです。
詳しいインストール方法はレポジトリのREADMEをご覧ください。
下記のGIF動画は、実際にgitsh
を動かしている画面です。
git
を打つ必要がなくなっています。
圧倒的タイプ数の削減ですね!
gitsh 最高……?
gitsh さいこーじゃん!と言いたいところですが、私としてはいくつか問題点があると思っています。
インストールがめんどい
Arch であれば PKGBUILD
、Macであればhomebrew
が用意されているようですが、それ以外のディストリ/OSは手で入れる必要がありそうです。
また、Rubyに依存しているのでRubyを入れる必要もあります。
なのにgemで入らないのはすこし残念かなーと思います…。
補完
zsh の補完と、gitsh の補完だと、かなりの差があります。
例えば、git s
まで打って<Tab>
を押すと、以下の様になります。
zsh のもの
gitsh のもの
zsh の補完の方が情報量が多く、見やすいですね。
これは gitsh の残念な点です。
外部コマンドの実行
急にls
を実行したくなることは誰にでもあるはずです。
そんな時、gitsh では!ls
のようにすることで実行することが出来ます。
しかし、下記のような問題がいくつかあります。
- シェルのような強い補完が効かない
- シェルで設定しているaliasは効かない(
alias ll='ls -l'
など)
つまり、これは外部コマンド実行であってシェルじゃないのです…!
git コマンド以外には対応していない
これは問題点というよりかは難癖をつけているだけなのですが、gitsh
は勿論git
の為のツールなので、当然git
コマンドにしか対応していません。
しかし、世の中にはgit
以外にもサブコマンドを取るコマンドは多数存在します。
例えば、go
とかbundle exec
とか…。
顧客が本当に必要だったものとは
git
コマンドを(もしくは他のサブコマンドも!)勝手に補完してくれる、タダのシェルなのでは…!
というわけで、作りました
というか、ちょっとしたzshスクリプトを書きました。
subsh という関数です(どうでもいいけどsubshってsushiっぽいですね)。
Installation
function subsh() { eval "__precmd_for_subsh() { print -z '$* ' }" autoload -Uz add-zsh-hook add-zsh-hook precmd "__precmd_for_subsh" }
上記のスクリプトを~/.zshrc
に追記するだけでokです。
パッケージのインストールなどはなにも必要ありません(簡単!)。
bash or fish 使いの人はごめんなさい…!
Usage
$ subsh git
のように使います。
これを実行したあとは、コマンドを実行し終わる度に常にgit
が入力された状態になります。
gitsh との比較
- インストールがめんどい
subsh
の場合、.zshrc
に数行追記するだけなのでインストールの簡単さは段違いですね!
- 補完
subsh
はzsh
をそのまま使用しているので、そのままzsh
の高機能な補完を使用することが出来ます。
- 外部コマンドの実行
外部コマンドを実行するには、そのままgit
と入力されているものを削除するだけで済みます。
<C-w>
などで一発で削除できるのでとても簡単ですね。
また、繰り替えしになりますが、zsh
をそのまま使用しているので、外部コマンドの実行にもいつものzsh
の補完が効きます。
- git コマンド以外への対応
subsh
に渡す引数を変えることで、任意のコマンドを入力した状態にすることが出来ます。
つまり、任意のコマンドに対してgitsh
の様なものを使用することが出来ます!
応用が広がりそうですね。
まとめ
gitsh
便利!- でも
subsh
関数を自前で用意するともっと便利かも?!
ほか
GIF動画を取るのには、Linuxデスクトップ環境を Gifに記録する - Qiita を使用しました。
Linux Desktop Advent Calendar 2015 - Qiita の記事です。めっちゃべんり…!
またちょっとしたTipsですが、subsh
を使っていると(あるいは通常のgitの使用でも)
$ git git st
などと、いつの間にかgit
コマンドを2重に打ってしまっていることがまれによくあります。
以下のようなaliasを~/.gitconfig
に書いておくことで、このような場合でも正しくgit
コマンドを発行することが出来ます。
[alias] git = !git
簡単なTipsを紹介する記事になりましたが、お役に立てれば幸いです。
楽しい git life を送りましょう…!