SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
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]'
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"
vcs_infoの設定例
実はいくつか流派がある
さっきのやつは一番まじめなやつ
vcs_infoを使おう
vcs_infoとは
vcs_infoの設定
vcs_infoの設定のしくみ
もう少し凝った設定
どういう仕組みなのか?
そもそも、プロンプトに変数を埋め込ん
でもリアルタイムに変わるわけではな
い
var1="hoge"
RPROMPT="$var1"
# <= この時点でhogeと表示される
var1="fuga"
# <= プロンプトはhogeのまま、変わらない
どういう仕組みなのか?
基本的には、プロンプト変数に値を設
定した時点でプロンプト文字列は固定
される
どういう仕組みなのか?
でも、vcs_infoの場合は、ブランチを切
り替えたときとかプロンプト文字列を
動的に変えたい
どういう仕組みなのか?
psvarという配列に値を入れておけば、
PROMPT変数で%vでそれを参照でき
る
psvar=()
psvar[1]="hoge"
RPROMPT="%v"
# <= この時点でhogeと表示される
psvar[1]="fuga"
# <= これはfugaに変わる
どういう仕組みなのか?
psvarはプロンプトを動的に買える
ための変数(配列)
これを使うのが王道っぽい
どういう仕組みなのか?
もう一つ、add-zsh-hook precmdと
いうのが大事
autoload -Uz add-zsh-hook
function precmd_hook() {
# 何か処理
}
add-zsh-hook precmd precmd_hook
どういう仕組みなのか?
add-zsh-hook precmd precmd_hook
これで、プロンプトを表示する直前
のフック関数を登録している
要するに、Enterを押すたびに勝手
に実行される関数を作ってる
どういう仕組みなのか?
これでpsvarを更新すればプロンプト
の表示を動的に変えれる
# RPROMPTに現在時刻を表示する例
autoload -Uz add-zsh-hook
function _update_date_message() {
psvar=()
psvar[1]="[$(date)]"
}
add-zsh-hook precmd _update_date_message
RPROMPT="%v"
どういう仕組みなのか?
プロンプト文字列は基本固定
でも、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 ':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_'
別解その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
別解その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_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
色を付ける
%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 "+"
zstyle ':vcs_info:git:*' unstagedstr "-"
zstyle ':vcs_info:git:*' formats '(%s)-[%b] %c%u'
zstyle ':vcs_info:git:*' actionformats '(%s)-[%b|%a] %c%u'
もう少し凝った設定
stagedstr “+”が、ステージングさ
れた変更があるときの表示
git addした変更があるときに表示
されるやつ
もう少し凝った設定
unstagedstr “-“が、ステージング
されていない変更があるときの表示
ファイルを変更してgit addしていな
いときに表示されるやつ
もう少し凝った設定
%c が stagedstr、%u が
unstagedstr
zstyle ':vcs_info:git:*' stagedstr "+"
zstyle ':vcs_info:git:*' unstagedstr "-"
zstyle ':vcs_info:git:*' formats '(%s)-[%b] %c%u'
もう少し凝った設定
%cがstagedstr、%uがunstagedstr
に置き換わる
zstyle ':vcs_info:git:*' stagedstr "+"
zstyle ':vcs_info:git:*' unstagedstr "-"
zstyle ':vcs_info:git:*' formats '(%s)-[%b] %c%u'
もう少し凝った設定
まだコミットしていない変更があるこ
とに気がつける
なんか変更してたけど、実はコミット
していない変更があってそれと混ざ
ってしまった、というのがなくなる
欠点
重い
欠点
目に見えて遅くなる
欠点
対策
いいマシンを買いましょう
欠点
これでちょっとはましになる
zstyle ':vcs_info:*' enable git svn hg
欠点
でも、vcs_info無しよりは、vcs_info
ありでちょっと遅いのをがまんする
方がマシだと思う
まとめ
vcs_info使いましょう
ぶっちゃけ適当にググってコピペで
使える
自分なりにカスタマイズしたいとき
はもうちょっと詳しく知ってないとつ
らい
vcs_infoを使おう
ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングMicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
LINE Corporation
 
契約プログラミング
契約プログラミング契約プログラミング
契約プログラミング
Oda Shinsuke
 
広告がうざい
広告がうざい広告がうざい
広告がうざい
Gen Ito
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 

Was ist angesagt? (20)

本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzsh
 
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングMicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
 
NGINXセミナー(基本編)~いまさら聞けないNGINXコンフィグなど基本がわかる!
NGINXセミナー(基本編)~いまさら聞けないNGINXコンフィグなど基本がわかる!NGINXセミナー(基本編)~いまさら聞けないNGINXコンフィグなど基本がわかる!
NGINXセミナー(基本編)~いまさら聞けないNGINXコンフィグなど基本がわかる!
 
Prefixから始めるgentoo生活
Prefixから始めるgentoo生活Prefixから始めるgentoo生活
Prefixから始めるgentoo生活
 
サーバ構築を自動化する 〜Ansible〜
サーバ構築を自動化する 〜Ansible〜サーバ構築を自動化する 〜Ansible〜
サーバ構築を自動化する 〜Ansible〜
 
コンセプトから理解するGitコマンド
コンセプトから理解するGitコマンドコンセプトから理解するGitコマンド
コンセプトから理解するGitコマンド
 
hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料
 
Trace kernel code tips
Trace kernel code tipsTrace kernel code tips
Trace kernel code tips
 
契約プログラミング
契約プログラミング契約プログラミング
契約プログラミング
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
広告がうざい
広告がうざい広告がうざい
広告がうざい
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
 
自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介
 
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
 
入門Transducers
入門Transducers入門Transducers
入門Transducers
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
 

Andere mochten auch (9)

宇宙zsh #2
宇宙zsh #2宇宙zsh #2
宇宙zsh #2
 
今から始めるzsh
今から始めるzsh今から始めるzsh
今から始めるzsh
 
Antigenを使おう
Antigenを使おうAntigenを使おう
Antigenを使おう
 
anyframeを使おう
anyframeを使おうanyframeを使おう
anyframeを使おう
 
peco活用術
peco活用術peco活用術
peco活用術
 
pecoを使おう
pecoを使おうpecoを使おう
pecoを使おう
 
anyframeを使おう
anyframeを使おうanyframeを使おう
anyframeを使おう
 
oh-my-zshを使うのは止めよう
oh-my-zshを使うのは止めようoh-my-zshを使うのは止めよう
oh-my-zshを使うのは止めよう
 
プログラマは何を勉強するか
プログラマは何を勉強するかプログラマは何を勉強するか
プログラマは何を勉強するか
 

vcs_infoを使おう