VimM #2 に行ってきました。神の歩く姿を拝み、肉声を生で聴くことのできる貴重な機会でした。Vimコンサルはおっくせんまん。
Life Changing だったこと:
- readline でも vi モードがつかえる → irb でも vi キーバインディングが!
- set cursorline
- Vim script で非同期処理をやりたいときは、スレッドじゃなくてプロセスをつかうとよい
宴会では、Vimを主軸にしつつもみんな好き勝手な話題をしゃべりたくるという素晴しい場が提供されました。Vimはきっかけであり、多様な人をつなぐハブでありました。オフラインミーティングはたのしくて重要なのです。
次までにはCVANをつくっておきたいところですね。
Rubyリファレンスマニュアル刷新計画ですすめられている新リファレンスシステムを、Vimから引けるようにしてみました。
ダウンロード
コード
つかいかた
Rubyのファイルを編集中に、単語の上で K を押すと該当するリファレンスマニュアルのページに飛びます。
必要なもの
- Rubyリファレンスマニュアル → るりまWiki から
--enable-rubyinterp つきでコンパイルされたVim
準備
0: refe2.vimの一式をcheckout。
1: ダウンロードしたRubyリファレンスマニュアルにパッチをあてます。
% cd ruby-refm-1.9.0-dynamic
% patch -p0 < /tmp/refe2-vim/bitclust.patch
2: refe2.vim の中の s:bitclust_path に bitclustのパスを指定します。
3: refe2.vim を ~/.vim/ftplugin/ruby あたりにコピー。
ToDo
- 色付け
- 文脈に沿ったリファレンスの表示。 たとえば、
というコードがあったときに、 arr.first で検索してもちゃんと Array#first にひっかかるようにしたい。
Vimスクリプトの中のRubyインタプリタで周辺をevalしたらできたりしないだろうか。
その他
今回はじめてVim (+Ruby) スクリプトを書いてみました。
てんで荒削りな実装なので、コードの添削、書き換え、forkなど、どしどしやってもらえると幸せです。
最近コードを貼り付けることが多くなってきました。
単にpreタグでコピーしてただけなので、とてもみづらかったのです。
なんとかしようと思い、ふとVimには2htmlなんてプラグインがあったなぁと思い、探してみたら 名無しのVIM使い::2html.vim なんていう記事があり、ふむふむと。
このblogはTypo on Railsなので、Rubyから2html.vimを使いたいなぁと思い、再び探してみると、Code Snippets::Using VIM as a syntax highlighting engine from Ruby なんてものがあり、うまく使えないかなといろいろやってみました。
Code Snippetsのものをそのままコピペして実行してみたところ、作成したTempfileを開くところでpermission deniedになってしまいました。#{expr}でevalしているところで刺さっているようです。
んー、といろいろやってみたところ、system()にしてみたらうまくいきました。
コード
1 require 'tempfile'
2
3 def vimsyn(text, filetype)
4 synfile = Tempfile.new('synfile')
5 synfile.close
6
7 codefile = Tempfile.new('codefile')
8 codefile << text
9 codefile.close
10
11
12 vim = '/usr/bin/vim'
13
14 system(vim, '-f', '-n', '-X', '-e', '-s',
15 "-c", "set filetype=#{filetype}",
16 "-c", "syntax on",
17 "-c", "set background=dark",
18 "-c", "let html_use_css=1",
19 "-c", "let html_number_lines=1",
20 "-c", "run syntax/2html.vim",
21 "-c", "wq! #{synfile.path}",
22 "-c", "q",
23 "#{codefile.path}"
24 )
25 html = IO.readlines(synfile.path).join
26 body = html.match(/<body.*</body>/m)[0]
27 css = html.match(/<style.*</style>/m)[0]
28 css.gsub!(/pre/,'pre.code')
29 css.gsub!(/^body.*$/,'')
30 body.gsub!(/^<body/,'<div')
31 body.gsub!(/</body>/,'<div>')
32 body.gsub!(/<pre>/,'<pre class=code>')
33 return css+body
34 end
systemに渡す引数がえらいことになっています。ugly hackだなぁ。
あとはうまくまとめてRailsのプラグインにでも仕立てあげたいところです。
これでblogにコードを載せやすくなりました。
オリジナルの作者さんに感謝です。
Published on
April 17, 2006 in
default.
Tags: vim.
vim-mac MLでVim7の話題がしきりに流れてくるので、試しにうちのPB12に入れてみた。
デフォルトでCarbon GUIがちゃんとビルドできることに軽く驚きを感じつつ、OmniCompletionでいろいろ遊んでいる。
MacOSXで独自ビルドしたVim.app (vim6.4ベース、香り屋パッチ適用済み、CMigemo付き) で、アンチエイリアスをオフにできなくて困っていた。PowerBook 12inch 初代期なので、動作がとろいし画面が狭くて快適にハッキングできなかった。
ちょっと昔のGVim 6.2@香り屋とかだと、set anti / set noantiとかで切り替えられていたのだけど、Vim6.4では香り屋ビルドが存在しない。
ぐぐっていたら、香り屋さんのBBSで、ちょうどその件が上がっていた
2051.MacOSXとフォント描画の不思議
まずアンチエイリアスを強制的に切るにはSetAntiAliasedTextEnabled(false, 1)をすれば良いことがわかりました。
src/gui_mac.cの該当箇所にこの対応を入れて再ビルドしたところ、うまいことアンチエイリアスが切れた。ハッピー。
Osakaー等幅:h14で快適にGVimが使えるようになりました。
我ながらニッチだ。