トップ «前の日記(2005-10-13) 最新 次の日記(2005-10-16)» 編集

3 日坊主日記


2005-10-14 [長年日記]

_ [vim][Ruby] RRB Vim interface

お返事ありがとうございます

とりあえず現状をご報告。インストールしてから行った手順を書きます。

RRB が読んでしまってこけるので、samples の余計なのを削除します。

 C:\arc\rrb-0.1\samples>del *_after*

これらはリファクタリング後の結果でしょうか。 とすれば samples/ でないとこに置くか、拡張子を .rb から変えるかしたほうがいいのでは。

 C:\arc\rrb-0.1\samples>vim rename_var_sample.rb +6

6 行目の z = 3 の z にカーソルを置いて

 :RRBRenameVariable v

すると

 cursor should be in method

と出力されます。 これは RRB が飛ばしているエラーですね。

ということで Ruby は呼べていると思います。

追記: ここ で解決済み。

_ [vim] matchit

% で対応する end にジャンプする。

ええと、KaoriYa版だと macros/ に matchit.vim, matchit.txt がある。これでもう使えるのかなと思ったけど

 :h g%

は出ないしやっぱりインストールするんだろう。

インストールの仕方は例えば vim-ruby の ftplugin/ruby.vim の最後に書いてある。つまり

  • matchit.txt を doc/ に copy.
  • matchit.vim を plugin/ に copy.

んで

 :helptags ~\vimfiles\doc

でヘルプを作り直す。

これで再起動。

def や if で % を押すと対応する end に飛べる。

そうそう。

 :set filetype?
 filetype=ruby

を確認しておくべき。

_ [vim] ruby なら sw=2

filetype が ruby のとき shiftwidth=2 にするなら

  • vimfiles\ftplugin\ruby.vim
 set shiftwidth=2

としておく。

_ [vim] かっこ・引用符の組を1ストロークで挿入

後者の

 breadman at byu.edu, July 31, 2003 16:07

にあるものをそのままぱくる。

 inoremap ( ()<ESC>i
 inoremap [ []<ESC>i
 " inoremap { {<CR>}<ESC>O
 inoremap { {}<ESC>i
 autocmd Syntax html,vim inoremap < <lt>><ESC>i| inoremap > <c-r>=ClosePair('>')<CR>
 inoremap ) <c-r>=ClosePair(')')<CR>
 inoremap ] <c-r>=ClosePair(']')<CR>
 " inoremap } <c-r>=CloseBracket()<CR>
 inoremap } <c-r>=ClosePair('}')<CR>
 inoremap " <c-r>=QuoteDelim('"')<CR>
 inoremap ' <c-r>=QuoteDelim("'")<CR>

 function ClosePair(char)
   if getline('.')[col('.') - 1] == a:char
     return "\<Right>"
   else
     return a:char
   endif
 endf

 function CloseBracket()
   if match(getline(line('.') + 1), '\s*}') < 0
     return "\<CR>}"
   else
     return "\<ESC>j0f}a"
   endif
 endf

 function QuoteDelim(char)
   let line = getline('.')
   let col = col('.')
   if line[col - 2] == "\\"
     "Inserting a quoted quotation mark into the string
     return a:char
   elseif line[col - 1] == a:char
     "Escaping out of the string
     return "\<Right>"
   else
     "Starting a string
     return a:char.a:char."\<ESC>i"
   endif
 endf

CloseBracket() は使っていないけど載せておく。

_ [vim] end を補完

ここに載っているものだと

     let ind .= ' '
     let i += 1

になってるけど KaoriYa版だと文法エラーになる。何か足りないのかなあ。

 inoremap <buffer> <CR> <C-O>:call <SID>CompleteStatement()<CR><CR>

 function! s:CompleteStatement()
   " TODO: we can check contents of ". register to make sure that they were
   " inserted while typing here...
   if getline('.') =~ '^\s*\%(begin\|case\|class\|def\|for\|if\|module\|unless\|until\|while\)\>\|do\%(\s*|[^|]*|\s*\)\=$'
     let n = indent('.')
     let ind = ''
     let i = 0
     while i < n
       let ind = ind . ' '
       let i = i + 1
     endwhile
     call append(line('.'), ind . 'end')
   endif
 endfunction

これだと

 class Error < Exception; end

の後でも

 end

が入っちゃうねー

ノーマルモードの o にも効いてほしいな。

 nnoremap o :call <SID>CompleteStatement()<CR>o

こうかな。

_ [vim][Ruby] RRB Vim interface (2)

できた。

 def foo
   x=1
 end

の x にカーソルを置いて

 :RRBRenameVariable v

とすると

 def foo
   v=1
 end
 Rename x in #foo to v

となる。

_ [Ruby] KOF2005 10月29日 時間割

準備せずにRastを最後まで見てたら怒られるかなあと思ったら同じ会議室だった。^^;

_ [vim][Ruby] mingw で作った rrb_ripper.so を mswin に置くと isascii が足りない

  • ruby 1.8.3 (2005-09-21) [i386-mingw32]
  • ruby 1.8.3 (2005-05-12) [i386-mswin32]

objdump で見ると mingw32 は isascii を export しているのに mswin32 はしていない。 どっちに合わせるべきなのかはわからないが、うささんの配布はいじれないので mingw32 のほうをいじる。

  • ruby-1.8.3/Makefile
 - DLDFLAGS =  -Wl,--enable-auto-import,--export-all -Wl,--out-implib=$(LIBRUBY) $(EXTLDFLAGS)
 + DLDFLAGS =  -Wl,--enable-auto-import,--export-all,--exclude-symbols,isascii -Wl,--out-implib=$(LIBRUBY) $(EXTLDFLAGS)

これで msvcrt-ruby18.dll を作り直して rrb を作り直すとうまくいった。

_ [vim][Ruby] RRB Vim interface (3)

作り直し。

_ [vim][Ruby] rrb-dev

rrb-dev ML に参加。 あとこれまで RubyForge のアカウントを作ってなかったのでこの機会に作ってみた。

[]