caw.vim 用のオペレータマッピング

Vim

コメントアウト用のオペレータマッピングが欲しかったので,caw.vim から tcomment_vim に乗り換えようと思ったけれど,tcomment_vim が色々いまいちだったので結局 caw.vim に戻ってオペレータマッピングは自前で定義することにした. https://github.com/r…

neocomplcache から neocomplete.vim へ乗り換える

Vim

現在 neocomplcache は開発が neocomplete.vim へと移っており,保守のみが行われている状態です.しかし,neocomplcache は結構細かく設定していたりして移行に手間取りそうで二の足を踏んでいる人も多いのではないでしょうか.僕もそうだったのですが,今…

C++ のソースコードの中に犬の顔文字が現れうることに気づいた

C++

int main() { (U'ω'); return 0; } このコードを g++ でコンパイルすると,件の行で statement has no effect と警告が出る.けれど実際は,プログラマを癒やす効果があるのでこの警告はコンパイラのバグだと思う.バグ報告したい.

Travis CI で Vim プラグインのテストを自動化する

最近 Vim 界でも続々とテストフレームワークプラグインが出てきており,自分もぼちぼち kana さん作の vim-vspec でテストを書いたりしている. 最近,Travis CI で C++ なリポジトリのテストを自動化した ので,ついでに Vim プラグインのほうも自動化して…

Travis CI で最新の gcc を使って自動テスト

Travis CI にある gcc は現在 4.6 で,普通に使う分には申し分ないけれど,最新の C++ の機能を使っている場合,最新の gcc や clang でテストを実行する必要がある場合がある. Travis CI の VM は Ubuntu らしく,最新の gcc を利用したければ自分で apt …

Homebrew で最新の libc++ と clang をビルドする

追記(9/23) homebrew-versions に llvm34 というフォーミュラが入っているので,公式に最新の LLVM を入れるには,このフォーミュラを使ったほうが良い.このフォーミュラを使うと,インストールはサンドボックスの中に行われ,システムの clang と衝突しな…

続・文字型の可変長パラメータ引数を使ってコンパイル時に文字列を生成する

C++

char 型の可変長パラメータ引数を使ってコンパイル時に文字列を生成する の続き. まず,ワイド文字を全く考えていなかったので,std::basic_string のように文字型をテンプレートにしてみた. template< class CharT, CharT... Chars > struct basic_string…

テンプレートの部分特殊化の引数リストにかかる制約

C++

昨日文字列を表す型を書いていて,このコードがエラーになるのが引っかかった. template<class T, T... CS> struct S{}; template<int I, class T> struct X1; template<class T, T C, T... CS> struct X1<0, S<T, C, CS...>>{}; template<class T, int I, T... CS> struct X1<I, S<T, CS...>>{}; template<int I, class T> struct X2; template</int></i,></class></t,></class></int></class>

char 型の可変長パラメータ引数を使ってコンパイル時に文字列を生成する

C++

C++11 から可変長のテンプレート引数を取ることが出来るようになったので, template< char... Chars > struct string {}; というクラステンプレートをつくって文字列を可変長パラメータパックに突っ込むことを考えてみた. 例えば,"moudameda" という文字…

Mac で最新の安定版 Vim (7.3.969)をインストールする

この記事の内容は deprecated です. 現在,Vim はパッチレベル 969 までが安定版,それ以降を開発版として開発が進められています. Mac で最新の開発版のパッチを適用した MacVim を使用したければ,Homebrew で macvim の HEAD を入れると簡単です. $ br…

non-static data member initializer と初期化子リストの優先度

C++

C++11 からデータメンバ宣言場所で非静的メンバの初期化が出来るようになりましたが,この初期化は初期化子リストによる初期化が省略されたときのみ行われます. #include <iostream> struct X{ int const i = 42; X(){} // 初期化子リスト無し X(char) : i(-42){} // </iostream>…

一時ウィンドウを手軽に出し入れできる tmpwin.vim を作った

Vim

この記事は Vim アドベントカレンダー 183 日目の記事です. 早いもので,始まってからもう半年になりますね. ちなみに昨日の記事は manga-osyo さんの Vim Advent Calendar 2012 中間発表 でした. 本記事では,一時ウィンドウを簡単に開いたり閉じたりで…

TokyoVim #14 に参加して git-messenger.vim を作ってみた

もう一週間も前ですが,TokyoVim #14 に参加して来ました. この4月に東京に来てからこういうコミュニティは初参加です. 最近 Vim script を書いていなかったので,とりあえず何か書きたいと思って,git-messenger.vimというプラグインを書きました. git-m…

unlet でリストの要素を削除できる

Vim

unlet は変数の定義を削除するだけでなく,配列の要素の削除に使えると知ったのでメモ. 具体的には次のように使える let a = [1, 2, 3, 4, 5] unlet a[2] echo a " => [1, 2, 4, 5] let b = [1, 2, 3, 4, 5] unlet b[2:-2] echo b " => [1, 2, 5] まだまだ …

type_traits と tuple を使ってコンパイル時 FizzBuzz

C++

