実装してコミットした後にどれぐらい変更をしたのか(頑張ったのか)をざっくりでも知りたいなぁと前々から思っていてなんとか実現できないものかと調べ始みてる。
git log から + と - の変更行を抜き出して単純にステップ数を出してもいいのだけどあまり面白くないし、+ は単純な行追加とは限らないし、- も単純な行削除とは限らない。修正前後の変化量をもうちょっと突っ込んで知りたい。ぐぐる。
LCS(Longest Common Subsequence)
diffの動作原理を知る~どのようにして差分を導き出すのか
2つの要素列の最長共通部分列
細かいところは分からないけど、そういうことができるらしい。
ということは共通部分が分かるなら、それを除けば変更箇所が分かるくね?
gem 発見。
Diff::LCS computes the difference between two Enumerable sequences using the McIlroy-Hunt longest common subsequence (LCS) algorithm.
diff-lcs
たとえば修正して増えた場合の比較をしてみる
content1 → content2 に修正した想定で、共通部分を取得してみる
require 'diff/lcs' content1 =<<EOF class Test def initialize end def say puts 'hello' end end EOF content2 =<<EOF class Test def hoge puts 'hello hoge' end def say puts 'hello world' end end EOF lcs = Diff::LCS.LCS(content1, content2) p lcs
結果
["c", "l", "a", "s", "s", " ", "T", "e", "s", "t", "\n", " ", " ", "d", "e", "f", " ", "t", "l", "e", "\n", " ", " ", "e", "n", "d", "\n", " ", " ", "d", "e", "f", " ", "s", "a", "y", "\n", " ", " ", " ", " ", "p", "u", "t", "s", " ", "'", "h", "e", "l", "l", "o", "'", "\n", " ", " ", "e", "n", "d", "\n", "e", "n", "d", "\n"]
ここまで分かるなら、それぞれから共通部分の長さを引いたものを修正量として扱えるんじゃないだろうか (てきとう)。
puts lcs.length puts "#{content1.length} - #{lcs.length} = #{content1.length - lcs.length}" puts "#{content2.length} - #{lcs.length} = #{content2.length - lcs.length}" # 64 # 71 - 64 = 7 # 93 - 64 = 29
とりあえず、大きい方を変更度として扱うことにする。この場合は 29 が変更度
ほんとにあってんのか検証してみる
修正前で共通部分の背景色を変更
class Test\n
def initialize\n
end\n
def say\n
puts 'hello'\n
end\n
end\n
修正後で共通部分の背景色を変更
class Test\n
def hoge\n
puts 'hello hoge'\n
end\n
def say\n
puts 'hello world'\n
end\n
end\n
これを反転すれば変更されたところが分かるはず。
修正前の変更箇所の背景色を変更
class Test\n
def initialize\n
end
def say\n
puts 'hello'\n
end\n
end\n
修正後の変更箇所の背景色を変更
class Test\n
def hoge\n
puts 'hello hoge'\n
end\n
def say\n
puts 'hello world'\n
end\n
end\n
文字数をカウントすると、一致するので、あってるっぽい。
修正して減った場合
他のパターンも試してみる
content1 =<<EOF class Test def initialize end def say puts 'hello' end end EOF content2 =<<EOF class Test def say puts 'hello' end end EOF lcs = Diff::LCS.LCS(content1, content2) p lcs puts lcs.length puts "#{content1.length} - #{lcs.length} = #{content1.length - lcs.length}" puts "#{content2.length} - #{lcs.length} = #{content2.length - lcs.length}"
結果
["c", "l", "a", "s", "s", " ", "T", "e", "s", "t", "\n", " ", " ", "d", "e", "f", " ", "s", "a", "y", "\n", " ", " ", " ", " ", "p", "u", "t", "s", " ", "'", "h", "e", "l", "l", "o", "'", "\n", " ", " ", "e", "n", "d", "\n", "e", "n", "d", "\n"] 48 71 - 48 = 23 48 - 48 = 0
変更度を 23 とする
修正して増減した場合
content1 =<<EOF class Test def initialize end def say puts 'hello' end end EOF content2 =<<EOF class Test def say puts 'hello' puts 'world' end end EOF lcs = Diff::LCS.LCS(content1, content2) p lcs puts lcs.length puts "#{content1.length} - #{lcs.length} = #{content1.length - lcs.length}" puts "#{content2.length} - #{lcs.length} = #{content2.length - lcs.length}"
結果
["c", "l", "a", "s", "s", " ", "T", "e", "s", "t", "\n", " ", " ", "d", "e", "f", " ", "s", "a", "y", "\n", " ", " ", " ", " ", "p", "u", "t", "s", " ", "'", "h", "e", "l", "l", "o", "'", "\n", " ", " ", "e", "n", "d", "\n", "e", "n", "d", "\n"] 48 71 - 48 = 23 65 - 48 = 17
変更度を 23 とする。
tweetvim の変更度を調べるスクリプトを書いてみる
とりあえず直近 100 コミット
#!/usr/bin/env ruby require 'diff/lcs' Dir.chdir(File.expand_path('~/repos/vimfiles/gitplugins/TweetVim')) ENV['GIT_PAGER'] = '' class Status def initialize @statuses = {} @files = [] end def [](key) @statuses[key] end def files @files end def add(line) line.chomp! if line =~ /^commit/ @statuses[:commit] = line.split(' ')[1] elsif line =~ /^Author/ @statuses[:author] = line.split(': ')[1] elsif line =~ /^Date/ @statuses[:date] = line.split(': ')[1] elsif line =~ /^[MAD]\t/ @files << line.split("\t")[1] end end end def get_content(commit, file_path) IO.popen("git show #{commit}:#{file_path} 2>/dev/null") { |io| io.read } end statuses = [] status = nil IO.popen('git log --name-status') do |io| while line = io.gets if line =~ /^commit/ statuses << status if status status = Status.new end status.add(line) break if statuses.length > 100 end end for i in 0...100 total = 0 point_logs = [] current = statuses[i] prev = statuses[i+1] for file in statuses[i].files content1 = get_content(current[:commit], file) content2 = get_content(prev[:commit], file) lcs = Diff::LCS.LCS(content1, content2) v1 = lcs.length - content1.length v2 = lcs.length - content2.length v1 = v1 * -1 if v1 < 0 v2 = v2 * -1 if v2 < 0 point = v1 > v2 ? v1 : v2 total += point point_logs << point.to_s.rjust(16) + " " + file + " (#{v1} : #{v2})" end puts "#{total.to_s.rjust(8)} : #{current[:commit]} | #{current[:author]} | #{current[:date]}" point_logs.each {|log| puts log } puts '' if point_logs.empty? end
出力形式
コミットの変更度 : コミット | ユーザ | 日付 ファイルの変更度 ファイル名 (修正前に対する変更度 : 修正後に対する変更度)
結果
0 : 6bcf7d95c0289289794499b0959e20bfb91b750d | basyura | Sat Feb 15 22:26:08 2014 71 : 1f017a3d2ad61dd70f1265b50c4f4d3d8ba2b704 | Shohei Fujii | Sat Feb 15 16:12:26 2014 71 autoload/tweetvim.vim (71 : 0) 43 : 9478169f4213b9e59b37e416a925a783c36a6db5 | basyura | Sat Dec 7 17:17:02 2013 43 autoload/tweetvim.vim (43 : 0) 930 : a5c80c116c2b660d81af75872c12b6313f48e903 | basyura | Sun Nov 17 22:28:48 2013 408 autoload/tweetvim.vim (408 : 347) 11 autoload/tweetvim/action/reload.vim (11 : 0) 60 autoload/tweetvim/filter.vim (60 : 0) 436 autoload/tweetvim/filter/userstream.vim (436 : 0) 15 plugin/tweetvim.vim (15 : 0) 86 : d33d0ff7c8fb64cfe63b526cdf030521dfe6fcda | basyura | Sun Nov 17 10:49:03 2013 32 autoload/tweetvim.vim (32 : 0) 54 autoload/tweetvim/action/reload.vim (54 : 1) 305 : 51acfa535fbb984889d0369cb476e3110db94846 | basyura | Mon Nov 4 17:26:37 2013 97 autoload/tweetvim/say.vim (97 : 84) 208 plugin/tweetvim.vim (208 : 0) 1 : 9bc7fef07a2741862f2080746d9a348210afdc0a | basyura | Mon Nov 4 09:49:27 2013 1 autoload/tweetvim/buffer.vim (1 : 0) 41 : 19dad61e2fd0509baa2b54d2837b0814348af5a6 | basyura | Mon Nov 4 09:44:04 2013 41 autoload/tweetvim/say.vim (41 : 0) 56 : c42bde480f5636e6d2ea30e5f7f15a16344360e1 | basyura | Sun Nov 3 14:27:38 2013 56 autoload/tweetvim/say.vim (42 : 56) 21 : 264b690b1999477e842d065798f6ab53d4729424 | basyura | Mon Oct 14 22:18:30 2013 21 autoload/unite/sources/tweetvim_add_to_list.vim (21 : 15) 283698 : f27a88d29384f494255050fbe028e2ffeeac4e6e | basyura | Sun Oct 13 08:40:06 2013 5445 autoload/vital/_5de2c28.vim (5445 : 0) 6788 autoload/vital/_5de2c28/Bitwise.vim (6788 : 0) 2710 autoload/vital/_5de2c28/Data/Base64.vim (2710 : 0) 357 autoload/vital/_5de2c28/Data/Collection.vim (357 : 0) 1280 autoload/vital/_5de2c28/Data/Dict.vim (1280 : 0) 5118 autoload/vital/_5de2c28/Data/LazyList.vim (5118 : 0) 6975 autoload/vital/_5de2c28/Data/List.vim (6975 : 0) 2387 autoload/vital/_5de2c28/Data/OrderedSet.vim (2387 : 0) 5879 autoload/vital/_5de2c28/Data/String.vim (5879 : 0) 1609 autoload/vital/_5de2c28/Data/Tree.vim (1609 : 0) 2661 autoload/vital/_5de2c28/Database/SQLite.vim (2661 : 0) 22024 autoload/vital/_5de2c28/DateTime.vim (22024 : 0) 2272 autoload/vital/_5de2c28/Experimental/Functor.vim (2272 : 0) 1249 autoload/vital/_5de2c28/Locale/Message.vim (1249 : 0) 4318 autoload/vital/_5de2c28/Mapping.vim (4318 : 0) 416 autoload/vital/_5de2c28/Math.vim (416 : 0) 11319 autoload/vital/_5de2c28/Prelude.vim (11319 : 0) 2828 autoload/vital/_5de2c28/Process.vim (2828 : 0) 2696 autoload/vital/_5de2c28/ProcessManager.vim (2696 : 0) 811 autoload/vital/_5de2c28/Random/Xor128.vim (811 : 0) 2255 autoload/vital/_5de2c28/System/Cache.vim (2255 : 0) 4268 autoload/vital/_5de2c28/System/File.vim (4268 : 0) 4608 autoload/vital/_5de2c28/System/Filepath.vim (4608 : 0) 1848 autoload/vital/_5de2c28/Text/CSV.vim (1848 : 0) 1276 autoload/vital/_5de2c28/Text/LTSV.vim (1276 : 0) 2545 autoload/vital/_5de2c28/Text/Lexer.vim (2545 : 0) 1608 autoload/vital/_5de2c28/Text/Parser.vim (1608 : 0) 190 autoload/vital/_5de2c28/Vim/Buffer.vim (190 : 0) 5076 autoload/vital/_5de2c28/Vim/BufferManager.vim (5076 : 0) 1138 autoload/vital/_5de2c28/Vim/Compat.vim (1138 : 0) 390 autoload/vital/_5de2c28/Vim/Message.vim (390 : 0) 1824 autoload/vital/_5de2c28/Web/HTML.vim (1824 : 0) 13947 autoload/vital/_5de2c28/Web/HTTP.vim (13947 : 0) 1228 autoload/vital/_5de2c28/Web/JSON.vim (1228 : 0) 8746 autoload/vital/_5de2c28/Web/URI.vim (8746 : 0) 7866 autoload/vital/_5de2c28/Web/XML.vim (7866 : 0) 5013 autoload/vital/_b268d8d.vim (0 : 5013) 6788 autoload/vital/_b268d8d/Bitwise.vim (0 : 6788) 2710 autoload/vital/_b268d8d/Data/Base64.vim (0 : 2710) 357 autoload/vital/_b268d8d/Data/Collection.vim (0 : 357) 1280 autoload/vital/_b268d8d/Data/Dict.vim (0 : 1280) 5118 autoload/vital/_b268d8d/Data/LazyList.vim (0 : 5118) 7189 autoload/vital/_b268d8d/Data/List.vim (0 : 7189) 2387 autoload/vital/_b268d8d/Data/OrderedSet.vim (0 : 2387) 5712 autoload/vital/_b268d8d/Data/String.vim (0 : 5712) 1609 autoload/vital/_b268d8d/Data/Tree.vim (0 : 1609) 2661 autoload/vital/_b268d8d/Database/SQLite.vim (0 : 2661) 22024 autoload/vital/_b268d8d/DateTime.vim (0 : 22024) 2272 autoload/vital/_b268d8d/Experimental/Functor.vim (0 : 2272) 1249 autoload/vital/_b268d8d/Locale/Message.vim (0 : 1249) 4318 autoload/vital/_b268d8d/Mapping.vim (0 : 4318) 416 autoload/vital/_b268d8d/Math.vim (0 : 416) 11319 autoload/vital/_b268d8d/Prelude.vim (0 : 11319) 2712 autoload/vital/_b268d8d/Process.vim (0 : 2712) 2696 autoload/vital/_b268d8d/ProcessManager.vim (0 : 2696) 2255 autoload/vital/_b268d8d/System/Cache.vim (0 : 2255) 4268 autoload/vital/_b268d8d/System/File.vim (0 : 4268) 4608 autoload/vital/_b268d8d/System/Filepath.vim (0 : 4608) 1276 autoload/vital/_b268d8d/Text/LTSV.vim (0 : 1276) 2545 autoload/vital/_b268d8d/Text/Lexer.vim (0 : 2545) 1608 autoload/vital/_b268d8d/Text/Parser.vim (0 : 1608) 190 autoload/vital/_b268d8d/Vim/Buffer.vim (0 : 190) 5076 autoload/vital/_b268d8d/Vim/BufferManager.vim (0 : 5076) 1138 autoload/vital/_b268d8d/Vim/Compat.vim (0 : 1138) 1824 autoload/vital/_b268d8d/Web/HTML.vim (0 : 1824) 14026 autoload/vital/_b268d8d/Web/HTTP.vim (0 : 14026) 1228 autoload/vital/_b268d8d/Web/JSON.vim (0 : 1228) 7866 autoload/vital/_b268d8d/Web/XML.vim (0 : 7866) 5 autoload/vital/tweetvim.vital (5 : 5) 69 : e91c913d66201f2536c9e2e6d4b679ddd1755f42 | itchyny | Fri Oct 4 23:16:38 2013 69 autoload/tweetvim/buffer.vim (69 : 65) 101 : 47e5e976d9802e5ca7516c4bbb764c6d5353181e | itchyny | Fri Oct 4 21:41:24 2013 101 autoload/tweetvim/buffer.vim (101 : 0) 63 : 3d6cde8142ce3a6d6c585a8a1cb91cce270cb3a1 | itchyny | Fri Oct 4 01:56:06 2013 63 autoload/tweetvim/buffer.vim (63 : 46) 4 : e886a00da61ae78199f2ea611711529b52c0c547 | itchyny | Thu Oct 3 21:54:15 2013 4 autoload/tweetvim/buffer.vim (0 : 4) 172 : f7a3a3f6bf6f538ee1b0355bb7d9e83aa82e5a28 | itchyny | Thu Oct 3 21:53:17 2013 172 autoload/tweetvim/buffer.vim (165 : 172) 1096 : 95a9cdc766a41af20cbaa5e0ed8777db2644fbb7 | itchyny | Thu Oct 3 15:38:23 2013 922 autoload/tweetvim/buffer.vim (922 : 20) 108 doc/tweetvim.txt (108 : 0) 66 plugin/tweetvim.vim (66 : 0) 1 : 574bbec77622e776e75f370b03a5a70ce4913a03 | Masahiro Saito | Tue Aug 27 16:10:04 2013 1 README.markdown (1 : 1) 3 : d123a53b93e8fb8e3d939ffdd2919d4008749156 | basyura | Mon Aug 26 00:11:30 2013 3 autoload/tweetvim/action/around.vim (3 : 3) 1064 : 48bc47c80253c618698cd1f5563f42ebb2d97109 | basyura | Sun Aug 25 23:11:30 2013 1002 autoload/tweetvim/action/around.vim (1002 : 19) 62 autoload/tweetvim/action/reload.vim (62 : 0) 28 : bc6139d0287901b3483ea171dfb23be53020babe | basyura | Sat Aug 24 22:59:22 2013 28 autoload/tweetvim/action/around.vim (28 : 0) 230 : 36ce506859573bc432d3bbca6974ac5de26397cc | basyura | Sat Aug 24 20:38:28 2013 11 autoload/tweetvim.vim (11 : 11) 127 autoload/tweetvim/action/around.vim (127 : 8) 92 syntax/tweetvim.vim (92 : 0) 671 : 2ef94db2eb566859cc9e8c4ee351cf2b5c8ffa80 | basyura | Sat Aug 24 18:46:44 2013 671 autoload/tweetvim/action/around.vim (671 : 0) 730 : 60a5f83052836e470419f9bd68c58f0d7dd8f2fb | basyura | Wed Aug 21 20:15:39 2013 728 README.markdown (728 : 0) 1 autoload/tweetvim.vim (1 : 1) 1 doc/tweetvim.txt (1 : 1) 0 : b80578b32d31bb2a4875bff210df63f36f9a4285 | basyura | Wed Aug 21 20:11:34 2013 0 : 32880d12e85cc6caf322324cf57523412f4dc710 | basyura | Tue Aug 20 01:28:08 2013 -0700 3 : eae9658d156e1b482f9b9e7d824bc2e156b38ed7 | rhysd | Tue Aug 20 14:41:54 2013 3 autoload/tweetvim/util.vim (3 : 3) 672 : aa7e8d6809a61108a64588d870add8f51b275834 | basyura | Mon Aug 19 19:43:34 2013 401 autoload/tweetvim/util.vim (401 : 0) 160 doc/tweetvim.txt (160 : 0) 111 plugin/tweetvim.vim (111 : 0) 257235 : 8deb314d406ead75c6ffdd3c3329ca0de6c80fa1 | basyura | Mon Aug 19 18:56:52 2013 5013 autoload/vital/_b268d8d.vim (5013 : 0) 6788 autoload/vital/_b268d8d/Bitwise.vim (6788 : 0) 2710 autoload/vital/_b268d8d/Data/Base64.vim (2710 : 0) 357 autoload/vital/_b268d8d/Data/Collection.vim (357 : 0) 1280 autoload/vital/_b268d8d/Data/Dict.vim (1280 : 0) 5118 autoload/vital/_b268d8d/Data/LazyList.vim (5118 : 0) 7189 autoload/vital/_b268d8d/Data/List.vim (7189 : 0) 2387 autoload/vital/_b268d8d/Data/OrderedSet.vim (2387 : 0) 5712 autoload/vital/_b268d8d/Data/String.vim (5712 : 0) 1609 autoload/vital/_b268d8d/Data/Tree.vim (1609 : 0) 2661 autoload/vital/_b268d8d/Database/SQLite.vim (2661 : 0) 22024 autoload/vital/_b268d8d/DateTime.vim (22024 : 0) 2272 autoload/vital/_b268d8d/Experimental/Functor.vim (2272 : 0) 1249 autoload/vital/_b268d8d/Locale/Message.vim (1249 : 0) 4318 autoload/vital/_b268d8d/Mapping.vim (4318 : 0) 416 autoload/vital/_b268d8d/Math.vim (416 : 0) 11319 autoload/vital/_b268d8d/Prelude.vim (11319 : 0) 2712 autoload/vital/_b268d8d/Process.vim (2712 : 0) 2696 autoload/vital/_b268d8d/ProcessManager.vim (2696 : 0) 2255 autoload/vital/_b268d8d/System/Cache.vim (2255 : 0) 4268 autoload/vital/_b268d8d/System/File.vim (4268 : 0) 4608 autoload/vital/_b268d8d/System/Filepath.vim (4608 : 0) 1276 autoload/vital/_b268d8d/Text/LTSV.vim (1276 : 0) 2545 autoload/vital/_b268d8d/Text/Lexer.vim (2545 : 0) 1608 autoload/vital/_b268d8d/Text/Parser.vim (1608 : 0) 190 autoload/vital/_b268d8d/Vim/Buffer.vim (190 : 0) 5076 autoload/vital/_b268d8d/Vim/BufferManager.vim (5076 : 0) 1138 autoload/vital/_b268d8d/Vim/Compat.vim (1138 : 0) 1824 autoload/vital/_b268d8d/Web/HTML.vim (1824 : 0) 14026 autoload/vital/_b268d8d/Web/HTTP.vim (14026 : 0) 1228 autoload/vital/_b268d8d/Web/JSON.vim (1228 : 0) 7866 autoload/vital/_b268d8d/Web/XML.vim (7866 : 0) 4833 autoload/vital/_f6aedf7.vim (0 : 4833) 6788 autoload/vital/_f6aedf7/bitwise.vim (0 : 6788) 2710 autoload/vital/_f6aedf7/data/base64.vim (0 : 2710) 357 autoload/vital/_f6aedf7/data/collection.vim (0 : 357) 1280 autoload/vital/_f6aedf7/data/dict.vim (0 : 1280) 5592 autoload/vital/_f6aedf7/data/list.vim (0 : 5592) 2387 autoload/vital/_f6aedf7/data/ordered_set.vim (0 : 2387) 5956 autoload/vital/_f6aedf7/data/string.vim (0 : 5956) 1609 autoload/vital/_f6aedf7/data/tree.vim (0 : 1609) 21965 autoload/vital/_f6aedf7/date_time.vim (0 : 21965) 2272 autoload/vital/_f6aedf7/experimental/functor.vim (0 : 2272) 1249 autoload/vital/_f6aedf7/locale/message.vim (0 : 1249) 4318 autoload/vital/_f6aedf7/mapping.vim (0 : 4318) 279 autoload/vital/_f6aedf7/math.vim (0 : 279) 9891 autoload/vital/_f6aedf7/prelude.vim (0 : 9891) 3290 autoload/vital/_f6aedf7/process.vim (0 : 3290) 2358 autoload/vital/_f6aedf7/system/cache.vim (0 : 2358) 4487 autoload/vital/_f6aedf7/system/file.vim (0 : 4487) 4607 autoload/vital/_f6aedf7/system/filepath.vim (0 : 4607) 2499 autoload/vital/_f6aedf7/text/lexer.vim (0 : 2499) 1276 autoload/vital/_f6aedf7/text/ltsv.vim (0 : 1276) 5016 autoload/vital/_f6aedf7/vim/buffer/manager.vim (0 : 5016) 4782 autoload/vital/_f6aedf7/vim/buffer_manager.vim (0 : 4782) 1138 autoload/vital/_f6aedf7/vim/compat.vim (0 : 1138) 1824 autoload/vital/_f6aedf7/web/html.vim (0 : 1824) 9635 autoload/vital/_f6aedf7/web/http.vim (0 : 9635) 1228 autoload/vital/_f6aedf7/web/json.vim (0 : 1228) 7866 autoload/vital/_f6aedf7/web/xml.vim (0 : 7866) 5 autoload/vital/tweetvim.vital (5 : 5) 326 : e33ec893499bfa840f5d6bb30b4f37db1094f322 | basyura | Mon Aug 12 14:25:58 2013 314 autoload/tweetvim/account.vim (314 : 256) 6 autoload/tweetvim/complete.vim (6 : 0) 6 autoload/unite/sources/tweetvim_timeline.vim (6 : 0) 0 : 53186547fda4a264f11cffa861a8f768d52eeca3 | basyura | Sun Aug 11 17:27:29 2013 300 : e322d01482be911c0ed7ff5d206aed767d510b96 | alpaca_taichou | Sun Aug 11 01:19:18 2013 300 plugin/tweetvim.vim (83 : 300) 35 : 5b0bf64cc457c0e5cf24fb2b4aaf1be90eaa65b3 | basyura | Tue Aug 6 08:45:10 2013 35 autoload/tweetvim/buffer.vim (35 : 0) 0 : 53d050c0db7a15191e1e962fd5ea7ffe6ab0e891 | basyura | Fri Aug 2 00:55:05 2013 -0700 14 : fc3e3e6b111ffb7619bc3ff690c85e2a783bc60f | rhysd | Fri Aug 2 14:30:54 2013 14 autoload/tweetvim.vim (14 : 2) 2 : 2f75fb04067f515dc5e0292082df210f98122b09 | basyura | Tue Jul 30 22:42:50 2013 2 plugin/tweetvim.vim (2 : 1) 83 : 879c7291b28558a7bf928439d0c585662803bf5d | basyura | Thu Jul 25 00:11:21 2013 83 autoload/tweetvim/action/reload.vim (83 : 0) 0 : 388ac9e64640f3ea2c26b85ca8db7aaf89a9ce41 | basyura | Sat Jul 20 01:03:02 2013 -0700 31 : 028ca70740ac0ca302c52cbb1f19eb8f4bbb5f38 | Shohei Fujii | Sat Jul 20 15:12:07 2013 31 autoload/tweetvim.vim (31 : 0) 91 : 908316ee8751c0a83c23ce8a6c6ad7bef13c5ea3 | basyura | Mon Jul 15 23:14:08 2013 91 autoload/tweetvim/buffer.vim (91 : 0) 5 : 1e56f6082c993c15942492579d0f32cd1a84cf59 | basyura | Mon Jul 15 22:20:38 2013 5 autoload/tweetvim/buffer.vim (2 : 5) 1095 : 189532cbe993f0eeb501fc3dbe2959b074866119 | basyura | Mon Jul 15 20:20:48 2013 361 autoload/tweetvim/action/buffer_previous_stream.vim (361 : 0) 612 autoload/tweetvim/buffer.vim (612 : 0) 122 plugin/tweetvim.vim (122 : 0) 78 : 5e8afbc87b8f566a7801bff86d15f44b548e85c1 | basyura | Sat Jul 13 21:51:01 2013 78 autoload/tweetvim/buffer.vim (78 : 0) 50 : d25d2e2c8aeb45d609c4220dd2175532b476beb7 | basyura | Wed Jul 10 22:21:00 2013 50 autoload/tweetvim/action/reply_to_all.vim (0 : 50) 0 : 57556c2d908aa0997bfb1c3b030e2236c0fe3ef6 | basyura | Wed Jul 10 21:49:02 2013 52 : 6a12e362ec3a1cfdbde308254c53b68881b8790b | Shohei Fujii | Mon Jul 8 21:54:42 2013 52 autoload/tweetvim/action/reply_to_all.vim (52 : 0) 172 : 6a898fa26ef120102714e18f6c34bf7b9e4960e5 | Shohei Fujii | Mon Jul 8 21:46:22 2013 67 autoload/tweetvim/buffer.vim (67 : 0) 105 plugin/tweetvim.vim (105 : 0) 699 : 1f70b53ba1a18a32ca03243f216e2f5da972bb4a | Shohei Fujii | Mon Jul 8 21:09:01 2013 699 autoload/tweetvim/action/reply_to_all.vim (699 : 0) 289 : dafba5044fa07ba35f1c4a2dff25e168c3f4f3b8 | basyura | Fri Jul 5 22:34:28 2013 289 autoload/tweetvim/buffer.vim (289 : 2) 0 : a656628e94f3171414ecc33737518257a55cbbe8 | basyura | Fri Jul 5 22:12:17 2013 576 : ee94ab38cc62bcd2e29e515d151d405bd56f31f0 | Shohei Fujii | Thu Jul 4 18:57:43 2013 186 autoload/tweetvim.vim (186 : 0) 390 autoload/tweetvim/buffer.vim (390 : 0) 2 : 99ce8485d93467176cbbda97c5705711da915485 | basyura | Sun Jun 30 10:42:07 2013 2 plugin/tweetvim.vim (1 : 2) 0 : 9df368ccfc432958b624a8005446168fbe0b6721 | basyura | Sat Jun 29 14:50:55 2013 25 : d420337adaba8f5279c0c0fa8283b5f978f3df62 | rhysd | Sat Jun 29 14:05:24 2013 25 autoload/tweetvim.vim (25 : 0) 108 : ceb68842672ccb9ff5efcbdd97484135fcc1d690 | basyura | Tue Jun 25 23:47:19 2013 108 autoload/tweetvim/buffer.vim (108 : 0) 214 : 36bcd3c9201ff560fc8c0b93d067432f0c0f3a5b | basyura | Mon Jun 24 10:15:40 2013 214 README.markdown (214 : 0) 26 : d1b015218db8cf28090cc0293ef75574b96ba6a6 | basyura | Mon Jun 24 10:15:31 2013 25 autoload/tweetvim.vim (25 : 0) 1 autoload/tweetvim/buffer.vim (1 : 0) 162 : 2ec80bd9138cd75fc7b1c980d330995d23ad6a02 | basyura | Wed Jun 19 12:50:25 2013 162 autoload/tweetvim.vim (162 : 48) 96 : 58cbbdc0ddedf1853fb9355d5b743d148dcde17d | basyura | Sun Jun 16 20:54:07 2013 28 autoload/tweetvim.vim (28 : 2) 68 plugin/tweetvim.vim (68 : 0) 70 : 629d2ea700277141d058e883b68b7e5250491be7 | basyura | Sun Jun 16 20:53:54 2013 70 autoload/tweetvim.vim (70 : 1) 355 : 9a739dd9f4f3558d461bd8b95adda0d5bce8b9ee | basyura | Fri Jun 14 21:44:20 2013 355 autoload/tweetvim.vim (355 : 1) 1 : 4d8391ce411fb729807421cd91098c7866696849 | basyura | Mon Jun 10 22:03:55 2013 1 autoload/tweetvim.vim (1 : 1) 28 : 81f764310cd2043a486b63129a6b4ae707e6cff0 | basyura | Sun Jun 9 21:58:07 2013 28 autoload/tweetvim.vim (0 : 28) 493 : af0116765ec26691ca910802b868f86ccdf980c0 | basyura | Sun Jun 9 21:47:03 2013 493 autoload/tweetvim.vim (493 : 266) 224 : 161cf45cddfd17c4cd84fd075775b7b7271535af | basyura | Sun Jun 9 17:55:25 2013 224 autoload/tweetvim/buffer.vim (224 : 31) 1021 : 3176ca89e023eb699c43948bf609edcda9d09b74 | basyura | Sun Jun 9 16:53:58 2013 505 autoload/tweetvim.vim (121 : 505) 516 autoload/tweetvim/util.vim (516 : 0) 200 : 7a10ee1e378d21be71f018b7c659920f0c617b4c | basyura | Sun Jun 9 16:23:36 2013 142 autoload/tweetvim.vim (142 : 0) 58 autoload/tweetvim/buffer.vim (58 : 0) 277 : 8aede7532fec47e7c75da748b5d6156e4ce899f9 | basyura | Sun Jun 9 13:09:35 2013 270 autoload/tweetvim/buffer.vim (270 : 111) 7 syntax/tweetvim.vim (7 : 5) 79 : bd329433328eb13ec19d9f354aa83c4ba4232af9 | basyura | Sat Jun 8 14:34:34 2013 4 autoload/tweetvim.vim (4 : 3) 75 plugin/tweetvim.vim (5 : 75) 0 : e094926045395aaeb19829dfa62812f58e9d4f9a | basyura | Sat Jun 8 08:30:42 2013 2 : dfcd3d01c99f9e9c6a01556d9fafff51b5aa9e0b | basyura | Fri Jun 7 21:30:39 2013 2 autoload/tweetvim.vim (2 : 2) 792 : 755d38e009b1fc5bb1bc1112edc26c3adced8b47 | basyura | Fri Jun 7 21:30:00 2013 792 doc/tweetvim.txt (792 : 1) 110 : 273f564112d17ec427654ed6859392482a158e9b | basyura | Tue Jun 4 21:41:14 2013 110 autoload/tweetvim/buffer.vim (110 : 0) 251 : 3b977aacb017113c5f7abb291736f580241f6273 | basyura | Tue Jun 4 16:06:11 2013 215 autoload/tweetvim/action/cursor_down.vim (215 : 13) 36 autoload/tweetvim/action/cursor_up.vim (36 : 2) 268 : e53111cd3ad0c3149ad487ea110583ce390956e5 | basyura | Mon Jun 3 22:36:27 2013 59 autoload/tweetvim/buffer.vim (59 : 1) 59 autoload/tweetvim/say.vim (59 : 0) 150 plugin/tweetvim.vim (150 : 0) 32 : 512c65e56f4cc55a65608c7fa0c9c87d9ac242d3 | basyura | Mon Jun 3 21:42:44 2013 32 autoload/tweetvim/buffer.vim (2 : 32) 254 : 4880290114e50f43dfa5cf290df6b0be65b4cbfd | basyura | Mon Jun 3 19:53:46 2013 192 autoload/tweetvim/buffer.vim (192 : 11) 62 plugin/tweetvim.vim (62 : 0) 20 : 835f0ea9c42c670721d8d897348a3ca7916da970 | basyura | Mon Jun 3 08:55:00 2013 10 autoload/tweetvim.vim (10 : 0) 10 autoload/tweetvim/buffer.vim (10 : 0) 0 : d1b29c7eaab6c434c7a8277e443183725e4ffd79 | basyura | Sun Jun 2 13:19:34 2013 96 : f8e91d99e992b6b8d2e471c9aceec2f53cae6d84 | basyura | Sun Jun 2 10:09:29 2013 96 autoload/tweetvim.vim (96 : 0) 31 : bf48354c45a335d7bfc2f1796e3023a520931a79 | basyura | Sun Jun 2 00:33:52 2013 27 autoload/tweetvim.vim (27 : 0) 4 autoload/tweetvim/buffer.vim (4 : 0) 30 : 56045fbc3139d6a41fa74145424c559d4e89e460 | basyura | Sun Jun 2 00:21:26 2013 30 autoload/tweetvim.vim (30 : 0) 459 : 76e585b7d07eeaf421f0e7f3800aff6c20db4fef | basyura | Sun Jun 2 00:17:38 2013 427 autoload/tweetvim.vim (427 : 0) 15 autoload/tweetvim/buffer.vim (15 : 9) 17 plugin/tweetvim.vim (17 : 0) 54 : 6c43f5871d502c24fb8dbbb4eb286466a6a9333d | basyura | Sat Jun 1 18:07:33 2013 54 autoload/tweetvim.vim (54 : 2) 28 : baffd325abaa02b79c3e31e4a41a814283972cb7 | basyura | Sat Jun 1 17:48:57 2013 28 autoload/tweetvim.vim (28 : 0) 6 : 35ffe2866951539a472bea29f46dcb070f2be8a7 | basyura | Sat Jun 1 17:41:56 2013 6 autoload/tweetvim.vim (6 : 4) 223 : b18c84fea3401019724362a468073eee747305a6 | basyura | Sat Jun 1 16:24:21 2013 223 autoload/tweetvim/buffer.vim (223 : 61) 311 : 5a94f55c1603561bc9c5b1b06127ddb7e67eda41 | basyura | Sat Jun 1 15:27:52 2013 222 autoload/tweetvim.vim (222 : 13) 89 autoload/tweetvim/buffer.vim (89 : 1) 201 : 2502e228c5ae36bd29a5637a2b6298ca214443ea | basyura | Sat Jun 1 15:08:15 2013 201 autoload/tweetvim/buffer.vim (201 : 0) 2 : ea5bd9f882c1b6583d1fd2b60c202a05b324ca5f | basyura | Sat Jun 1 13:44:03 2013 2 autoload/tweetvim.vim (2 : 2) 127 : af84f6ab7b2ec3c3e85ed3f5b29207f0b629f5d8 | basyura | Sat Jun 1 13:41:39 2013 127 autoload/tweetvim.vim (127 : 0) 994 : d6919e13db1e4526eee01f8b76041bf3cea62c03 | basyura | Sat Jun 1 13:00:37 2013 874 autoload/tweetvim.vim (874 : 89) 120 autoload/tweetvim/buffer.vim (120 : 31) 20 : b72932ffc1cca657d55a2f63626f12a0115a1a22 | basyura | Fri May 31 22:12:26 2013 20 autoload/tweetvim/say.vim (20 : 0) 342 : b49a3d790af20634976f6174c5215dfbcfd172aa | basyura | Fri May 31 15:04:08 2013 278 autoload/tweetvim.vim (278 : 0) 64 plugin/tweetvim.vim (64 : 0) 42 : 4e5ea018cb749043eabd6dc437376fd0c53bda62 | basyura | Fri May 31 14:49:55 2013 42 autoload/unite/sources/tweetvim_switch_account.vim (42 : 0) 165 : 14ad026f1bb20772f0b6c0e0f07945383c86185f | basyura | Fri May 31 14:43:37 2013 165 autoload/tweetvim.vim (165 : 9) 85 : b59b383b84ef1f6d5b33c165d8f58d8a6315aba8 | basyura | Fri May 31 13:14:20 2013 85 autoload/tweetvim.vim (85 : 0) 282 : cb36ad9215ab41f71868e5e382e1f56c2e8e27a3 | basyura | Fri May 31 12:56:31 2013 282 autoload/tweetvim/buffer.vim (282 : 0) 348 : b5d22239afc4927050f0a2c40bcbb2c83fde841c | basyura | Fri May 31 12:34:27 2013 2 autoload/tweetvim.vim (2 : 2) 346 autoload/tweetvim/buffer.vim (346 : 251) 582 : 384c2603b43fc3952838ce6e1c84582224226a80 | basyura | Fri May 31 11:27:38 2013 158 autoload/tweetvim.vim (158 : 158)
結構それっぽく出てる。vital の更新はさすがにでかい。
気が向いたらユーザとか日付指定で出せるようにしてみる。