vim6 対応版 ShebangExecute() - にぽたん研究所

October 10, 2006

このエントリーをはてなブックマークに追加
久々に、実はあんまり使いこなしていない vim ネタ。
少し前のネタなんですが、

vimグループ - [script]shebangでファイルを実行する関数
shebang ( ファイル先頭の #!/bin/sh とか )でカレントバッファのファイルを実行する関数。
ここで紹介されている ShebangExecute() が、便利そうだなぁって思ってたんですが、この vim script を書いた id:secondlife が、

subtechグループ - ピンク ブロッサム ダイアリー - ShebangExecute
下方互換性は考慮してないのでたぶんvim7以降じゃないと動きません。
と書いていて、確かに試してみると、どうも matchlist() が vim7 以降のものっぽくちゃんと動かない。
まだ vim7 を使ってないし、正直なところ、あんまり vim7 を使うモチベーションもなく、(メリットがまだよくわかっていない。だるい。時間がもったいない) ずっと vim6 を使っていたんですが、どうしてもこの ShebangExecute() を vim6 でも使いたかったので、vim6 でも動く ShebangExecute() を書いてみました。

function! ShebangExecute ()
    let line = getline(1)
    let interp = substitute(line, '#!\s*\(\S\+\).*$', '\1', '')
    if (strlen(interp) >= 1)
        execute '!' . interp . ' %'
    else
        execute '!' &ft ' %'
    endif
endfunction
まぁ、ただ substitute() で置換して無理矢理インタープリタのパスだけを取ってるだけです。
こんなんしといて、あとは同様に
nmap ,e :call ShebangExecute()<CR>
とかキーバインドしておけば、とりあえず vim6 でも同じことが出来ると思います。

つか vim script よくわからない。
それ以上に vim で使える正規表現がよくわからない。。

nipotan at 20:47 | Comments(0) | TrackBack(0) | 技術 
このエントリーをはてなブックマークに追加

Trackback URL for this entry

Post a comment

Name:
URL:
  Remember info?: Rate: Face    Star