Vimでシステム開発
蒋 いつ峰 2008/06/12   |  開発色々
7.lookupfileプラグイン 2008/06/12  |  PK:vim lookupfile

ファイルの開くについて、Vimは「:find」コマンドがありますが、あまり便利ではないと思います。ファイルが多い場合、検索が遅くなります。また、ファイルのフルネームを入力しなければならない、正規表現は使えないのです。

Vim標準のファイル・エクスプローラであるnetrwも紹介しました、netrwはフォルダ・エクスプロー時が便利です。ただし、すでに名前または名前の一部が分かっているファイルの場合、netrwは効率が高いと言えないでしょう。

ファイル名の一部を入力すれば、該当するファイル一覧を表示して、選択できるような機能がずっとほしかったのです。

ここで登場するのはlookupfileプラグインです。lookupfileは私が求めていたプラグインです。このプラグインを投票する時、私は「Life Changing」を選びました。


1.インストール

http://www.vim.org/scripts/script.php?script_id=1581 から、lookupfileプラグインをダウンロードします。

lookupfileのバージョン1.6からは、Vim 7.1が必須となっています。私のLinuxはデフォルトがVim 7.0です。Vim 7.1をコンパイルして見たが、Vim 7.1のGUIフォントについて、私が好きなIPAゴシックが利用できなかったため、やめました。結局、lookupfileの1.4版をインストールしました。

ダウンロードしたファイルを~/.vim フォルダに解凍します(Windowsの場合は$VIM/vimfilesまたは$HOME/vimfiles)。Vimから「:helptags ~/.vim/doc」コマンドを実行し、ヘルプを生成します。これで「:help lookupfile」でlookupfileのヘルプを表示できます。

また、lookupfileを動かすにはgenutilsプラグインが必要となります。http://www.vim.org/scripts/script.php?script_id=197 からダウンロードし、~/.vim フォルダに解凍します。


続いては、lookupfileの使用について紹介します。名前はlookupfileですが、このプラグインはファイル以外も、バッファとフォルダなどの検索もできます。


2.ファイル、バッファとフォルダの検索

lookupfileはファイルを検索時、tagファイルが必要です。前回紹介した「ctags」コマンドで生成したtagファイルも利用できますが、速度が遅い。ですから、プロジェクトのファイル一覧のtagファイルを作ればいい。

例えば、私は以下のシェルを使って、Vim 7.1 のソースのtagファイルを作成します。

#!/bin/sh

# generate tag file for lookupfile plugin
echo -e "!_TAG_FILE_SORTED\t2\t/2=foldcase/" > filenametags
find . -not -regex ’.*\.\(png\|gif\)’ -type f -printf "%f\t%p\t1\n" | \
        sort -f >> filenametags


※シェルの内容について、前回の 4.tagファイルとtaglistプラグイン(その1) を参考してください。

~/src/vim71 の下にこのシェルを実行すれば、~src/vim71 の全てのファイル名とファイルのあるフォルダを含む、filenametags というtagファイルが作れます。

tagファイルが出来たら、次はlookupfileを設定します。Vimで実行します。
:cd ~/src/vim70
:let g:LookupFile_TagExpr = ’"./filenametags"’


※g:LookupFile_TagExprオプションが設定されていない場合、lookupfileはデフォルトtagsオプションが設定された値をtagファイルとします。

以上で準備が完了しました。lookupfileでファイルを開いて見てみましょう。<F5>、または「:Lookupfile」でlookupfileウィンドを画面トップ部に開きます。そこにファイル名の一部を入力すると、マッチしたファイルの一覧が表示します。もちろん、正規表現も対応します。矢印キーでファイルを選んで、Enterを押せばファイルが開きます。

以下はlookupfileを使ってファイルを検索するの例です。:Lookupfile

lookupfile プラグイン

画面トップのウィンドはlookupfileです、そこに「gui」を入力します、マッチしたファイルが一覧が表示され、選んだファイルにEnterを押すとファイルが開いて、lookupfileウィンドも閉じます。

lookupfileはファイル以外のほかの機能があります、よく使うのはバッファとフォルダの検索です。

:LUBufs バッファ検索
:LUWalk フォルダ検索


3.設定

自分の編集習慣と合せてlookupfileのオプションを設定します。私のvimrcには以下のように設定しています。

""""""""""""""""""""""""""""""
" lookupfile setting
""""""""""""""""""""""""""""""

let g:LookupFile_MinPatLength = 2
let g:LookupFile_PreserveLastPattern = 0
let g:LookupFile_PreservePatternHistory = 0
let g:LookupFile_AlwaysAcceptFirst = 1
let g:LookupFile_AllowNewFiles = 0
if filereadable("/home/uprush/workspace/uprush/filenametags")
    let g:LookupFile_TagExpr = ’"/home/uprush/workspace/uprush/filenametags"’
endif
nmap <silent> <leader>lt :tabnew<cr>:LookupFile<cr>
nmap <silent> <leader>lk :LookupFile<cr>
nmap <silent> <leader>ll :LUBufs<cr>
nmap <silent> <leader>lw :LUWalk<cr>

" lookup file with ignore case
function! LookupFile_IgnoreCaseFunc(pattern)
    let _tags = &tags
    try
        let &tags = eval(g:LookupFile_TagExpr)
        let newpattern = ’\c’ . a:pattern
        let tags = taglist(newpattern)
    catch
        echohl ErrorMsg | echo "Exception: " . v:exception | echohl NONE
        return ""
    finally
        let &tags = _tags
    endtry

    " Show the matches for what is typed so far.
    let files = map(tags, ’v:val["filename"]’)
    return files
endfunction
let g:LookupFile_LookupFunc = ’LookupFile_IgnoreCaseFunc’


こう設定することで、「,lk」を入力した場合、指定のtagファイルを利用してファイルの検索を行います。「,lt」で新しいタブでファイルを検索します。検索時、大文字と小文字を区別しません。


== 関連ヘルプ ==

:help lookupfile

 


閲覧  |  コメント  |  目次

 
ヘルプ  |  ご利用規約  |  相互リンク  |  問合せ
リンクはご自由に、問合せはお気軽に
©2007 Uprush