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

Vim script で Maybeモナド

やってみた。 動作するためには reti.vim と chained.vim が必要です。 こういうのをやっていると reti.vim が必須になってきますねぇ。 [ソース] let s:just = 1 let s:nothing = { "tag" : !s:just } function! s:nothing.bind(func) return self endfunct…

Vim script で現在の関数名を取得する

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…

C++ のラムダ式で [=] した場合、使用されなければコピーされない

C++

ラムダ式のキャプチャで [=] を使用すると全てのローカル変数をコピーしてキャプチャ出来るんですが、ラムダ内で使用されなかった変数はコピーされません。 [ソース] #include <iostream> struct X{ X(){ std::cout << "X::X()" << std::endl; } X(X const&){ std::cou</iostream>…

quickrun.vim の hook に同オプションを複数渡すと…

vim

ちとはまったので覚書。 まぁ普通はしないと思うんですが。 :QuickRun -hook/test/value homu -hook/test/value mami -hook/test/value mado のように同じオプションを複数渡すと hook 側ではリストで受け取ります。 [ソース] " quickrun-test {{{ let s:hoo…

C++ のラムダ式でキャプチャした値を変更する

C++

C++ のラムダ式で変数をコピーしてキャプチャした場合、その変数の値を変更する事ができません。 int n = 10; [n](){ // error n = 42; }; どうしても変更したい場合は mutable を付けることで変更することが出来るようになります。 [ソース] #include <iostream> int </iostream>…

Vim script で関数の引数を不変にする

vim

Vim script の関数の引数は基本的に読み取り専用なんですが、次のように思わぬところで辞書を書き換えてしまうようなケースがあります。 function! s:func(dict) " 呼び出し元の dict まで書き換えられてしまう call filter(a:dict, "len(v:val) < 4") endfu…

neobundle.vim でディレクトリを指定する

vim

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

元々 Vim script でスレッド処理が行いたかったのですが、残念ながらどうあがいてもそれは無理なので 『それならばコルーチンを使って細かく処理を分ければいいのでは?』 といったことが事がきっかけ。 まぁコルーチン自体は使ったことがないんですが。 で…

Vim script の is 演算子

vim

はじめて見たんですが、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 に変更されました

vim

neocomplcache-snippets-complete は neosnippet になりました - あるVimmerのブログ という事なので使用している方は注意して下さい。 設定もこんな感じで変更しました。 [before] "スニペットのディレクトリ if !exists("g:neocomplcache_snippets_dir") l…

Vim script のカーソル下の関数を評価する

vim

Vim script のテストコードとか書いている時にいちいち call で呼び出すのも手間だなーって事でいい感じに呼べるようにマッピングしてみました。 必要なものは下記の Vim script です。 current-func-info.vim - github スクリプトローカルな関数を手軽に呼…

LLVM 3.2 は 12月16日にリリース予定

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 で無名関数を扱うプラグインをつくった

vim

気がついたら結構本格的になってしまっていたのでいっそのことプラグイン化してようかと。 まぁ使い道があるのかわからないけども。 だいたいやりたいことはできた。 ちなみにプラグイン名はでちまるさんに考えてもらいました。 [プラグイン] vim-reti - git…

chained.vim つくった

vim

相変わらずプラグイン名から機能がわからないんですが、先日つくったこれをちょっと書きなおしてプラグインにしてみました。 vim-chained - github スクリプトローカル関数で SID を取得したり関数のコールスタックを取得できます。 まぁ一般ユーザにはあま…

neocomplcache で明示的に初期化を行う

vim

少し前に neocomplcache に遅延初期化機能が実装されました。 これは、Vim の起動時に初期化を行うのではなくて、最初のキー入力時に neocomplcache の初期化を行うというものです。 これで Vim の起動時間が短縮されます。 ただ、わたしの場合『Vim でキー…

Vim で関数の呼び出し元のスクリプト番号を取得する

vim

最近教えてもらった黒魔術を覚書。 と、いうかだいぶ改造したので原型があまり残っていない(基本的なロジックはそのままだけど。 簡単に説明すると g:SID() をつくりました。 とりあえず、こんな感じで使えます。 [使い方] function! s:main() " 呼び出し元…

Vim のタブページを前後に移動するマッピング

vim

欲しかったので書いてみました。 [ソース] " タブページの移動 command! -bar TabMoveNext :execute "tabmove" tabpagenr() % tabpagenr("$") command! -bar TabMovePrev :execute "tabmove" (tabpagenr("$") + tabpagenr() - 2) % tabpagenr("$") " マッピ…

unite-file で .exe や .dll も列挙する

vim

さて、unite-file では .exe ファイルの列挙が行われないのですが、個人的に存在しているファイルが列挙されないのは気持ちが悪いのでユーザ側で列挙されるように設定します。 [ソース] " unite-file の ignore_pattern を設定する call unite#custom_source…

Boost.読書会やります!!

また読書会かよ!!って感じではあるんですが、lingr でノリノリに雑談していたらいつの間にか Boost.読書会をやる事になりました。 な、何をいっているのかry。 こっちは C++オンライン読書会と違って結構真面目です。 例によってオンラインの読書会になり…

C++1y で非型テンプレートパラメータへの提案

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 の import と関数呼び出しを簡略化してみた

vim

さて、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…

Vim で簡単に非同期処理を行うラッパを書いた

vim

バックエンドに vimproc を使用して、Vim script で簡単に外部コマンドの非同期処理が行えるようなラッパを書いてみました。 これで比較的簡単に非同期処理を行うことが出来ると思います。 例によって updatetime に依存しているので、その値が大きいと時間…

vimproc を使用して非同期で外部コマンドを実行し、後から結果を取得する

vim

殆ど quickrun.vim の写経なんですが、自分でも書いてみました。 [ソース] set updatetime=100 augroup vimproc-async-receive-test augroup END " コマンド終了時に呼ばれる関数 function! s:finish(result) echom "finish" echo a:result endfunction func…

C++オンライン読書会のまとめページを作成した

『C++Now! 読書会』改め C++オンライン読書会のページを boostjp につくりました。 vimrc読書会のページとレイアウトが似ていますが全くの偶然です。 C++オンライン読書会 - boostjp 名前を変更したのは C++Now! 以外にも読みたいというリクエストが多かった…

第4回 C++Now! 読書会

どうみてもぼっちです本当にry。 ※あとから人が増えました。 最初は1人で黙々と読んでいました。 Boost.Asio わからないマン。 [読んだ資料] 非同期について考える : Boost.Asioを使用したアプリケーション設計 [ログ] http://lingr.com/room/reading_cpp_n…

Vim 上で TypeScript から JavaScript へのリアルタイム変換

巷で話題の TypeScript なんですがここの動画にあった、TypeScript がリアルタイムで JavaScript に変換されているのが面白くて、Vim でも同じようになってみました。 [必要な設定] set autoread set updatetime=50 let s:system = exists('g:loaded_vimproc…

watchdogs.vim に g++03 と clang++03 を追加した

元々 watchdogs.vim には g++ と clang++ の設定があったんですが、これらは -std=gnu++0x オプションが付いておらず、C++11 を使用する場合はユーザ側でオプションを追加する必要がありました。 しかし、今の世の中 C++ といえば、C++11 の事を指します。 …

C++ で Maybeモナドを書いてみた

C++

C++ で Maybeモナドを書いてみたら意外と面白かったので覚書。 まぁこの手のネタはたくさんあると思いますが。 あんまり Haskell 力は高くないのでざっくりとした実装です。 [実装する主な機能] maybe nothing return bind(>>=) 今回はここら辺の機能を C++ …

条件演算子で Boost.Optional を返す

覚書。 boost::optional<int> m = cond ? 42 : boost::none; みたいな感じで boost::none を含めた条件演算子を書きたいんですが、これでは型が違ってしまい、エラーになってしまいます。 と、いうことでこれを回避する場合 boost::make_optional でラップします</int>…