Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
vcs_infoを使おう2015/05/04
三宅 英明(mollifier)
自己紹介
名前: 三宅 英明
Twitter: @mollifier
はてなID: mollifier
神戸のプログラマ
好きなもの
zsh
vim
vimperator
ブログとか
はてなブログ
http://mollifier.hatenablog.com/
Twitter
http://twitter.com/mollifier
Qiita
http://qiita.com/mollifier
vcs_infoを使おう
vcs_infoとは
vcs_infoの設定
vcs_infoの設定のしくみ
もう少し凝った設定
vcs_infoを使おう
vcs_infoとは
vcs_infoの設定
vcs_infoの設定のしくみ
もう少し凝った設定
vcs_infoとは
vcs(Version Control Systems)の
情報(info)を表示するやつ
vcs_infoとは
Git使ってて、今どのブランチにいる
のか勘違いしてコミットしてしまった
りして困る
かといっていちいちgit statusする
のも面倒
vcs_infoとは
常にブランチの情報表示しとけば
便利ちゃうの?
便利でした
みんな使おう
vcs_infoを使おう
vcs_infoとは
vcs_infoの設定
vcs_infoの設定のしくみ
もう少し凝った設定
vcs_infoの設定例
とりあえずこれを~/.zshrcにコピペ
autoload -Uz add-zsh-hook
autoload -Uz vcs_info
zstyle ':vcs_info:*' formats '(%s)-[%b]'...
vcs_infoの設定例
実はいくつか流派がある
さっきのやつは一番まじめなやつ
vcs_infoを使おう
vcs_infoとは
vcs_infoの設定
vcs_infoの設定のしくみ
もう少し凝った設定
どういう仕組みなのか?
そもそも、プロンプトに変数を埋め込ん
でもリアルタイムに変わるわけではな
い
var1="hoge"
RPROMPT="$var1"
# <= この時点でhogeと表示される
var1="fuga"
# <= プロンプト...
どういう仕組みなのか?
基本的には、プロンプト変数に値を設
定した時点でプロンプト文字列は固定
される
どういう仕組みなのか?
でも、vcs_infoの場合は、ブランチを切
り替えたときとかプロンプト文字列を
動的に変えたい
どういう仕組みなのか?
psvarという配列に値を入れておけば、
PROMPT変数で%vでそれを参照でき
る
psvar=()
psvar[1]="hoge"
RPROMPT="%v"
# <= この時点でhogeと表示される
psvar[1]...
どういう仕組みなのか?
psvarはプロンプトを動的に買える
ための変数(配列)
これを使うのが王道っぽい
どういう仕組みなのか?
もう一つ、add-zsh-hook precmdと
いうのが大事
autoload -Uz add-zsh-hook
function precmd_hook() {
# 何か処理
}
add-zsh-hook prec...
どういう仕組みなのか?
add-zsh-hook precmd precmd_hook
これで、プロンプトを表示する直前
のフック関数を登録している
要するに、Enterを押すたびに勝手
に実行される関数を作ってる
どういう仕組みなのか?
これでpsvarを更新すればプロンプト
の表示を動的に変えれる
# RPROMPTに現在時刻を表示する例
autoload -Uz add-zsh-hook
function _update_date_message()...
どういう仕組みなのか?
プロンプト文字列は基本固定
でも、psvar変数を使えば動的に変
えれる
precmdで毎回psvar変数を変える
プロンプト表示が動的に変わる
どういう仕組みなのか?
なんか回りくどい
もっと楽な方法ないの?
別解その1
楽な方法ある
setopt prompt_substを使う
別解その1
プロンプト文字列は基本固定
でも、setopt prompt_substすれば
別
プロンプト文字列の中に埋め込ん
だ変数が毎回そのときの値に置き
換えられるようになる
別解その1
setopt prompt_subst
var1="hoge"
RPROMPT='$var1'
# <= この時点ではhogeと表示される
var1="fuga"
# <= RPROMPTの表示がfugaに変わる
別解その1
setopt prompt_subst
autoload -Uz add-zsh-hook
autoload -Uz vcs_info
zstyle ':vcs_info:*' formats '(%s)-[%b]'
zstyle ...
別解その2
というか、毎回プロンプト変数に代入
したらええんとちゃうの?
autoload -Uz add-zsh-hook
autoload -Uz vcs_info
zstyle ':vcs_info:*' formats '(%s)-[%...
別解その2
Enterを押すたびにRPROMPT変
数の値を書き換えている
別解その2
この方法は好き嫌いが分かれる
「きたない」「なんかキモい」「邪道」
という人もいるもよう
別解その2
「細かいこと気にすんなよ」派もいる
vcs_infoを実行したら内部で20個
ぐらいコマンド実行してるし、今さら
変数1個代入するぐらい誤差
別解その2
僕は最後の方法を使ってる
「なんかキモい」という気はする
でも、一番分かりやすいし、設定しや
すい
色を付けたりifで分岐したりするとき
も一番トラブルが少ないと思う
色を付ける
autoload -Uz vcs_info
autoload -Uz add-zsh-hook
zstyle ':vcs_info:*' formats '%F{green}(%s)-[%b]%f'
zstyle ':vcs_inf...
色を付ける
%F{green}と%fで囲んだ部分が緑色
になる
zstyle ':vcs_info:*' formats '%F{green}(%s)-[%b]%f'
色を付ける
他の色でも同様。指定できる色は8種
類
black
red
green
yellow
色を付ける
blue
magenta
cyan
white
vcs_infoを使おう
vcs_infoとは
vcs_infoの設定
vcs_infoの設定のしくみ
もう少し凝った設定
もう少し凝った設定
作業コピーの中で変更があるかどうか
を表示する
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "+"
z...
もう少し凝った設定
stagedstr “+”が、ステージングさ
れた変更があるときの表示
git addした変更があるときに表示
されるやつ
もう少し凝った設定
unstagedstr “-“が、ステージング
されていない変更があるときの表示
ファイルを変更してgit addしていな
いときに表示されるやつ
もう少し凝った設定
%c が stagedstr、%u が
unstagedstr
zstyle ':vcs_info:git:*' stagedstr "+"
zstyle ':vcs_info:git:*' unstagedstr "-"
...
もう少し凝った設定
%cがstagedstr、%uがunstagedstr
に置き換わる
zstyle ':vcs_info:git:*' stagedstr "+"
zstyle ':vcs_info:git:*' unstagedstr "...
もう少し凝った設定
まだコミットしていない変更があるこ
とに気がつける
なんか変更してたけど、実はコミット
していない変更があってそれと混ざ
ってしまった、というのがなくなる
欠点
重い
欠点
目に見えて遅くなる
欠点
対策
いいマシンを買いましょう
欠点
これでちょっとはましになる
zstyle ':vcs_info:*' enable git svn hg
欠点
でも、vcs_info無しよりは、vcs_info
ありでちょっと遅いのをがまんする
方がマシだと思う
まとめ
vcs_info使いましょう
ぶっちゃけ適当にググってコピペで
使える
自分なりにカスタマイズしたいとき
はもうちょっと詳しく知ってないとつ
らい
vcs_infoを使おう
ありがとうございました
Upcoming SlideShare
Loading in …5
×

