ブログ引っ越しします

  • Gitで記事の管理/更新をしたい
  • 記事の記述をMarkdownで統一したい

など幾つかの理由により、今後は Github Patges & Octoress でブログを書くことに決めました。
何日か試してみていろいろと都合が良さそうなので、

http://www.tokoro.me/

に引っ越しをします。

今後とも宜しくお願いします!

さくらVPS(CentOS6)にGititをインストール

さくらVPSの環境

まず失敗例

ghcyumでインストールしたら失敗しました。

具体的には、

$ 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の最新版をyumでなくソースからインストールすることにしました。

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)を表示する

表示イメージ

  • 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

でインストールして、

の真似して設定しただけです。

ただ、キーバインドプレフィックスだけ「C-t」にしてます。
現状の .tmux.conf はコチラ↓

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

キーバインドの確認

なお、tmux上で「C-t :」でコマンドモードに入り、

list-keys

で、現状のキーバインドが確認できる。
また、copy-modeでのVi風キーバインドについては、

list-keys -t vi-copy

で確認可能。
他のキーバインドを変更したい場合も、このリストで名称確認するのが良さそう。

*1:デフォルトでは Prefix [

*2:デフォルトだとemacs風なのでconfファイルで set-window-option -g mode-keys vi を設定すること

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の通ってるところに手動でコピーすれば良い。

実際使うときのコマンド

で、実際このscriptsを使って svn diff するには、

svn diff --diff-cmd fmdiff ファイル名

とするだけ。

マージが必要な場合

マージが必要な場合には、diff3のほうを使う。
例えばupdate時にマージするなら

svn update --diff3-cmd fmdiff3

これらをデフォルトの動作にするには

~/.subversion/config の [helpers] に以下の設定を加える

diff-cmd = fmdiff
diff3-cmd = fmdiff3