2012-11-01から1ヶ月間の記事一覧

Vim script でパターンマッチ

vim

を書いてみた。 構文は Scala を参考に。 [ソース] function! s:func(n) Match a:n Case 1 => echo "one" Case 2 => echo "two" Case 3 => echo "three" EndMatch endfunction function! s:typename(a) Match type(a:a) Case type(0) => "integer" Case type…

Ruby でワンライナーでクイックソート

と、いっても lambda で簡単に再帰するために Proc を拡張しているんですが。 [ソース] class Proc def self_curry self.curry.call(self) end end p lambda { |f, seq| seq.empty? ? [] : seq[1..seq.size].partition { |a| a < seq.first }.map { |a| f.ca…

Ruby でクイックソート 2回目

コメントで partition を教えてもらたので使ってみました。 [ソース] # 偶数と奇数に分割 evens, odds = (1..10).partition { |n| n % 2 == 0 } p evens p odds def quick_sort(seq) if seq == [] return [] end x = seq.first xs = seq[1..seq.size] left, …

Sprout に range adaptor が追加されていたので使ってみた

軽く触ってみました。 [ソース] #include <sprout/range/adaptor/jointed.hpp> #include <sprout/range/adaptor/dropped.hpp> #include <sprout/range/adaptor/taken.hpp> #include <sprout/range/adaptor/counting.hpp> #include <sprout/range/adaptor/filtered.hpp> #include <sprout/range/adaptor/copied.hpp> #include </sprout/range/adaptor/copied.hpp></sprout/range/adaptor/filtered.hpp></sprout/range/adaptor/counting.hpp></sprout/range/adaptor/taken.hpp></sprout/range/adaptor/dropped.hpp></sprout/range/adaptor/jointed.hpp>

Ruby でクイックソート

とりあえず、書いてみた。 [ソース] def quick_sort(seq) if seq == [] return [] end x = seq.first xs = seq[1..seq.size] quick_sort(xs.select { |a| a < x }) + [x] + quick_sort(xs.select { |a| a >= x }) end source = (1..10).sort_by{rand} p sour…

quickrun.vim で既存の設定を継承して設定する

vim

他人の vimrc を読んでいるとたまに let g:quickrun_config = {} let g:quickrun_config["g++0x"] = deepcopy(g:quickrun#default_config["cpp/g++"]) let g:quickrun_config["g++0x"].cmdopt = "--std=c++0x" という感じで g:quickrun#default_config から …

awesome_print でハッシュのキーを左寄せにする

indent オプションで左寄せに出来ました。 [ソース] require "awesome_print" data = { :now => Time.now, :class => Time.now.class, :distance => 42e42 } # 何も設定しない場合 ap data # indent に -2 を設定する ap data, :indent => -2 # デフォルトの…

awesome_print で整形して Ruby のデータを出力

Twitter で(U^ω^)に教えてもらったので試してみました。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.…

Ruby で値を整形して出力する

Vim でいう prettyprint.vim みたいな感じですが、リストやハッシュをいい感じに整形して出力する場合、pp を使えばいいみたいです。 こんな感じ。 [ソース] require "pp" data = { "data" => { 1 => "one", 2 => "two", 3 => "three" }, "name" => ["homu",…

quickrun.vim を中断させる

vim

実行中の quickrun.vim を中断させる場合、quickrun#sweep_sessions 関数を使用します。 また、quickrun.vim が実行中かどうかは、quickrun#is_running 関数で判定する事が出来ます。 以上のことを踏まえてこんな感じにマッピングして使用しています。 nnore…

sinatra + heroku 触ってみた

といってもまだ hello, world 程度ですが。 ちょっと欲しい Web サービスがあったので『自分でつくってみるかー』って事で敷居が低そうな sinatra + heroku を触ってみました。 とりあえず、手元から git push して Web に表示させるまではできた。 Windows …

reti.vim でクロージャ

vim

簡単に。 [ソース] function! s:make_counter() let n = 0 return reti#execute("let n += 1 | return n", l:) endfunction let s:counter = s:make_counter() echo s:counter() " => 1 echo s:counter() " => 2 echo s:counter() " => 3 echo s:counter() "…

コマンドから Microsoft Visual C++ Compiler Nov 2012 CTP を使えるようにする

Visual Studio からではなくて Vim とかから Microsoft Visual C++ Compiler Nov 2012 CTP を呼び出したい場合があると思います。 その場合は cl.exe のオプションとかではなくて、インストールしたディレクトリの /bin と /include を環境変数に追加すれば…

Vim で環境に合わせて Visual Studio の環境変数を設定する

Vim から cl.exe を呼び出す場合、vcvarsall.bat に書かれている環境変数を定義しておく必要があります。 端末から Vim を起動させる場合は vcvarsall.bat を叩いてから Vim を起動させればいいんですが、直接 gvim を起動させる事が多いと思います。 と、い…

reti.vim でフィボナッチ

vim

元ネタ:Vim scriptとvital.vimでフィボナッチを書く reti.vim でも同様な事が出きそうなのでやってみた。 [ソース] echo reti#foldl("add(a:1, a:1[a:2] + a:1[a:2+1])", [1, 1], range(25)) [出力] [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377,…

lambda のキャプチャで変数を保持

C++

そういえば、こういう事ができるのかーと思いつつ。 [ソース] #include <functional> #include <iostream> std::function<int(int)> make_sum(){ int sum = 0; return [=](int n) mutable -> int{ sum += n; return sum; }; } int main(){ auto sum = make_sum(); std::cout << sum(1) << std</int(int)></iostream></functional>…

TweetVim で自動ツイートする

vim

書いてみました。 TweetVim 1.8 で非同期ツイート機能が実装されたのでレスポンスはさほど気になりません。 [ソース] function! s:rotate(list) let result = a:list + [a:list[0]] unlet result[0] return result endfunction let s:latest_time = localtim…

いつの間にか gcc 4.8 に Inheriting constructors が実装されていた

C++

lingr で聞かれて調べていたんですが、いつの間にか gcc 4.8 に Inheriting constructors が実装されていました。 C++0x/C++11 Support in GCC と、いうことでここから gcc 4.8 のバイナリを落としてきて試しました。 [ソース] struct base{ constexpr base(…

NeoBundleUpdate で更新しないように設定する

vim

実装してもらいました。 stay_same に 1 を設定します。 " NeoBundleUpdate で更新されない NeoBundle "git://github.com/Shougo/unite.vim.git", { 'stay_same' : 1 } NeoBundle 'git://github.com/Shougo/vimfiler.git', { 'stay_same' : 1 } 自作プラグイ…

vimshell/history を insert で開始しないようにする

vim

タイトルどおりなんですが、VimShell の で起動する unite-vimshell/history が insert で開始するんですが、これを止めさせたかったので設定を変更しました。 [ftplugin/vimshell.vim] inoremap <buffer><expr> <C-l> unite#start_complete( \ ['vimshell/history'], { \ 'no_s</c-l></expr></buffer>…

quickrun.vim で特定の範囲を出力しないようにする・続き

vim

昨日のつづき。 よくよく考えると runner-vimscript を改ざんしなくても &verbosefile のみ変更すればよかったのでちょっと変えました。 [ソース] let temp1 = g:verbosefile_push(tempname()) echo "homu" let temp2 = g:verbosefile_push(tempname()) echo…

quickrun.vim で特定の範囲を出力しないようにする

vim

欲しかったのでざっくり書いてみました。 [ソース] echo "homu" " ==== ここから ==== QuickRunVimScriptSilentBegin echo "mado" echo "saya" QuickRunVimScriptSilentEnd " ==== ここまでは出力されない ===== echo "mami" [出力] homu mami 特定の範囲の…

Sprout.Weed でコンパイル時に __DATE__ のパース

久々に Sprout.Weed を触りたくなったので。 [ソース] #include <sprout/weed.hpp> #include <sprout/string.hpp> int main(){ namespace w = sprout::weed; static constexpr auto date = sprout::to_string(__DATE__); static constexpr auto parser = *w::lim<3>(w::char_ - w::space_) >> *w:</sprout/string.hpp></sprout/weed.hpp>…

Vim script でリスト時の v:key の扱い

vim

map や filter 関数で使用する v:key は辞書の場合は要素のキーを保持しているんですが、リストの場合は要素のインデックスを保持しています。 [ソース] let list = ["homu", "mami", "mado"] call map(list, "{ v:val : v:key }") echo list [出力] [{'homu…

Vim script で Twitter stream を簡単にしてみた

vim

vim で stream api - basyura’s blog vim で twitter stream - Big Sky mattn さんのコードを元に、今考えているロジックだとどんな感じになるのかちょっと書き換えてみた。 [ソース] " base code : https://github.com/mattn/streamer-vim/blob/master/auto…

Boost 1.52.0 がリリース

Boost 1.52.0 がリリースされました。 Version 1.52.0 Boost 1.52.0 リリースノート(日本語版) 新しいライブラリはないですが、Boost.Thread がだいぶ修正されているらしいです。 しかし、この間 1.51.0 がリリースされたと思ったらもう 1.52.0 がリリースさ…

Vim script でクイックソート

vim

そういえば、クイックソートって書いたことがないんだよなーって事で Vim script で簡単に書いてみた。 [ソース] function! s:quick_sort(seq) if a:seq == [] return [] endif let pivot_pos = len(a:seq) / 2 let pivot = a:seq[ pivot_pos ] let left = s…

第1回 Boost.読書会

C++

行いました。 [ログ] http://www.co-meeting.com/snapshot/507847b3ab5c3703c7000b28 [参加メンバー] Koichi Oyama Shigemasa Watanabe faith_and_brave manga_osyo saki7 計5名 [所感] lingr で行なっている vimrc読書会や C++読書会と違って co-meeting 上…

Visual Studio 2012 に C++11 の機能が追加されるらしい

C++

Announcing November CTP of the C++ compiler, now with more C++11 Visual Studio 2012 に新しい C++11 の機能が追加される(された?)らしいので試してみました。 今回実装されたのは下記の機能です。 Variadic templates Uniform initialization and in…

Vim で一定時間ごとに処理を割り込む

vim

Vim で一定時間ごとに処理を呼びたい場合があると思います。 通常は autocmd に CursorHold や CursorHoldI に設定をすればいいのですが、この設定ではキー入力がない場合に続けてイベントが発生しません。 (一度 CursorHold が呼ばれてからキー入力がない…