vim で gitk 的なことを行う gitv が便利
前回に引き続き、今回も Vim + Git ネタですが・・・。
vimshell や fugitive.vim を使っているとほとんどの操作を Vim 上で実現できるます。でも、gitk だけは別ウィンドウで起動しなければならず面倒だと思っていました。
Vim 上で gitk 的なことを行うプラグインがないかと思っていたら gitv.vim というものがありました。
インストール
というか github
gregsexton/gitv
使い方
コマンドモードで
:Gitv
と打てばブラウザモード(後述)で起動します。
gitk --all 相当のことは
:Gitv --all
でいけます。
また、
:Gitv!
のように ! をつけるとファイルモード(後述)で起動します。
ブラウザモード
左のウィンドウにコミットのグラフ、右のウィンドウにコミットメッセージとそのコミットでの変更点が表示されます。
j や k でグラフ上を移動でき、<CR> でそのコミットの情報が見れます。
ファイルモード
ファイルモードは1つのファイルの履歴を追うモードです。
:Gitv! コマンドを叩いた時に開いていたファイルの履歴をたどります。
上にコミットのログ、下にコミット時のファイルの状態が表示されます。
キーバインド
キー | ブラウザモード | ファイルモード |
---|---|---|
<CR> | 選択したコミットの情報を開く | 選択したコミット時におけるファイルを表示 |
o | 水平にウィンドウを分割してコミットの情報を開く | 水平にウィンドウを分割してファイルを表示 |
O | 新しいタブでコミットの情報を開く | 新しいタブでファイルを表示 |
s | 垂直にウィンドウを分割して(ry | 垂直にウィンドウを分割して(ry |
i | <CR>と同じ | コミット情報の表示 |
q | gitv の終了 | gitv の終了 |
u | 最新の情報に更新 | 最新の情報に更新 |
co | ブランチやコミットをチェックアウト(HEAD が移動) | ファイルをチェックアウト(HEADは移動しない) |
D | なにもなし | 表示されているファイルと選択されたファイルの差分を vim の diff で見る |
S | diff --stat の表示 | diff --stat の表示 |
ビジュアルモードで複数のコミットをハイライトした状態で D | なにもなし | ハイライトされている一番上のコミットと一番下のコミットの差分を vim の diff で見る |
ビジュアルモードで複数のコミットをハイライトした状態で S | 一番上のコミットと一番下のコミットの diff --stat | 一番上のコミットと一番下のコミットの diff --stat |
ビジュアルモードで複数のコミットをハイライトした状態で m | 一番上のブランチと一番下のブランチをマージする(上と下が必ずブランチやタグでなければならない) | (たぶん)なにもなし |
不具合・・・?
ひとによるのかもしれませんが、私の環境ではブラウザモードで開いた時に diff が折りたたまれて表示されてしまいました。
以下のようにやれば直るようです。
autocmd FileType git :setlocal foldlevel=99
参考
:help gitv
fugitive.vim が便利すぎたのでメモ
Vim から Git を操作するプラグインとしては、今まで git.vim を使っていたんですが、fugitive.vim のほうが便利だったので乗り換えました。
詳しい説明はここ
VimmerなGit使いはfugitive.vimを今すぐ入れたほうがいい - SELECT * FROM life;
ここでは、自分が特に便利だと思った機能を書きます。
git add -p をグラフィカルに行う
git add -p を使うと、複数の変更箇所のうちどの変更をコミットに含めるかを選ぶことができますが、fugitive の :Gdiff を使うとこれをグラフィカルに行うことができます。
:Gdiff コマンドはインデックスとワークツリーの状態の差分を vim の diff で表示します。
こんな感じ
たとえば、スタイルシートの設定(上のほうの差分)はコミットに含めたいけど、クラス属性の付与(下のほう)は含めたくないとしましょう。
まず、カーソルを上の青い所に移動させます。(]c や [c で変更箇所にジャンプできます)
そこで dp と押すと、カーソル位置の変更がインデックスに取り込まれます。
コミットに含めたい変更をすべて取り込んだら、左のウィンドウ(インデックスのウィンドウ)に移動して :wq としましょう。
そして、:Gcommit -v すると、
見事、スタイルシートの設定の変更のみがコミットに含まれています。
ちなみに・・・
]c とか dp とかは Vim の機能です。詳しくは :help diff
ほかにもいろいろな差分の操作方法があります。
Gblame でどんどん歴史をたどれる。
fugitive には git blame のためのコマンド :Gblame があります。
ある特定の行の変更をたどりたいときは blame 側のウィンドウでその行に移動し、~ または P を押します。
~ は HEAD~ みたいな感じです。2~ で 2 世代前のコミットに移動できます。
逆に P は HEAD^ で 2^ で 2 番目の親を指定できます。
もう一度押すとさらに歴史をたどれます。
この行への変更がコミットした時点のファイルの状態をみたい場合は Enter を押します。
終了するには q か gq を押します
q だと blame が終了してもウィンドウの状態はそのままです。
gq は blame を終了してワークツリーの状態に戻ります。
rails + mongoDB
Ubuntu 11.10 に rails + mongoDB な環境を構築したのでメモ。
10gen の GPG キーをインストール
$ apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
10gen のリポジトリを追加
$ sudo vim /etc/apt/sources.list
で管理者権限でファイルを開き、以下の URL を追加します。
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
mongoDB のインストール
$ sudo apt-get update
$ sudo apt-get install mongodb-10gen
mongoid をインストール
gem 'mongoid' gem 'bson_ext'
$ bundle install
Vim のプラグインを Vundle でインストールして Git で管理しようとしたらハマった
vimrc に
Bundle 'rails.vim'
を記述して
:BundleInstall
みたいな感じで rails.vim を ~/.vim/bundle/vundle にインストールしたあと、.vim ディレクトリで
$ git add .
しても、
# new file: bundle/rails.vim # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # (commit or discard the untracked or modified content in submodules) # # modified: bundle/rails.vim (untracked content)
みたいな感じで untracked content と言われる。
解決方法
調べたけどよくわからなかった。
とりあえず、.gitignore に bundle/* を追加して解決した。
Vim のインサートモードで方向キーが A B C D になる・・・。
現象
Vim のインサートモード時に hoge と入力したあと、方向キー(↑、↓、→、←)を入力すると、
D C B A hoge
みたいな感じで1行上に移動しながら A B C D という文字入力になる。
まぁ、普段はあまり方向キーを入力しないので気にならないです。
が、neocomplcache で補完候補を選ぶときにも文字入力になってしまうので候補が選べなくなってしまいました・・・。
解決策
.vimrc に以下を追加
imap ^[OA <Up> imap ^[OB <Down> imap ^[OC <Right> imap ^[OD <Left>
ちなみに入力方法は imapスペースのあとに Ctrl-V上矢印。
私の環境だと ^[ の部分の色が変わります。
sbt と scalatest をいれました。
sbt のインストール
sbt-launch.jar を拾ってきて、パスの通ったフォルダ(例: ~/bin)に置く。
以下のようなスクリプトファイルを作成して sbt という名前で保存。
java -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@"
作ったファイルに実行権限を付与する。
$ chmod u+x ~/bin/sbt
sbt の実行
sbt でコンパイルと実行を行うには次のようにします。
$ sbt
..
> run
Hello, World