2012-10-01から1ヶ月間の記事一覧
やってみた。 動作するためには reti.vim と chained.vim が必要です。 こういうのをやっていると reti.vim が必須になってきますねぇ。 [ソース] let s:just = 1 let s:nothing = { "tag" : !s:just } function! s:nothing.bind(func) return self endfunct…
chained.vim を使用します。 [ソース] function! HomuFunction() echo chained#this_func() " => HomuFunction endfunction function! g:homu_function() echo chained#this_func() " => g:homu_function endfunction function! s:homu_function() echo chai…
ラムダ式のキャプチャで [=] を使用すると全てのローカル変数をコピーしてキャプチャ出来るんですが、ラムダ内で使用されなかった変数はコピーされません。 [ソース] #include <iostream> struct X{ X(){ std::cout << "X::X()" << std::endl; } X(X const&){ std::cou</iostream>…
ちとはまったので覚書。 まぁ普通はしないと思うんですが。 :QuickRun -hook/test/value homu -hook/test/value mami -hook/test/value mado のように同じオプションを複数渡すと hook 側ではリストで受け取ります。 [ソース] " quickrun-test {{{ let s:hoo…
C++ のラムダ式で変数をコピーしてキャプチャした場合、その変数の値を変更する事ができません。 int n = 10; [n](){ // error n = 42; }; どうしても変更したい場合は mutable を付けることで変更することが出来るようになります。 [ソース] #include <iostream> int </iostream>…
Vim script の関数の引数は基本的に読み取り専用なんですが、次のように思わぬところで辞書を書き換えてしまうようなケースがあります。 function! s:func(dict) " 呼び出し元の dict まで書き換えられてしまう call filter(a:dict, "len(v:val) < 4") endfu…
neobundle.vim でインストールしたプラグインは neobundle#rc に渡したパスに作成されるのですが、NeoBundle ごとに保存するディレクトリを変更したい場合があります。 その場合は、下記のような感じで base に設定を行えば個別に変更が出来るみたいです。 N…
Boost.MPL の inherit を使用すれば、テンプレート引数型を全て継承する型を定義することが出来ます。 [ソース] #include <boost/mpl/inherit.hpp> #include <iostream> #include <type_traits> struct X1{ int value; }; struct X2{ void func() const{ std::cout << "X2" << std::endl; } }; int main(){ </type_traits></iostream></boost/mpl/inherit.hpp>…
元々 Vim script でスレッド処理が行いたかったのですが、残念ながらどうあがいてもそれは無理なので 『それならばコルーチンを使って細かく処理を分ければいいのでは?』 といったことが事がきっかけ。 まぁコルーチン自体は使ったことがないんですが。 で…
はじめて見たんですが、Vim script にインスタンスの参照を比較する is 演算子があります。 使い方はこんな感じ。 [ソース] function! s:main() let l1 = [1, 2, 3] let l2 = l1 " 同じインスタンスを参照しているか if l1 is l2 echo "homu" endif let l1[0…
neocomplcache-snippets-complete は neosnippet になりました - あるVimmerのブログ という事なので使用している方は注意して下さい。 設定もこんな感じで変更しました。 [before] "スニペットのディレクトリ if !exists("g:neocomplcache_snippets_dir") l…
Vim script のテストコードとか書いている時にいちいち call で呼び出すのも手間だなーって事でいい感じに呼べるようにマッピングしてみました。 必要なものは下記の Vim script です。 current-func-info.vim - github スクリプトローカルな関数を手軽に呼…
The LLVM Compiler Infrastructure LLVM 3.1 リリースまでのスケジュールは以下の通り。 11月11日 - Branching for 3.2 release 11月12〜29日 - Phase 1 - release candidate testing 11月29日 - End of Phase 1, all features completed 11月30日〜 12月12…
気がついたら結構本格的になってしまっていたのでいっそのことプラグイン化してようかと。 まぁ使い道があるのかわからないけども。 だいたいやりたいことはできた。 ちなみにプラグイン名はでちまるさんに考えてもらいました。 [プラグイン] vim-reti - git…
相変わらずプラグイン名から機能がわからないんですが、先日つくったこれをちょっと書きなおしてプラグインにしてみました。 vim-chained - github スクリプトローカル関数で SID を取得したり関数のコールスタックを取得できます。 まぁ一般ユーザにはあま…
少し前に neocomplcache に遅延初期化機能が実装されました。 これは、Vim の起動時に初期化を行うのではなくて、最初のキー入力時に neocomplcache の初期化を行うというものです。 これで Vim の起動時間が短縮されます。 ただ、わたしの場合『Vim でキー…
最近教えてもらった黒魔術を覚書。 と、いうかだいぶ改造したので原型があまり残っていない(基本的なロジックはそのままだけど。 簡単に説明すると g:SID() をつくりました。 とりあえず、こんな感じで使えます。 [使い方] function! s:main() " 呼び出し元…
欲しかったので書いてみました。 [ソース] " タブページの移動 command! -bar TabMoveNext :execute "tabmove" tabpagenr() % tabpagenr("$") command! -bar TabMovePrev :execute "tabmove" (tabpagenr("$") + tabpagenr() - 2) % tabpagenr("$") " マッピ…
さて、unite-file では .exe ファイルの列挙が行われないのですが、個人的に存在しているファイルが列挙されないのは気持ちが悪いのでユーザ側で列挙されるように設定します。 [ソース] " unite-file の ignore_pattern を設定する call unite#custom_source…
また読書会かよ!!って感じではあるんですが、lingr でノリノリに雑談していたらいつの間にか Boost.読書会をやる事になりました。 な、何をいっているのかry。 こっちは C++オンライン読書会と違って結構真面目です。 例によってオンラインの読書会になり…
n3405 で面白い提案がされていたので覚書。 次のように非型テンプレートパラメータを受け取る場合、型を指定する必要がありました。 template<typename T, T t> struct X{}; X<int, 10>::value // == 10 X<bool, false>::value // == false これを n3405 の提案では // 受け取り側はこんな感じで書く</bool,></int,></typename>…
さて、vital.vim をローカルで遊ぶ場合に一般的には下記のような使い方になると思います。 let s:V = vital#of("vital") let s:DataList = s:V.import("Data.List") let s:Prelude = s:V.import("Prelude") echo s:DataList.char_range("a", "z") echo s:Dat…
バックエンドに vimproc を使用して、Vim script で簡単に外部コマンドの非同期処理が行えるようなラッパを書いてみました。 これで比較的簡単に非同期処理を行うことが出来ると思います。 例によって updatetime に依存しているので、その値が大きいと時間…
殆ど quickrun.vim の写経なんですが、自分でも書いてみました。 [ソース] set updatetime=100 augroup vimproc-async-receive-test augroup END " コマンド終了時に呼ばれる関数 function! s:finish(result) echom "finish" echo a:result endfunction func…
『C++Now! 読書会』改め C++オンライン読書会のページを boostjp につくりました。 vimrc読書会のページとレイアウトが似ていますが全くの偶然です。 C++オンライン読書会 - boostjp 名前を変更したのは C++Now! 以外にも読みたいというリクエストが多かった…
どうみてもぼっちです本当にry。 ※あとから人が増えました。 最初は1人で黙々と読んでいました。 Boost.Asio わからないマン。 [読んだ資料] 非同期について考える : Boost.Asioを使用したアプリケーション設計 [ログ] http://lingr.com/room/reading_cpp_n…
巷で話題の TypeScript なんですがここの動画にあった、TypeScript がリアルタイムで JavaScript に変換されているのが面白くて、Vim でも同じようになってみました。 [必要な設定] set autoread set updatetime=50 let s:system = exists('g:loaded_vimproc…
元々 watchdogs.vim には g++ と clang++ の設定があったんですが、これらは -std=gnu++0x オプションが付いておらず、C++11 を使用する場合はユーザ側でオプションを追加する必要がありました。 しかし、今の世の中 C++ といえば、C++11 の事を指します。 …
C++ で Maybeモナドを書いてみたら意外と面白かったので覚書。 まぁこの手のネタはたくさんあると思いますが。 あんまり Haskell 力は高くないのでざっくりとした実装です。 [実装する主な機能] maybe nothing return bind(>>=) 今回はここら辺の機能を C++ …
覚書。 boost::optional<int> m = cond ? 42 : boost::none; みたいな感じで boost::none を含めた条件演算子を書きたいんですが、これでは型が違ってしまい、エラーになってしまいます。 と、いうことでこれを回避する場合 boost::make_optional でラップします</int>…