2008/01/31


vimにはexplore.vimというスクリプト(現在はnetrw.vimに統合)が付属しており # vim /usr/include 等と実行すると、vimがファイラとして起動します。同様にコマンドラインから :e /usr/include と実行しても同じ結果になります。コマンド単体としてもExploreとして起動出来ます。
このExplore実は結構よく出来ていて、以前ご紹介した「男は黙ってvimでリモート編集」の応用として :e ftp://ftp.vim.org/pub/vim/
Enter username: anonymous
Enter Password: *********
でフォルダ閲覧出来ます。(*********はanonymous) " ============================================================================
" Netrw Directory Listing                                        (netrw v109)
"   ftp://ftp.vim.org/pub/vim/
"   Sorted by      name
"   Sort sequence: [\/]$,\.h$,\.c$,\.cpp$,\.[a-np-z]$,*,\.info$,\.swp$,\.o$\.obj
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec
" ============================================================================
../
./
MIRRORS
README
amiga
atari
be
beanie.gif
doc
extra
faq.html
farsi
green_ball.gif
index.html
ftp://ftp.vim.org/pub/vim/ [RO]                                       1,1     2%

また、Exploreではファイル名にカーソルを合わせて「x」をタイプすると拡張子に合わせてアプリケーションが起動します。
例えばWindowsでファイル名が「勤務表.xls」であればExcelが起動します。

この「x」で外部アプリケーションが起動する機能、現状はWindows、GNOME、KDEをサポートしています。
ちょっとソースを見たところ、netrw.vimには元となったexplore.vimに昔々に私が入れ込んだ「explFileHandler」が別名「netrwFileHandlers」として取り込まれてました。
ただ、「netrwFileHandlers」は私が元々想定していた単一のユーザ関数ではなく「netrwFileHandlers#Invoke」という関数でファイル種別毎に分別され、ファイル種別毎のスクリプト関数が実装されていました。
これをグローバルで宣言すれば自分独自の設定も出来るという仕組みです。 let g:netrw_browsex_viewer='-'
" エディタであるvimから秀丸起動して、何やってんだか...
function! NFH_txt(file)
    " netrwFileHandlers.vimの不具合回避?
    let f = substitute(a:file, '^\([A-Z]\)COLON', '\1:', '')

    exe "silent !start c:/progra~1/hidemaru/hidemaru.exe \"".f."\""
    return 1
endfunction

こんな感じのユーザ関数を作れば例えば.plや.shでperlやbashを起動したりする事も出来ます。
コード内にある「netrw_browsex_viewer」ですが、"-"に設定すると上記のようなユーザ/スクリプト関数を呼び出す機能として動作しますが、実行可能なコマンドを設定するとそのまま起動してくれるようにもなっています。
これを使用すれば、現状Windows、GNOME、KDEしかサポートしていないnetrw.vimでも、Mac OS Xに対応する事が出来ます。
私はMac OS Xを持っていないので確認出来ませんが、MacWiki - OSXの固有コマンドを見ると、Mac OS Xではコマンドラインからファイルを開く「open」コマンドがあるらしいので let g:netrw_browsex_viewer = 'open'
とvimrcに設定しておけば、Exploreから「x」をタイプする事でファイル種別に応じたアプリケーションが起動出来るかと思います。
※どなたか動作報告頂ければ、オフィシャルにマージして貰えるかもしれません。

その他、netrw.vimが使用するftp/sshのコマンドライン等の設定は :NetrwSettings
とすれば、設定画面が表示されますので、色々カスタマイズして見ると面白いかもしれませんね。

mattn the vim explorer
Posted at by




vimを使っていて開いているバッファ全てからあるキーワードを検索したい場合、「vimgrep」コマンドを使っています。開いているファイルの拡張子を指定して :vimgrep /sometext/ *.c *.h
と実行したり、実際開いているファイル名を羅列したりする事があります。検索結果の一覧もクイックフィックス「clist」で確認出来ます。
でもこれだと保存していないと結果に現れませんし、幾ら拡張子で絞っても余計なファイルがマッチしてしまう可能性があります。

今日のtipsはvim-dev MLに流れたスレッドからご紹介

「vimgrep」を実行するとクイックフィックスが作成されますが、このクイックフィックスに検索結果を追加する「vimgrepadd」というコマンドがあります。
これを全てのバッファに対して実行するように「bufdo」コマンドを絡めます。
:bufdo vimgrepadd /sometext/ %
なるほどね...

ちなみにスレッドの中で「クイックフィックスをクリアするには単にcexpr ""でいける」とBram Moolenaar氏が書いてます。

見えてるバッファだけで実行する場合は「bufdo」の代わりに「windo」が使えますね。
Posted at by




http://www.hsbt.org/diary/20071022.html#p02
だれか indent たのむ - HsbtDiary (2007-10-22)
頼まれた!
って訳ではないですが...

vimは数多くのファイルフォーマットに対応しており、通常扱うファイルであれば、ほぼ全てサポートしているんじゃないかという位、多くのファイルフォーマットに対応出来ています。
どれくらい凄いかと言うと...
gvimの「シンタックス(S)」メニューを展開すると画面がいっぱいになるくらいです。
vim_ff

さて、VBでのインデントですが、例えばVB6の以下の様なソース Private Sub Class_Initialize()
Debug.Print "あめんぼ赤いな"
        If Me.strValue = "" Then
    Debug.Print "エラー!"
End If
End Sub
Private Sub Class_Terminate()
Debug.Print "あいうえお"
End Sub
こんなに崩れたファイルでも、vimなら「gg=G」でおしまい。 Private Sub Class_Initialize()
    Debug.Print "あめんぼ赤いな"
    If Me.strValue = "" Then
        Debug.Print "エラー!"
    End If
End Sub
Private Sub Class_Terminate()
    Debug.Print "あいうえお"
End Sub
例えば、以下の様なJavaのソースファイルでも public class Test {
            public Test() {
                System.out.println("コンストラクタ");
            }
public void doPhpSpot() {
//ここでは何もしない
}
}
上のコマンドで public class Test {
    public Test() {
        System.out.println("コンストラクタ");
    }
    public void doPhpSpot() {
        //ここでは何もしない
    }
}
あらキレイ!
例えばファイル全体でなく、一部分だけインデントを修正したい場合にはビジュアル選択(V押下後にjk移動)した後で「=」とすれば、部分的にインデントし直されます。

どうですか!vim使いたくなりませんか!

mattn often say sales hype.
Posted at by