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 として…

unite-n3337 を作った

N3337 という,C++ の現行規格にもっとも近いドラフトがあり,今まで規格について調べたいときは N3337 の PDF ファイルを開いていました. しかし,いちいち開いて検索ワードを打ち込んで検索結果を1つずつ辿って…という作業が面倒だったので,unite.vim で…

Vim で PDF ファイルを読む

Vim

優秀な PDF リーダーは多数あるため基本的にはそちらで読みますが,PDF からテキストをコピーしてくる場合や,ちょっと確認する程度で良い場合はわざわざ PDF リーダーを開くのは億劫ですし,無駄な作業も増えます.そこで,PDF を読むコマンドを作ってみま…

neobundle.vim の遅延読み込みを使って gVim でしか使わないプラグインを定義する

Vim

僕は少しファイルを修正したりするときは zsh から CUI の Vim を,がっつり1つのディレクトリのソースを編集するときは gVim を使うようにしています.そして,プラグインの中には GUI のみでしか動作しないものや,gVim でしか使っていないプラグインも幾…

constexpr 関数を書きやすくする RETURN マクロ

C++

C++11 では関数の戻り値型を後置する構文が新たに入りました. auto plus(int a, int b) -> int { return a+b; } C++ の型はテンプレートが絡むと長くなりがちなので,今までは戻り値型だけで改行したりテンプレートのデフォルト引数を使って戻り値型を定義…

Effective C++ 読書会 Vol.1 に行ってきた

C++

C++ の名著,Effective C++ の読書会パート1に行ってきました. 具体的には,Effective C++ の各項に沿って怖い人達が熱く語る感じの内容でした. 3項までしか進まなかったんですが,2時間ほどかなり濃い内容で楽しめました.id:uskz さんと id:Cryolite さ…

QuickRun から unite-qf へ出力する outputter を書いた.

Vim

ソースは 404 · GitHub に置いています.インストールは他のプラグインと同様に NeoBundle 'rhysd/quickrun-unite-qf-outputter' とするのが簡単です.QuickRun と unite-qf はこちら. thinca/vim-quickrun · GitHub sgur/unite-qf · GitHubunite-qf は qui…

ヒアドキュメントを便利にする String#undent メソッド

元ネタは Homebrew の String#undent メソッドです. ここで紹介するものはそれを少し賢くしています. class String def undent min_space_num = self.split("\n").delete_if{|s| s=~ /^\s*$/ }.map{|s| s[/^\s+/].length }.min gsub(/^[ \t]{,#{min_space_…

GHCi を少しだけカラフルにする ghci-color を書いた

ghci-color 書いたといっても,ただ sed で色つき文字列に置き換えているだけなので色々お粗末です. 一応こんな感じ.

VimFiler で Git のルートディレクトリを一発で開く

Vim

カレントディレクトリが Git リポジトリ内にある場合,そのリポジトリのルートを VimFiler で開くコマンドを fg に割り当てます. .vimrc に次のように書けば OK です. function! s:git_root_dir() if(system('git rev-parse --is-inside-work-tree') == "t…

ちょっと編集したいとき と ガッツリ編集したい時 で読み込む設定ファイルを変える

Vim

Vim の使い方は実に人様々です.「プラグインは1つも入れず,設定だけ変える」派から「100以上プラグインを入れてガチガチに固める」派まで居ます. これはちょっと極端な例ですが,そこまででなくても「プラグインが便利なのは分かるけれど,基本的にシェル…

mikutter の 正規表現フィルタリングプラグインを書いた

ダウンロードはこちらから.regex_filterインストールは $HOME/.mikutter/plugin に regex_filter.rb を放り込むだけです.設定画面に新しいタブが追加されます.最近は Arch Linux で mikutter を使って Twitter を閲覧しているのですが,フィルタ機能が弱…

rbenv は起動が遅い?

僕の環境では zsh の precmd() に Ruby のスクリプトをフックしているので,コマンド入力ごとに Ruby のスクリプトが走るのですが,rbenv に変えた時に precmd() でもたつくような気がしたので,少し測ってみました. rbenv の ruby を使った場合 % time $HO…

Proc に2項演算子を定義してみた

class Proc %w[ + - * / ** % | & ^ > < >= <= == <=> >> << =~ != !~ ].map{|i| i.to_sym }.each do |op| define_method(op) do |rhs| apply_binary(rhs,&op) end end private def apply_binary rhs raise "block is needed" unless block_given? Proc.new{…

Proc#=== の使い道

Proc オブジェクトの呼び出し方法はいくつかあります proc = Proc.new{|i,j| i*j} proc.call(2,3) #=> 6 proc.(2,3) #=> 6 proc[2,3] #=> 6 proc === [2,3] #=> 6 が,一番最後のはどこで使うんだろうと思っていたんですが,case when では === を用いて比較…

REXML で XML を解析し Hash に変換する

REXML は Ruby に標準でついてくる XMLパーサです.XML な文字列を食わせるとパースして REXML::Document として利用できます. しかし,REXML のドキュメントを見て扱いを知らなければならないので,Hash で取りたいこともあると思います.実際 ActiveSuppo…

プリプロセス時標準入力

C++

IOCCC のネタを漁っていたら面白いものがあったのでパクってみた. #include <iostream> int main() { char str[] = "" #include "/dev/tty" ""; std::cout << str << std::endl; return 0; } コンパイル時に "Hello, world!"^Dと入力(^Dは Ctrl+D)してコンパイルし</iostream>…

Awesome のショートカット一覧

Awesome は Linux のタイル型ウィンドウマネージャです. 最近また Awesome を使う機会が増えてきたので,思い出しがてらメモ. キーバインドや挙動,デスクトップウィジェット,はたまたライブ壁紙までカスタマイズ次第でなんでもできますが,とりあえずデ…

可変個数のコンテナに適用できる zipWith のようなもの

C++

std::transform では1つのコンテナに対して所謂 map の操作を行えたり,2つのコンテナに対して所謂 zipWith を行えます.今回は C++11 で新たに導入された Variadic Templates を使って,対象となるコンテナの数を任意個になるように拡張してみました. temp…

インクルードガード用の neocomplcache スニペット

neocomplcache のスニペットには Vim script の式を使って展開する機能があります. c.snip snippet include_guard alias inc_guard prev_word '^' abbr #if !defined HOGE #define HOGE #endif #if !defined `toupper( substitute( expand("%"), "\\.", "_"…

Vimmer 達の vimrc

Vim

有名な Vim 使いが github で公開している vimrc を簡単にまとめてみました. 一段落ついたら参考にして自分の vimrc を見直そうと思います. Shougo さん https://github.com/Shougo/shougo-s-github/blob/master/vim/.vimrc kana さん https://github.com/…