2008年10月1日水曜日

範囲選択文字列を検索

Vim で、ビジュアルモード時に * と # を押したら、選択されている文字列を検索させます。

let s:RangeAsterisk__reg = ''
function! s:RangeAsterisk__keepReg()
let s:RangeAsterisk__reg = @*
endfunction
function! s:RangeAsterisk__restoreReg()
let @* = s:RangeAsterisk__reg
endfunction
vnoremap * :call RangeAsterisk__keepReg()gv"*y/*:call RangeAsterisk__restoreReg()
vnoremap # :call RangeAsterisk__keepReg()gv"*y?*:call RangeAsterisk__restoreReg()

通常、* と # は (ビジュアルモード中であっても) カーソル直下の単語を検索しますが、これはあまり直感的とは言えません。
いちいちコピーしてから / で (貼り付けして) 検索するのも煩わしいものです。


現在 vimrc は 325 行...
もうちょっと外に追い出したいなぁ。

2008年9月15日月曜日

Vim での括弧自動補完 AutoClose

とかなんとかやっていたら、AutoClose というプラグインがあるのを発見しました。
あらまあ素敵。

ちなみに、同名のプラグインが 2 つあるようです。
僕は更新のされている方 (script_id=2009) を使ってます。
もう一つの方 (script_id=1849) との比較はやってません。

2008年7月27日日曜日

Vim での括弧自動補完 :abbreviate

自動補完の話題の続きですが、Vim には :abbreviate というコマンドがあるんですね。
例えば、
:abbreviate ms Microsoft
として、abbreviation を登録するとします。
そうすると、ms<なんか> と入力した場合に ms の部分を Microsoft に変換してくれるのだそうです。

<なんか>の部分は、<Space>, <Tab>, <Enter>, <Esc> などが該当するようです。


で、これを使って括弧の自動補完ができないのかなと思ったんですが、<なんか>まで入力しないと補完されないということに気づきました。
<なんか> として入力された文字を潰さないといけないんですが、<Space> なら潰す必要があるけど、<Esc> なら潰さないという処理が必要なわけです。

というか、そもそも abbreviation はそういうふうに使うもんじゃねーよ、という話です。

2008年7月16日水曜日

Vim での括弧自動補完

ここでの内容を基に、自分なりにカスタマイズしてみる。
" 括弧と引用符の補完
inoremap  (   ()
inoremap  ()  ()
inoremap  <   <>
inoremap  <>  <>
inoremap  [   []
inoremap  []  []
inoremap  {   {}
inoremap  {}  {}
inoremap  "   ""
inoremap  ""  ""
inoremap  '   ''
inoremap  ''  ''
問題点:
  1. It's のようなアポストロフィには未対応
    It's'  となってしまう
  2. 先に閉じ括弧を入力していた場合にも未対応
    ()) ← こうなる
    まぁ、これはどうでもいいや
  3. 引用符をコメント開始の記号にしているファイルタイプには未対応
    vim とか、vb とか
    特に、vim なんて二重引用符がコメントにも文字列リテラルにもなるし…
一番の問題は 1 なんだけど、これを解決しようとするとなると、やっぱりスクリプトを書かないといけない気がする。面倒。

1 のケースでは、カーソル位置が
It's|'
に来るのだから単純に <Del> を一回押してよ、と思うし。これもどうでも良いや。

2008年7月12日土曜日

Vimpi

面白そうなサービスです。
vim.org に登録されているスクリプトをまとめて、新着順、注目度順に並べてくれます。

自分がウォッチしたいスクリプトを登録すると、それらをまとめた GLVS ファイルを作ってくれるので、インストールもすごく楽になります。

素晴しい。