Vim で C++ を書くときの逆引きリファレンス

この記事は C++ AdventCalendar 2013 の 10 日目の記事です. 本記事では Vim で C++ を書いている人を対象として,逆引きで Vim の機能やプラグインについて紹介していきます. すべてについて細かく書いているとキリが無いので,基本的な使い方とプラグイ…

無数のパッチを組み合わせて君だけの MacVim を作ろう!

Vim

この記事は Vim Advent Calendar 2013 の 9 日目の記事です. 昨日は id:daisuzu さんの Fabricで最新のVimをバラまく でした.僕はサーバでの Vim で自前の環境使うのは諦めているので,すごいなぁと感心するばかりです. 先日開催された VimConf2013 にて…

VimConf 2013 で発表してきた

vim

クックパッドで開催された Vim Conference 2013 に参加してきた. 発表 How to suggest new features for Vim (香り屋さん) いかにして取り込まれやすいパッチを書くかという話だった.基本的に Vim の方針(Vim is a text editor)に反するものは取り込まれ…

コマンドオプションを解析するライブラリ Vital.OptionParser を書いた

Vim

この記事はVim AdventCalendar 2012の 343 日目の記事です. 昨日は cohama さんの Vim で Ruby の def end とかを自動入力する vim-endwise を vim-smartinput で実装してみた でした. そろそろ終わりが見えてきて,僕が投稿するのもこれが最後な気がしま…

Momonga.vim #2 に行ってきた

vim

title: Momonga.vim #2 date: 2013-10-16 21:02 tags: [vim, momongavim, 2] categories: [vim] 書き留め 昼食 thinca さん達と食べる予定をしていたのに遅延してきた特別快速を1つ前に来る快速と勘違いして乗ってしまいあえなく遅刻,1人で食べることに… 本…

Mac で HappyHackingKeyboard Pro 2 を使う

デスクトップ欲しいなぁと思っていたので先日 iMac を購入したけれど,ワイヤレスキーボードがイマイチだったので Happy Hacking Keyboard にすることにした. 打ちやすいし余計なキーとか無いので良いけれど,若干自分好みに設定しないといけなかったのでメ…

clever-f.vim でカーソルの横移動を便利にする

Vim

この記事はVim Advent Calendar 2012 291 日目の記事になります.徐々に気温も秋らしくなり,終わりが見えてきてますね. この記事では,Vim の f キーを拡張する clever-f.vim というプラグインを紹介します. 今まで tekkoc さんや thinca さんに紹介して…

tmux で一時的に pane を最大化する

Vim には,分割しているウィンドウのうちカーソルが居るカレントウィンドウを除いて他を閉じる :only というコマンドがあります.それを拡張して,一時的にカレントウィンドウを最大化し,最大化前に戻せる ZoomWin というプラグインがあり,愛用しています…

clever-f.vim が VimL の Weekly trending repositories on Github に入った

Vim

Vim の f キーを拡張するプラグイン,clever-f.vim が Github の Trending repositories(VimL) に入っていたので記念カキコ.挙動をカスタマイズできるようにしたり migemo 的な拡張を入れたりしてコミットが活発だったからだろうか. 追記(9/8): Monthly t…

C や C++ のコードを自動で整形する clang-format を Vim で

この記事は Vim Advent Calendar 269 日目の記事になります. きつねさんとおぼえる!Clang という本を読んでいて,clang 周りで色々役立ちそうなツールがあることを知ったので,その中でも C や C++ のソースコードを整形する clang-format というツールの …

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 を立ち…