#include <iostream> #include <type_traits> #include <tuple> struct fizz{ static char const value[ ]; }; char const fizz::value[ ] = "fizz"; struct buzz{ static char const value[ ]; }; char const buzz::value[ ] = "buzz"; struct fizzbuzz{ static char const value[ ]; }; c</tuple></type_traits></iostream>…

メモ化された手続きを簡単に記述できるモジュールを書いてみた

Hash でお手軽にメモ化 で書いた Hash を用いたメモ化が結構気に入ったので,メタプログラミングの練習がてら,もう少し簡単にわかりやすく書けるモジュールを作ってみた. こんな風に使える. # ブロックを与えて呼び出すと,Memo のスコープ内にブロックで…

「constexpr 長いねん」に対するエディタ的回答

autocmd FileType cpp \ inoremap <expr> e getline('.')[col('.')-6:col('.')-2] ==# 'const' ? 'expr ' : 'e' これで conste まで打つと自動で constexpr に展開されるので,const とほとんど同じ手間で constexpr と打てる!やった!</expr>

Hash でお手軽にメモ化

しつこく Hub を読む Hash#new に2引数のブロックを渡すと,存在しないキーにアクセスしようとするとそのブロックが呼ばれるようにできることは前から知っていたけれど,それをキャッシュに利用できるのは知らなかった. まず,Hash#new はこんな感じで使え…

今年作った Vim プラグイン

Vim

unite-ruby-require.vim Ruby の require のパスを絞り込み検索する unite.vim ソース. clever-f.vim f マッピングの拡張.; ではなく f だけで繰り返し移動できるようになる. inu-snippets neosnippet 用の自作スニペット. accelerated-jk j と k の移動…

「立て!立つんだビムー!」

vim

この記事は Vim アドベントカレンダー 2012 の 19 日目の記事です. 昨日はhrsh7th さんの vim-versions についての記事 でした. たくさんプラグインを入れたり設定を書いたりしていると Vim の立ち上がりはどんどん遅くなってしまいます. 一度 Vim を立ち…

Vim で Ruby を書くためのプラグイン3つ書いた

そういえば,Qiita の Ruby アドベントカレンダーで記事を書いた. Vim で Ruby を書くためのプラグイン3つ書いた

ベルヌーイ数を求める関数を少し高速化する

エイダの誕生日らしいのでベルヌーイ数を求めるプログラムを書いてみた 前回のエントリでベルヌーイ数を馬鹿正直に求めるプログラムを書いた.正しく動くけど,20番目あたりからかなり計算に時間がかかるようになってしまった.B(n+1) を求めるのに B(n) .. …

エイダの誕生日らしいのでベルヌーイ数を求めるプログラムを書いてみた

1843 年のコンピューター先見者エイダ ラブレスを讃えて 今日はエイダ・ラブレス の誕生日らしい.彼女は世界で初めてコンピュータプログラムを書いた人物で,プログラミング言語名などで有名だけど,その世界初のプログラムがベルヌーイ数を求めるプログラ…

修士論文提出まであと…

http://deadlinetimer.com/timer/46766

Ruby 2.0 のキーワード引数を補完する neocomplcache ソースを書いた

neco-ruby-keyword-args というプラグインを作りました. neco-ruby-keyword-args Ruby 2.0 では,引数を名前で指定するキーワード引数が追加されました. 今まではハッシュを引数にすることで擬似的に名前渡しを実現していましたが,もうそんなことをする必…

neosnippet のスニペットファイルを書く上での注意点

Vim

今日の勉強会の休み時間に ujihisa さんに教えてもらったので,忘れないうちにメモ. 以前,C 言語の main 関数のスニペットに main の引数 argc と argv が常に書いてあるのが気に入らなかった(引数を1度も使わないとコンパイル時に警告を食らう)ので,下…

Vim #11 に参加してきた

@ujihisa さんが主催する Vim 勉強会 #11 に参加してきました. neocomplcache について(@ujihisa さん) neocomplcache についての簡単な解説.インサートモードの = に補完候補を移動するキーを割り当てていたのが印象的でした. inoremap <expr>= pumvisible()</expr>…

pry-debugger と pry-nav の相性が悪い

pry-debugger と pry-nav の両方をインストールしていると pry:23: stack level too deep (SystemStackError)と出て pry コマンドが起動しなくなってしまった. 調べてみると pry-debugger と pry-nav の相性が悪いようで,pry-nav をアンインストールしたら…

vim-smartinput のスマートか分からない設定

Vim

vim-smartinput は @kana さん作の Vim プラグインで,賢い入力補助を行なってくれます. inoremap ( ()<Left> inoremap { {}<Left> とか設定している人には特にオススメです. 詳細については smartinput.txt を見ていただければ分かると思います. インストールするだ</left></left>…

OCaml 4.00.0 で omake 0.9.8.6_0.rc1 をビルドする

Arch Linux で omake が欲しい場合は AUR を使って yaourt -Su omake※すでに AUR のパッケージは修正されたので現在は以下を行う必要はありません.などとすれば良いですが,最新版の OCaml でビルドする場合大量の warning が出て,warning を error として…