vcs_infoを使おう

1,611 views

Published on

vcs_infoを使おう

Published in: Technology
  • Be the first to comment

vcs_infoを使おう

  1. 1. vcs_infoを使おう2015/05/04 三宅 英明(mollifier)
  2. 2. 自己紹介 名前: 三宅 英明 Twitter: @mollifier はてなID: mollifier 神戸のプログラマ
  3. 3. 好きなもの zsh vim vimperator
  4. 4. ブログとか はてなブログ http://mollifier.hatenablog.com/ Twitter http://twitter.com/mollifier Qiita http://qiita.com/mollifier
  5. 5. vcs_infoを使おう vcs_infoとは vcs_infoの設定 vcs_infoの設定のしくみ もう少し凝った設定
  6. 6. vcs_infoを使おう vcs_infoとは vcs_infoの設定 vcs_infoの設定のしくみ もう少し凝った設定
  7. 7. vcs_infoとは vcs(Version Control Systems)の 情報(info)を表示するやつ
  8. 8. vcs_infoとは Git使ってて、今どのブランチにいる のか勘違いしてコミットしてしまった りして困る かといっていちいちgit statusする のも面倒
  9. 9. vcs_infoとは 常にブランチの情報表示しとけば 便利ちゃうの? 便利でした みんな使おう
  10. 10. vcs_infoを使おう vcs_infoとは vcs_infoの設定 vcs_infoの設定のしくみ もう少し凝った設定
  11. 11. vcs_infoの設定例 とりあえずこれを~/.zshrcにコピペ autoload -Uz add-zsh-hook autoload -Uz vcs_info zstyle ':vcs_info:*' formats '(%s)-[%b]' zstyle ':vcs_info:*' actionformats '(%s)-[%b|%a]' function _update_vcs_info_msg() { psvar=() LANG=en_US.UTF-8 vcs_info psvar[1]="$vcs_info_msg_0_" } add-zsh-hook precmd _update_vcs_info_msg RPROMPT="%v"
  12. 12. vcs_infoの設定例 実はいくつか流派がある さっきのやつは一番まじめなやつ
  13. 13. vcs_infoを使おう vcs_infoとは vcs_infoの設定 vcs_infoの設定のしくみ もう少し凝った設定
  14. 14. どういう仕組みなのか? そもそも、プロンプトに変数を埋め込ん でもリアルタイムに変わるわけではな い var1="hoge" RPROMPT="$var1" # <= この時点でhogeと表示される var1="fuga" # <= プロンプトはhogeのまま、変わらない
  15. 15. どういう仕組みなのか? 基本的には、プロンプト変数に値を設 定した時点でプロンプト文字列は固定 される
  16. 16. どういう仕組みなのか? でも、vcs_infoの場合は、ブランチを切 り替えたときとかプロンプト文字列を 動的に変えたい
  17. 17. どういう仕組みなのか? psvarという配列に値を入れておけば、 PROMPT変数で%vでそれを参照でき る psvar=() psvar[1]="hoge" RPROMPT="%v" # <= この時点でhogeと表示される psvar[1]="fuga" # <= これはfugaに変わる
  18. 18. どういう仕組みなのか? psvarはプロンプトを動的に買える ための変数(配列) これを使うのが王道っぽい
  19. 19. どういう仕組みなのか? もう一つ、add-zsh-hook precmdと いうのが大事 autoload -Uz add-zsh-hook function precmd_hook() { # 何か処理 } add-zsh-hook precmd precmd_hook
  20. 20. どういう仕組みなのか? add-zsh-hook precmd precmd_hook これで、プロンプトを表示する直前 のフック関数を登録している 要するに、Enterを押すたびに勝手 に実行される関数を作ってる
  21. 21. どういう仕組みなのか? これでpsvarを更新すればプロンプト の表示を動的に変えれる # RPROMPTに現在時刻を表示する例 autoload -Uz add-zsh-hook function _update_date_message() { psvar=() psvar[1]="[$(date)]" } add-zsh-hook precmd _update_date_message RPROMPT="%v"
  22. 22. どういう仕組みなのか? プロンプト文字列は基本固定 でも、psvar変数を使えば動的に変 えれる precmdで毎回psvar変数を変える プロンプト表示が動的に変わる
  23. 23. どういう仕組みなのか? なんか回りくどい もっと楽な方法ないの?
  24. 24. 別解その1 楽な方法ある setopt prompt_substを使う
  25. 25. 別解その1 プロンプト文字列は基本固定 でも、setopt prompt_substすれば 別 プロンプト文字列の中に埋め込ん だ変数が毎回そのときの値に置き 換えられるようになる
  26. 26. 別解その1 setopt prompt_subst var1="hoge" RPROMPT='$var1' # <= この時点ではhogeと表示される var1="fuga" # <= RPROMPTの表示がfugaに変わる
  27. 27. 別解その1 setopt prompt_subst autoload -Uz add-zsh-hook autoload -Uz vcs_info zstyle ':vcs_info:*' formats '(%s)-[%b]' zstyle ':vcs_info:*' actionformats '(%s)-[%b|%a]' function _update_vcs_info_msg() { LANG=en_US.UTF-8 vcs_info # 集めた情報は$vcs_info_msg_0_変数に入る } add-zsh-hook precmd _update_vcs_info_msg RPROMPT='$vcs_info_msg_0_'
  28. 28. 別解その2 というか、毎回プロンプト変数に代入 したらええんとちゃうの? autoload -Uz add-zsh-hook autoload -Uz vcs_info zstyle ':vcs_info:*' formats '(%s)-[%b]' zstyle ':vcs_info:*' actionformats '(%s)-[%b|%a]' function _update_vcs_info_msg() { LANG=en_US.UTF-8 vcs_info RPROMPT="$vcs_info_msg_0_" } add-zsh-hook precmd _update_vcs_info_msg
  29. 29. 別解その2 Enterを押すたびにRPROMPT変 数の値を書き換えている
  30. 30. 別解その2 この方法は好き嫌いが分かれる 「きたない」「なんかキモい」「邪道」 という人もいるもよう
  31. 31. 別解その2 「細かいこと気にすんなよ」派もいる vcs_infoを実行したら内部で20個 ぐらいコマンド実行してるし、今さら 変数1個代入するぐらい誤差
  32. 32. 別解その2 僕は最後の方法を使ってる 「なんかキモい」という気はする でも、一番分かりやすいし、設定しや すい 色を付けたりifで分岐したりするとき も一番トラブルが少ないと思う
  33. 33. 色を付ける autoload -Uz vcs_info autoload -Uz add-zsh-hook zstyle ':vcs_info:*' formats '%F{green}(%s)-[%b]%f' zstyle ':vcs_info:*' actionformats '%F{red}(%s)-[%b|%a]%f' function _update_vcs_info_msg() { LANG=en_US.UTF-8 vcs_info RPROMPT="${vcs_info_msg_0_}" } add-zsh-hook precmd _update_vcs_info_msg
  34. 34. 色を付ける %F{green}と%fで囲んだ部分が緑色 になる zstyle ':vcs_info:*' formats '%F{green}(%s)-[%b]%f'
  35. 35. 色を付ける 他の色でも同様。指定できる色は8種 類 black red green yellow
  36. 36. 色を付ける blue magenta cyan white
  37. 37. vcs_infoを使おう vcs_infoとは vcs_infoの設定 vcs_infoの設定のしくみ もう少し凝った設定
  38. 38. もう少し凝った設定 作業コピーの中で変更があるかどうか を表示する zstyle ':vcs_info:git:*' check-for-changes true zstyle ':vcs_info:git:*' stagedstr "+" zstyle ':vcs_info:git:*' unstagedstr "-" zstyle ':vcs_info:git:*' formats '(%s)-[%b] %c%u' zstyle ':vcs_info:git:*' actionformats '(%s)-[%b|%a] %c%u'
  39. 39. もう少し凝った設定 stagedstr “+”が、ステージングさ れた変更があるときの表示 git addした変更があるときに表示 されるやつ
  40. 40. もう少し凝った設定 unstagedstr “-“が、ステージング されていない変更があるときの表示 ファイルを変更してgit addしていな いときに表示されるやつ
  41. 41. もう少し凝った設定 %c が stagedstr、%u が unstagedstr zstyle ':vcs_info:git:*' stagedstr "+" zstyle ':vcs_info:git:*' unstagedstr "-" zstyle ':vcs_info:git:*' formats '(%s)-[%b] %c%u'
  42. 42. もう少し凝った設定 %cがstagedstr、%uがunstagedstr に置き換わる zstyle ':vcs_info:git:*' stagedstr "+" zstyle ':vcs_info:git:*' unstagedstr "-" zstyle ':vcs_info:git:*' formats '(%s)-[%b] %c%u'
  43. 43. もう少し凝った設定 まだコミットしていない変更があるこ とに気がつける なんか変更してたけど、実はコミット していない変更があってそれと混ざ ってしまった、というのがなくなる
  44. 44. 欠点 重い
  45. 45. 欠点 目に見えて遅くなる
  46. 46. 欠点 対策 いいマシンを買いましょう
  47. 47. 欠点 これでちょっとはましになる zstyle ':vcs_info:*' enable git svn hg
  48. 48. 欠点 でも、vcs_info無しよりは、vcs_info ありでちょっと遅いのをがまんする 方がマシだと思う
  49. 49. まとめ vcs_info使いましょう ぶっちゃけ適当にググってコピペで 使える 自分なりにカスタマイズしたいとき はもうちょっと詳しく知ってないとつ らい
  50. 50. vcs_infoを使おう ありがとうございました

×