ワイルドカード表現に一致する複数のファイルを開く方法は?


10

グロブ表現に一致するいくつかのファイルを編集したい。たとえば、子ディレクトリ内のすべてのgit構成ファイルを編集するには、シェルでこれを実行できます。

vim */.git/config

Vimの:コマンドラインでは、:find */.git/config同様のことを行う(つまり、グロブ式に一致するすべてのファイルを開く)ことを期待していましたが、代わりに不平を言いE77: Too many file namesます。

ワイルドカード/グロブ式に一致する複数のファイルを開くためのVimコマンドまたはワンライナー(関数の記述は含まれません)はありますか?

回答:


8

使用できます:args {glob}。グロブで**は、ディレクトリを再帰的に走査します。

これにより、引数リストが生成されます。これは、Vimを引数として1つ以上のファイル名で起動したときに生成されるリストと同じです。

引数リストにデータが入力されると、:nextおよびを使用してリストをナビゲートできます:previous:firstおよび:lastコマンドを使用して、最初と最後の項目にジャンプすることもできます。


1
ニース:)は:args */.git/config実際にバッファリストにもデータを入力するので、うまくいき:bnextます。奇妙に見えますか?(Vim 7.4.52、およびNeovim)
Justin M. Keyes

1
また、github.com / tpope / vim-unimpairedがインストールされている場合は]a:argsリストを循環させます。
ジャスティンM.キーズ2015年

また:argadd file*できます。
ケノーブ2015年

globパターン(**)を使用するには、globstar設定する必要があります。以下を参照してください:入れ子になっているすべてのディレクトリの下にあるすべてのファイルをシェルglobbingで照合します。
kenorb

@ JustinM.Keyesバッファリストはargsリストのスーパーセットであるため、これは当然です。
jamessan 2015

3

一致するファイルを別のタブで開くには…

:n */.git/config | tab all

説明: :n:next)すべての一致に次のファイルのリストを設定します。 tab all次のファイルのリストにあるすべてのファイルを新しいタブで開きます。

…または…

for f in glob("*.py", 0, 1) | exe "tabe" f | endfor

説明: ではglob(…)、0は、または設定により無視される場合でも、一致するすべてのファイルを含めることを意味します。1は、文字列ではなくリストを返すことを意味します。 はの短縮形であり、変数で指定されたファイルを新しいタブで開くことを意味します。suffixeswildignorecaseexe "tabe" fexecute "tabedit" ff


1
:n */.git/config | buffer作品のように見えます。
Mateen Ulhaq

2

Vim:コマンドラインで、私:find */.git/configは同様のことをすることを期待していました(つまり、グロブ式に一致するすべてのファイルを開く)が、代わりに文句を言いE77: Too many file namesます。

ドキュメントを読む前に何も期待しないでください。

トムの答えに加えて:next、の代わりにを直接使用できます:args


0

でファイルを開くことはvim */.git/config間違いなく動作するはずです。そうでない場合は、Vimを7.4にアップグレードする必要があります(以前のバージョンの方がバグが多かった)。

または、(エディター内で)次のいずれかを試してください。

:n `find .git/ -name config`
:args `find . -name config`

あなたは私の質問を注意深く読みませんでした。そして、受け入れられた答えはすでに言及しています:args
Justin M. Keyes、

@ JustinM.Keyesあなたのポイントをありがとう。ワイルドカードはデフォルトで機能するはずですが、これは7.4でも機能するという唯一の回答です(アップグレード前にまったく同じエラーが発生したため)。使用すると、args唯一の回避策ですが、さらにより多くのそれはあなたが使用することによって、より複雑なソリューションのためにそれを使用したい場合にはvimの中にさらにユーザーをそれ自己のシェル拡張を使用する方法を示しfindなど、この1。だから私はそれがあなたの質問にいくつかの付加価値を与えると思います。だからあなたと一緒に大丈夫だと思います。
kenorb 2015

私はで問題が発生したことはvim */fooありません。Vimのバージョンに関連する方法はありません。これはシェル機能であるためです。
Justin M. Keyes、

0

明白ですが、上記にはリストされていません-例では、名前にcreate_table文字列が含まれるすべてのSQLファイルを検索します

:args **/*create_table*sql

そしてそれらをチェック

:ls

そして最初のものを開きます

:b 1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.