概要
findやdirを記述したsh,batファイルを置くだけで下位ディレクトリのファイルを簡単に検索できるようにしてみた
EditorConfigのようにディレクトリを遡って特定のファイルを探す発想
例/Eccube/Controller/Admin/default/TemplateController.php
がカレントバッファの時に検索を実行すると下記のファイルを順番に探す
/Eccube/Controller/Admin/default/.lsfile
/Eccube/Controller/Admin/.lsfile
/Eccube/Controller/.lsfile
/Eccube/.lsfile
/.lsfile
見つけた.lsfileから検索ワードに一致するファイルパスをgrepやfindstrで抜き出してQuickFixに表示する
.lsfileが見つからずにmake_lsfile.(sh|bat)が見つかった場合は実行してlsfileを作成するか問い合わせをする
動作確認
OS | APP | ◯✗ |
---|---|---|
CentOS7.5 | Neovim 0.2.2 | ◯ |
macOS High Sierra | MacVim 8.0 | ◯ |
Windows10 | KaoriYa Vim 8.0 | ◯ |
イメージ
検索結果をQuickFixに読み込み
sh,batの実行
ファイル検索時に.lsfileが見つかない時にmake_lsfile.shかmake_lsfile.batがカレントディレクトリとルートの間にある場合に問い合わせをする
#linux
execute? [!cd "/Eccube/"; /bin/bash '/Eccube/make_lsfile.sh']
#Windows
execute? [!D: & cd "D:\Eccube\" & "D:\Eccube\make_lsfile.bat"]
検索、再作成
検索
:FS `検索文字列`
もしくは
:QFSFileSearch
>Enter filename:`検索文字列`
.lsfile作成、再作成
make_lsfile.(sh|bat)を親ディレクトリを遡って探して実行問い合わせ
:QFSMakeList
検索文字列に関して
IDEのファイル検索に近いフィーリングで検索できるよう置換している
if has('win32')letl:grep_cmd ='!findstr'elseletl:grep_cmd ='!\grep -G -i -s -e'endifletl:searchword = substitute(a:searchword,'\([^\.]\)\*','\1.\*','g')letl:searchword = substitute(l:searchword,' ','.*','g')
sh,batサンプル
sh .git以外
\find `pwd`-type d -name lib -prune-o-not-iwholename'*/.git/*'-type f -print> .lsfile
sh 拡張子で
\find `pwd`-type d -name lib -prune-o-type f \(-name\*.php -o-name\*.js -o-name\*.css \)-print> .lsfile
bat .git以外
dir /s /b /a-d * | findstr /i /v "\\\.git\\" > .lsfile
bat 拡張子で
dir /s /b /a-d *.php *.twig *.js *.css > .lsfile
**入れておいた方が安心かも
sh
cd$(dirname$(readlink-f$0))
bat
cd %~dp0..\
.vimrc
letg:qsf_lsfile='.lsfile'letg:qsf_maxline=200letg:qsf_focus_quickfix=1letg:qsf_mkfile='make_lsfile.bat'letg:qsf_mkfile='make_lsfile.sh'"noremap <C-F12> :<C-u>QFSFileSearch<CR>
GitHub
https://github.com/naoyuki1019/vim-quickfilesearch2
ほぼ同じ作りでctagの実行と:set tags
を楽にするやつ
https://github.com/naoyuki1019/vim-autosettags