October 10, 2006
vim6 対応版 ShebangExecute()
久々に、実はあんまり使いこなしていない vim ネタ。
少し前のネタなんですが、
vimグループ - [script]shebangでファイルを実行する関数
subtechグループ - ピンク ブロッサム ダイアリー - ShebangExecute
まだ vim7 を使ってないし、正直なところ、あんまり vim7 を使うモチベーションもなく、(メリットがまだよくわかっていない。だるい。時間がもったいない) ずっと vim6 を使っていたんですが、どうしてもこの
こんなんしといて、あとは同様に
つか vim script よくわからない。
それ以上に 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 で使える正規表現がよくわからない。。