ブログ引っ越しします
さくらVPS(CentOS6)にGititをインストール
まず失敗例
具体的には、
$ cabal install pandoc gitit -fhighlighting --reinstall cabal: Error: some packages failed to install: blaze-html-0.4.3.4 failed during the building phase. The exception was: ExitFailure 1 gitit-0.9.0.1 depends on blaze-html-0.4.3.4 which failed to install. happstack-server-7.0.1 depends on blaze-html-0.4.3.4 which failed to install. highlighting-kate-0.5.0.6 depends on blaze-html-0.4.3.4 which failed to install. pandoc-1.9.3 depends on blaze-html-0.4.3.4 which failed to install.
こんな感じで blaze-html のインストールに失敗しました。
もしかしたらコンパイラが古いのではとGHCについて検索してみると、yumでインストールしたものは6.12.3で、http://www.haskell.org/ghc/ にある最新版は既に7.4.1になっていました。
ghcのインストール
$ sudo yum erase ghc $ wget http://www.haskell.org/ghc/dist/7.4.1/ghc-7.4.1-x86_64-unknown-linux.tar.bz2 $ tar jxf ghc-7.4.1-x86_64-unknown-linux.tar.bz2 $ cd ghc-7.4.1 $ ./configure $ sudo make install
gititのインストール
そして、再度gititのインストールをリトライ。
$ cabal update Downloading the latest package list from hackage.haskell.org $ cabal install pandoc gitit -fhighlighting --reinstall Registering gitit-0.9.0.1... $ gitit --version gitit version 0.9.0.1 +plugins Copyright (C) 2008 John MacFarlane This is free software; see the source for copying conditions. There is no warranty, not even for merchantability or fitness for a particular purpose.
インストール成功!
gititの起動テスト
$ gitit
で無事に起動ができました。
wgetでレスポンスを取得してみると無事に *Welcome to Gitit!* の文字列が確認できました。
$ wget -q -O - "http://localhost:5001/" ... <h1 id="welcome-to-gitit"><a href="#TOC">Welcome to Gitit!</a></h1> ...
zshでgitの状態(編集有り / 未commit / 未push)を表示する
情報元
基本、
(zsh版)pushし忘れないようにプロンプトに表示するようにした - ゆろよろ日記
のまんまです。
表示イメージ
- testという名前のブランチにいるので右のほうに「@test」と出ている
- 次に vi .vimrc とファイルを編集したので「@test-」というように「-」で編集した(unstageな)ファイルがあることを示す
- 次に git add .vimrc で編集したファイルをステージングすると「@test+」というように「+」でステージングされたファイルがあることを示す
- 最後に git commit でステージングされたファイルをコミットすると「@test?」というように「?」で未pushのコミットがあることを示す
というようにします。
事前準備
zshのバージョンが 4.3.10 以降である必要がありますので、古いようでしたら事前にupdateが必要です。
.zshrc への設定追加
- Gitと連携する部分
# gitのブランチ名と変更状況をプロンプトに表示する autoload -Uz is-at-least if is-at-least 4.3.10; then # バージョン管理システムとの連携を有効にする autoload -Uz vcs_info autoload -Uz add-zsh-hook zstyle ':vcs_info:*' enable git zstyle ':vcs_info:git:*' check-for-changes true zstyle ':vcs_info:git:*' stagedstr "+" zstyle ':vcs_info:git:*' unstagedstr "-" zstyle ':vcs_info:git:*' formats '@%b%u%c' zstyle ':vcs_info:git:*' actionformats '@%b|%a%u%c' # VCSの更新時にPROMPTを自動更新する function _update_vcs_info_msg() { psvar=() LANG=en_US.UTF-8 vcs_info [[ -n "$vcs_info_msg_0_" ]] && psvar[1]="$vcs_info_msg_0_" psvar[2]=$(_git_not_pushed) } function _git_not_pushed() { if [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then head="$(git rev-parse HEAD)" for x in $(git rev-parse --remotes) do if [ "$head" = "$x" ]; then return 0 fi done echo "?" fi return 0 } add-zsh-hook precmd _update_vcs_info_msg fi
- RPROMPT(右側のほう)に表示させる部分
RPROMPT="%{${fg[green]}%}%1v%2v [%~]%{${reset_color}%}"
%1v が、上記設定の psvar[1] に代入した部分(ブランチ名と+-)を表示するところ
%2v が、上記設定の psvar[2] に代入した部分(?)*1を表示するところ
*1:未pushのコミットがあるかどうか
dotfilesのgit管理の強化
先日より自分のホームディレクトリ(~/)をdotfilesとしてまとめてgitで管理するようにしていたのだが、
git status
とかしたときに管理対象としたくないファイルがずらずらっと並べられるのが気になっていた。
これらのファイルを1つ1つ .gitignore に加えればこの状態を避けられるとはいえ、それはとっても面倒臭い。
そんなとき、
■ホームディレクトリをGitで簡単に管理するための.gitignore活用法
を見させていただき、逆の発想で
- いったん全てのファイルをignore対象にする
- その後に必要なファイルをそこから除外する
ようにすれば良いということが発覚。
ということで、まずは
/* /.*
で全てのファイルをignore対象にして、その後に、
!/vimfiles !/.gitconfig !/.gitignore !/.tmux.conf !/.vimrc !/.zshenv !/.zshrc
といったかんじでignoreから除外すると良いみたい。
これはイイ!
現状、私の .gitignore はこんなかんじになってます。↓
# まずは全部ignore /* /.* # 管理対象にしたいファイルだけignoreから除外する !/Library/Application Support/KeyRemap4MacBook/*.xml !/bin !/vimfiles !/.gitconfig !/.gitignore !/.gvimrc !/.screenrc !/.tmux.conf !/.vimperatorrc !/.vimrc !/.zshenv !/.zshrc !/dot.nodoka # 管理対象のディレクトリ内でも除外したいものはこの下に追加する .DS_Store .svn *.pyc .netrwhist
ローカルでtmuxを使ってサーバにSSHログインした後に、そのサーバ上でもtmuxを使いたいときの対処療法
tmuxを常用するようになって逆に困ったこと
前回記事より、tmuxを常用するようになり、逆に困ったことがあります。
それは、普段ローカルのTerminalでもtmuxを使っているため、いざサーバにsshログインしたときにもサーバ上でtmuxを起動し、tmuxが二重になってしまったい場合のことです。
二重になること自体は問題ないのですが、サーバのtmuxの操作をしようとすると、そのtmux用のキー操作がローカルのtmuxに奪われてしまい、サーバのtmuxが操作できないのです。
どっちかのtmuxのキーバインドを変えてしまう?
となると、ローカルかサーバ側かのどちらかのキーバインドを変更するしかなさそうです。
ただ、普段からずっとどちらかのキーバインドを変えておくのも不便です。
ということで、
tmux set-option -ag prefix C-b
といったコマンドで一時的にどちらかのキーバインド(メインで使わないほうの端末)を変更する方向で考えます。
現在の形
私の場合は、.zshenv に以下aliasを定義することにしました。*1
alias tmux-changekey='tmux set-option -ag prefix C-b' alias tmux-revertkey='tmux set-option -ag prefix C-t'
これで、一時的にキーバインドを変更したいときは
tmux-changekey
戻したくなったら
tmux-revertkey
で戻すという感じにしてます。
*1:普段は C-t をprefixにしている
ぼくもscreenからtmuxに乗り換えました!
インストールと初期設定
特に仰々しいことはなく、
sudo port install tmux
でインストールして、
の真似して設定しただけです。
copy-modeで「v」でマーク開始、「y」でヤンクする
C-t y*1 で copy-mode に入り、vi風の操作*2で選択範囲の決定などができるわけだが、デフォルトの状態だと、
マーク開始: Space コピー(ヤンク): Enter
と普段Viで使ってるかんじと違う。
これを「v」でマーク開始、「y」でヤンクとするため、 .tmux.conf に以下設定を追加
# vでマーク開始 bind -t vi-copy v begin-selection # yでヤンク bind -t vi-copy y copy-selection
svn diff でFileMergeを使う
svn diff で差分を見れないことはないんだけど、差分が多くなってくるとやはりグラフィカルに差分を見れたほうが便利。
ということで、以下を参照して svn diff でFileMergeを使うための設定をした。
というか、このブログほとんどそのまま。
ココからFileMergeを呼び出すためのscriptsをダウンロード
httpでもダウンロード可能だがsvnを使うなら適当なディレクトリで
svn checkout http://soft.vub.ac.be/svn-gen/bdefrain/fmscripts/ fmscripts
このあと、fmscriptsのディレクトリに移動して、
make install
とすれば「/usr/local/bin」にこれらのscriptsがコピーされる。
他の場所にコピーしたい場合はMakefile内のパスを書き換えるか、PATHの通ってるところに手動でコピーすれば良い。
マージが必要な場合
マージが必要な場合には、diff3のほうを使う。
例えばupdate時にマージするなら
svn update --diff3-cmd fmdiff3