2013/01/30


現在 Vim は以下の LL言語による拡張をサポートしています。
  • Lua
  • MzScheme
  • Perl5
  • Python2
  • Python3
  • Ruby1.8
  • Ruby1.9
  • TCL
最近 mruby 熱が高いので if_mruby を書いてみた。
vim7-if_mruby.diff
https://gist.github.com/4662845
基本的な動作は if_ruby に合わせてあります。Makefile は mingw32 用だけ手を加えています。mingw32 と VC++ と configure && make もサポートしてます。MRUBY_ROOT という環境変数に mruby のリポジトリルートを指す必要があります。
:mruby (1..100).to_a.each{|x| puts x}
こんな事も出来ますし、if_ruby 同様に :mruby VIM::Window::current.height = 3
こんな事も出来ます。
1点だけ移植出来なかった物があり、ruby には rb_define_virtual_variable という API があり、これを使うと変数の参照でC言語の関数が呼び出せるのですが、mruby にはこれ相当の物がありませんでした。
メソッド名に「$」を含ませる事も出来ないので、結局 $curwin$curbuf については __curwin__curbuf という名称に変更しています。

おおよそ動くのですが
if_mruby の可能性について - GitHub

Vim標準の外部インタフェースとして、if_rubyがありますが、素のRuby言語は言語組み込みを想定されていないためいろんな困難があります...

https://github.com/vim-jp/issues/issues/297
のコメントにも書いた通り、
ただし僕は現状vim-devに送るつもりはない。mrubyはダイナミックロード(require)をサポートしていないし、vimから使うmrubyに新しい機能が欲しくなったら
  • mruby に欲しい mrbgem を導入
  • libmruby.a をビルド
  • vim をビルド
を毎回しないといけない。
という問題があるので、すぐさま vim-dev にパッチを送るつもりは無いです。

Vim に if_mruby が入るかどうかは、require が入るかどうかに掛かっているんですよ!Matz さん!(チラッチラッ)
良かったら遊んで下さい。

追記
mruby-require がいい感じに出来上がってきたので、vim-dev に送るかもです。
Posted at by



2013/01/21


vim 使ってると良く CD-ROM を取り出したくなりますよね。
ならないとしたら、今すぐこの記事を読むのをやめて病院に行って下さい。
mattn/eject-vim - GitHub
https://github.com/mattn/eject-vim
インストールすると
:Eject というコマンドが追加されるので、実行するだけで CD-ROM トレイがゲロっと排出されます。
便利ですね!
皆さんもぜひ、使ってみて下さい。

(今日の参考文献: http://d.hatena.ne.jp/hasegawayosuke/20130112/p1)

なお、Windowsでしか動作しません。動作には libcallex-vim が必要です。
Posted at by



2013/01/11


TwitVim で「あーこの人のこの発言、バズってるんだろうな」と思った時に FavStar を見る事があるんだけど、FavStar は最新の fav/rt 一覧しか表示してなかったので過去の物を表示する事は出来なかった。僕的にニーズがあったのでツィート単位に表示出来る様にした。
もちろん、TwitVim は一切触らない。やり方は以下の記事を参照。
Big Sky :: 他人が作ったVimScriptを一切触らず拡張する

普段twitterするときはtwitvimというvimscriptを使ってvimからやってるのだけど、たいがいこういうのって自分の思う機能が実装されていなかったり、違う実装になっていたりする...

http://mattn.kaoriya.net/software/vim/20110728094347.htm
まず FavStar を修正した。
FavStar mattn_jp という風にスクリーン名しか受け付けていなかったけど FavStar mattn_jp XXXXXXX でツィートIDも受け取れる様にした。そして function! TwitVimShowFavStar()
  silentredir => json
  silent! TwitVimShowCurbuffer
  silentredir END
  let curbuffer = eval(substitute(json, "\n"'''g'))
  let id = get(curbuffer.statuses, line('.'))
  if id != 0
    let user = substitute(curbuffer.buffer[line('.')-1], ':.*''''')
    exe "FavStar" user id
  endif
endfunction
TwitVim からツィートIDを抜き取って FavStar コマンドに渡す。
あとはこれのキーアサイン nnoremap <buffer> <leader>F :call TwitVimShowFavStar()<cr>
キーアサインの入れ場所は上記の記事を見て下さい。
これで TwitVim を見てる最中に <leader>F をタイプすれば個別の fav/rt が見れる様になりました。
めでたしめでたし。
Yes, 高洲クリニック
Posted at by