Vimでディレクトリを再帰的に検索して(必要に応じてワイルドカードを使用して)ファイルを検索する方法はありますか?ネイティブでない場合、これを処理できるプラグインはありますか?
Vimでディレクトリを再帰的に検索して(必要に応じてワイルドカードを使用して)ファイルを検索する方法はありますか?ネイティブでない場合、これを処理できるプラグインはありますか?
回答:
:edit
コマンドでワイルドカードを使用できます。そう、
:e **/test/Suite.java
現在のディレクトリ階層のどこにあっても、test /Suite.javaが開きます。これはタブ補完で機能するため、ファイルを開く前に[tab]を使用してワイルドカードを展開できます。代わりに、考えられるすべての拡張機能を参照する方法については、ワイルドモードオプションも参照してください。
別のトリックは使用することです
:r! find . -type f
現在のディレクトリ内のすべてのファイルのリストをバッファにロードします。次に、通常のすべてのvimテキスト操作ツールを使用して、リストをナビゲート/並べ替え/トリミングCTRL+W gf
し、新しいペインのカーソルの下にあるファイルを開くことができます。
検索コマンドがあります。に**
(を参照:help starstar
)を追加すると、'path'
再帰的に検索できます。
:set path
あなたの現在のパスを表示し、**
次のようなことをして追加します
:set path+=**
次に入力するだけです
:find myfile.txt
そしてそれは魔法のように開きます!
setコマンドを.vimrcに追加すると、将来的に再帰検索を実行できるようになります。ドットディレクトリ(たとえば.ssh)を検索していないようです
my*.txt
ですか?
:h find
。
:set path+=**
ctrlp.vimをお勧めします。これは非常に優れたプラグインであり、大規模なプロジェクト内で作業するのに理想的です。ファイル名またはフルパスによる検索、regexp検索、プロジェクトルートの自動検出(.git | hg | svn | bzr | _darcsフォルダーを持つもの)、パーソナライズされたファイル名の除外などがあります。
を押すだけで<c-p>
、非常に直感的なペインが開き、必要なものを検索できます。
一度に複数のファイルを選択して開くことができます。また、特定の行へのジャンプ、文字列の出現、その他のVimコマンドなど、追加の任意のコマンドも受け入れます。
組み込みの検索コマンド(:help find)としてのvimですが、最初に見つかったファイルのみを開きます。しかし、あなたはこの驚くべきプラグインを使うことができます:あなたが望むすべてとさらに多くをするFuzzyFinder
でファイルシステムを閲覧できますが:ex .
、再帰的に検索する方法がわかりません(私はVimの初心者です—使用してから10年しか経っていません)。
人気のあるファイルブラウザプラグインがいくつかあります。
SuperUserのこのスレッドも参照してください。
Command-Tを使用すると、文字を入力するだけでファイルをすばやく見つけることができます。新しいタブでファイルを開くこともできますが、rubyをサポートしてコンパイルされたvimが必要です。
使用できます!シェルコマンドを実行するには:
:! find . -name *.xml
私のお気に入りのvimプラグインの1つであるCommand-tは、FZFとの統合を超えるルビーベースのプラグインです。
Comamnd-TとFZFを使用すると、次のような非常に高速な「ファジー」メカニズムで検索を実行できます。
ご覧のように
私は常に新しいターミナルを開いてコマンド履歴を検索し、次のように押します。
CTRL+R
ターミナルタブに書き込むことにより、すべてのフォルダを再帰的に検索することに加えて、
fzf
また、中に書くことができます vim
:CommandT
本当にパワフルで速い。
vimには、これを実行できるgrep、lgrep、vimgrep、またはlvimgrepという名前のコマンドが組み込まれています。
これらの使用方法に関するチュートリアルは次の とおりですhttp://vim.wikia.com/wiki/Find_in_files_within_Vim#Recursive_Search
このように実行することで、vimからfindやgrepなどの外部コマンドを使用することもできます。
:!find ...
:grep test */.java
はtest
すべての.java
ファイルで単語を検索します。シェルコマンドを:!find
使用しfind
てファイルを検索します。find
あなたはPCREまたは拡張正規表現とそれを組み合わせる場合は、シェルコマンドは、かなり強力です
Unite.vimについてまだ誰も言及していないことに驚いています。
ファイルを見つけることは(あいまいであろうとなかろうと)、開発者にとって何ができるかという氷山の一角にすぎません。それはのためのサポートが組み込まれておりag
、git
および他のプログラム/ユーティリティ/ vimのプラグインの無数。学習曲線は少し急になる可能性がありますが、それなしでは私の人生を想像することはできません。ユーザーベースは大きく、バグはすぐに修正されます。
Quickfixのような結果ブラウジング
使用法:
Find my.regex
結果:
grep -E
正規表現に一致する相対パスが含まれています<enter>
または<C-w>gf
、現在の行のファイルを新しいタブで開くgf
現在のタブでファイルを開き、ファイルリストを失うには代わりにすべてのファイルを検索します。
Find
代替方法:
Gfind my.regex
:Gitで追跡されたファイルのみを検索します(git ls-files
)。逃亡者のリクエスト:https://github.com/tpope/vim-fugitive/issues/132#issuecomment-200749743Gtfind my.regex
:のようGfind
ですが、現在のディレクトリではなくgitトップレベルから検索しますLocate somefile
:locate
バージョンコード:
function! Find(cmd)
let l:files = system(a:cmd)
if (l:files =~ '^\s*$')
echomsg 'No matching files.'
return
endif
tabedit
set filetype=filelist
set buftype=nofile
" TODO cannot open two such file lists with this. How to get a nice tab label then?
" http://superuser.com/questions/715928/vim-change-label-for-specific-tab
"file [filelist]
put =l:files
normal ggdd
nnoremap <buffer> <Enter> <C-W>gf
execute 'autocmd BufEnter <buffer> lcd ' . getcwd()
endfunction
command! -nargs=1 Find call Find("find . -iname '*'" . shellescape('<args>') . "'*'")
command! -nargs=1 Gfind call Find('git ls-files | grep -E ' . shellescape('<args>'))
command! -nargs=1 Gtfind call Find('git rev-parse --show-toplevel && git ls-files | grep -E ' . shellescape('<args>'))
command! -nargs=1 Locate call Find('locate ' . shellescape('<args>'))
この関数専用のプラグインは必要ありません。以下のコードスニペットで十分です。
function! FindFiles()
call inputsave()
let l:dir = input("Find file in: ", expand("%:p:h"), "dir")
call inputrestore()
if l:dir != ""
call inputsave()
let l:file = input("File name: ")
call inputrestore()
let l:nf = 'find '.l:dir.' -type f -iname '.l:file.' -exec grep -nH -m 1 ".*" {} \;'
lexpr system(l:nf)
endif
endfunction
nnoremap <silent> <leader>fo :call FindFiles()<CR>
実行:
:args `find . -name '*xml'`
Vimはバッククォートでシェルコマンドを実行し、ファイルのリストをarglistに入れて、最初のファイルを開きます。次に、あなたが使用できる:args
引数リスト(ファイルが見つからすなわちリスト)を表示し、:n
かつ:N
引数リスト内のファイルを前方とbacwardsナビゲートします。https://vimhelp.org/editing.txt.html#%7Barglist%7Dおよびhttps://vimhelp.org/editing.txt.html#backtick-expansionを参照してください
このプラグインを使用すると、「パス」内でファイルを再帰的に見つけることができます。ファイル名のタブ補完もサポートしています。