ファイルの開くについて、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です、そこに「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」で新しいタブでファイルを検索します。検索時、大文字と小文字を区別しません。
== 関連ヘルプ ==
|