複数のタブを一度に開くにはどうすればよいですか?


14

私が使用する場合:

:tabedit file1 file2

私は得る:

E172: Only one file name allowed

:tabedit複数のファイル名で使用する方法はありますか?または、複数のタブを一度に開く別の方法ですか?



@kenorbはい。そして、それが何をするかについての説明がないことを除いて、それはすでにここでまったく同じ答えを持っています。それで、それへのリンクはどのように価値を追加するのでしょうか?
マーティントゥルノイ

他にもいくつかの答えがありますが、新しい答えがそこにあります。第二に、他の同様のリンク/関連がほとんどないので、ユーザーは関連する1回から多くを学ぶことができます。
ケノーブ

私はこのワンライナーを学びました::args *.c | tab all。他の質問はこれよりも人気がありますので、リンクするのも良いでしょう。
ケノーブ

回答:


10

引数リストを変更することで「組み込み」の方法を使用する他の回答の問題と複雑さを考えると、これを行うために独自の小さな関数を追加しました。

" Open multiple tabs at once
fun! OpenMultipleTabs(pattern_list)
    for p in a:pattern_list
        for c in glob(l:p, 0, 1)
            execute 'tabedit ' . l:c
        endfor
    endfor
endfun

command! -bar -bang -nargs=+ -complete=file Tabedit call OpenMultipleTabs([<f-args>])

これでを使用できます:Tabedit *.vim。この関数は、すべてのグロビングパターンを展開し:tabedit <f>、すべてのファイルに対して実行します。必要な数のパス名を追加できます。たとえば、これはすべて機能します。

:Tabedit file.rb
:Tabedit *.c
:Tabedit file1.py file2.py _*.py
:Tabedit /etc/hosts file{1,2}.sh

まあ、などなど...

私は少しでこれを入れglobedit.vimものためのコマンドが含まれているプラグインは、:Edit:Splitなど、


2
素晴らしい機能とコマンド!いくつかの改善点:(1)[<f-args>]代わりに"<args>"-を使用すると、patternパラメーターはリスト(配列)になり、文字列を手動で分割する必要がなくなります。(2)3番目の引数としてゼロ以外を渡してglob()、リストを返します。そうすることで、手動での分割も回避できます。0動作に影響を与えずにスキップするには、2番目の引数として渡す必要がありますglob(l:p, 0, 1)
-tommcdo

7

私の知る限り、これを行う唯一の組み込み方法は次のとおりです。

:args *.vim
:tab all

最初に、:args引数リストを置き換えます。引数リストには、Vimで開いたファイルがリストされます。vim file1 file2は、引数リストにfile1とが含まれることを意味しますfile2
これは実行時に変更でき、Vimは引数リストの新しいエントリごとにバッファを開きます。
詳細については:help argument-list、を参照 してください。

この:allコマンドは、引数リストのすべてのエントリに対してウィンドウを開き、:tabコマンドを実行し、指定されたコマンドが新しいウィンドウを開くと新しいタブを開きます。

注意事項

この方法にはいくつかの注意事項があります。

まず第一に、重複のチェックはありませんので、同じバッファに対して2つ以上のタブができてしまいます。

しかし、最大の問題は、すべてのタブを引数リストにあるもので置き換えることです。あなたは失われたすべての既存のタブを。引数リストを置き換えるのではなく、引数リストに追加
することにより、これをわずかに回避できます。ただし、またはなどのコマンドは引数リストを変更せ、引数リストに追加しない限り、これらのタブは失われます(ただし、バッファリストにはまだあります)。また、タブ内の引数リストのすべてを開きたくない場合があります。おそらく、追加のタブとして2つのファイルを開きたいだけです。:argadd *.vim:edit:tabedit

現在開いているすべてのタブを引数リストに追加することでこれを少し改善することもできます(実際には動作しません)が、これはまだ完全とはほど遠いです。タブに2つ以上のウィンドウがある場合でも、それらは変更されます...


私は間違っているかもしれませんが、これは余分なタブを開きませんか(デフォルトでタブを開くことに関する私の質問で見られるように)?
ムル

1
その質問に対する私の答えを参照している場合、違いは:argdo tabedit %、各引数ごとに新しいタブを開くを使用したことです。1つのタブから始めてn個の新しいタブを開くと、当然n + 1個のタブが残ります。:tab allはるかに優れたソリューションです。
-tommcdo

@tommcdo ジョシュ・ペトリーの答えを話していました。あなたは彼のエイリアスの1つに出くわすことはないでしょうか?:)
ムル

ハハ、いや。私は別の質問を考えていたに違いありません!
tommcdo

2

:next例では、代わりにコマンドを使用できます。

:n file1 file2

または:

:n *.txt

これは:args *.vim?を使用するのと同じようです。少なくとも、それは同じように動作し、:help next_f...同じであるとして、それを文書
マーティンTournoij

それは短くてシンプルで、あなたはそれについて言及しませんでした。振る舞いは、あなたがその質問で尋ねたとおりです。
ケノーブ

2

コマンドラインから次を使用できます。

vim file1 ... filen -p

-pまだ使用するのを忘れた場合は、使用することができます

:tab ball

ところで、変数tabpagemax(デフォルト値10)は、この方法で開くことができるタブの数を制限することを忘れないでください。


0

実際には、新しい関数を記述することなく、新しいタブを開いて現在のタブを保持できます(Stack Overflowのこの回答を参照)。

:args file1 file2 | argdo tabe

:tabe最初のファイルは現在のタブで開くため、その前に新しい空のタブ()を開くことができます。また、余分な空のタブが開いたままになります(:help argdo理由を理解するために参照してください)。


また、リンクで説明されているように、構文の強調表示を修正する必要があります(何らかの理由で)、最後のタブを閉じるため、「full」コマンドは次のようになります::tabnew | args file1 file2 | argdo tabe | tabdo syntax onEnterを押してプロンプトをクリアし、最後のタブ:closeを削除するために入力する必要があります( empty)tab ...それは非常に多くの入力であり、多くのタブを開いている場合にのみ価値があります(2つまたは3つのファイルの場合、:tabe2回使用する方が速くなります)。
マーティントゥルノイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.