vimの新しいタブで既存のバッファーを編集するにはどうすればよいですか?


51

私はこのようにvimを始めたと仮定します:

vim foo bar

今、私はそれらのファイルをそれぞれ独自のタブに入れることにしました。vimを終了せず-pにコマンドラインにオプションを追加せずにそれを行う方法はありますか?


以下のliuyang1の回答でtabe %言及されているものの多くは、おそらく探してい ます。
マテウスピオトロフスキ

1
@MateuszPiotrowskiのように私が述べたその答えに、このコメント:tabe %有効なファイルパスを持っていないバッファでは動作しません。:tab sb毎回動作します。
JoL

回答:


30

そのようなvimを起動すると、vimクライアントは取得されず、テキストエディターはターミナルまたはcmdプロンプトを使用します。2つのファイルは2つの異なるバッファーにあります。:lsバッファをリストするために使用します:

:ls
  1 %a   "foo"                 line 6
  2      "bar"             line 0

%aはアクティブなバッファーです。を使用:b2して、バッファー2に切り替える:bn:bp、または次または前にサイクルするために使用できます。水平に分割する(CTRL-W s)よりも(CTRL-W v)ウィンドウを垂直に分割することを好みます。

あなたは2つのロードされたファイル&(まだ)ありませんタブを持っている場合は、次のことができ、:tabnewかつ新しいタブタイプ:b2

常に独自のタブにバッファをロードしたい場合は、この記事をご覧ください


はい。ただし、タブが必要です。
innaM 2009年

だから、あなたはすでにcmd /端末シェルではなくvimクライアントにファイルがある方法でvimを起動していますか?
DaveParillo 09年

1
どういう意味かわかりません。上記のようにシェルを使用してvimを起動すると、実行中のvimがあります。
innaM

あ!バッファがタブに対してローカルではないことを本当に理解したことはないと思います。各タブには独自のバッファリストがあると常に考えていました(あまり考えずに)。
innaM 09年

私のマシンでvimは、シェル内でエディターが起動します。vimのグラフィカルユーザーインターフェイスを取得するには、を使用する必要がありますgvim。そして、あなたは正しいです-バッファはvimアプリケーションに対してグローバルです。
DaveParillo

47

新しいタブでバッファを開きたいですか?

画面を分割し(Ctrl-W s)、ウィンドウを開き、Ctrl-W T


うーん。私が念頭に置いていたものではありませんが、スタートには悪くありません。Ctrl-w Tまだ知りませんでした。もちろん、最初のタブにはまだ2つのバッファーがあります。
innaM 2009年

いいえ。画面を2つのウィンドウに分割し、そのうちの1つを新しいタブで開くと、最初のタブから離れます。残りません(少なくとも私のgvim72にはありません)。バッファに関する限り、それらはウィンドウ/タブに接続されていません...それらはvimがファイルの内容を保存するメモリのようなものです。
ルーク

あ!あなたが正しい。私はの出力を誤って解釈していました:ls
innaM 2009年

また、ctrl-w Vはウィンドウを垂直に分割します。
シャノンネルソン

1
CTRL-w vは、ウィンドウを垂直に分割するための正しいコマンドです
-JRM

27

これを実現するには、tabコマンドとコマンドを組み合わせsb[uffer]ます。

最初に、新しいタブで開くバッファのバッファIDを知る必要があります。ls次のコマンドでこれを確認できます。

:ls
  1 %a   "foo"                          line 1
  2      "bar"                          line 0

IDを取得したら、次を使用して新しいタブで簡単に開くことができます。

:tab sb 2

このsbコマンドは通常、指定されたバッファーを新しい分割ウィンドウでtab開きますが、代わりにコマンドによって新しいタブで開きます。

また、このtabコマンドを使用すると、タブリストの新しいタブを作成する場所を指定できます。たとえば:0tab sb 2、現在のタブではなく、リストの先頭に新しい「バー」タブが表示されます。


2
バッファ番号は必要ありません。バッファ名の明確な部分を指定すれば、VIMが残りを行います。
デザート

1
これは、私が探していて必要としていた答えでした。:tab buffer part-of-name新しいタブを開かなかったとき、私はがっかりしました!しかし:tab sb part-of-name、魅力のように働いた。ありがとうございました!!!!
スキマ

これはOPの正確な質問ではありませんが、まさに私が探していたものでした:)
jackcogdill

25

OPが要求したことを達成するためのより良い方法は次のとおりです。

:bufdo tab split

これにより、各バッファーがいくつ存在しても、それぞれのタブが開きます。これだけ使用すれば、.vimrcで簡単にマッピングを作成できます。この小さなvimプラグインのようなものと組み合わせると、次のように、独自のタブ内のすべてのアイテム:grep(または:Ack)が開きます。

:grep foo
:QuickFixOpenAll
:bufdo tab split

もちろん、プラグインを使用する場合、プラグインを変更して、クイックフィックスリストの内容を直接タブに開くだけで十分です。

更新:私は本当に下のggustafssonのコメントに一言コメントしなければなりません。これは多くの最良の答えであり、Vimの構図的行動に対する傾向を美しく示しています。提案は次のとおりです。

 :tab sball

:tab:sballのVimヘルプを参照して、ここで何が起こっているのかを確認する価値があります。


後世のために、以前の編集からの同様のアプローチがあり:bufdo execute "tabnew %"ます。新しいアプローチは少し明確だと思います。
ジョンホイットリー

注意点:vimの開始バッファーが空でない場合、これは最後のバッファーを2回開くようです。簡単な修正が見つかった場合は、更新を投稿します。
ジョンホイットリー

12
:tab sballうまくいくようです。
ggustafsson

6

1. Vimで2つのファイルを開きます。

$ vim foo bar

2.バッファーの数を確認します。

:ls
  1%a "foo"
  2「バー」

3. 2つのコマンドをチェーンします。tabnew新しいタブを開き、タブb <buffer_number>に目的のバッファーをロードします。

:tabnew | b 2

8
手順3の問題は、最初に空のバッファーで新しいタブを作成し、次にバッファー2を開いて、バッファーリストにタイトルのないバッファーが追加されることです。使用する方が良い:tab sb 2
-rkjnsn

1
@rkjnsnを回答として投稿する必要があります-「vimの新しいタブで既存のバッファを編集するにはどうすればよいですか?」
ジョニーラー

1
@JonnyLeedsできました。
rkjnsn

4

他の人が言及しなかったポイントを追加してください。

  • 現在のウィンドウから新しいタブ

複数のウィンドウがある場合、<C-W>Tこのウィンドウを新しいタブに移動します。ただし、このショートカットは「バッファ」ではなく「ウィンドウ」専用です。このスタイルを好む場合、:spまたは<C-W>s現在のバッファーをもう1つのウィンドウに複製し<C-W>Tてから、新しいタブに移動する場合。

4回のキーストロークまたは7回のキーストローク。

  • 現在のバッファから新しいタブへ

:tabe % 現在のバッファの新しいタブを開きます。

7キーストローク。

  • 新しいタブへのバッファリング

CtrlPプラグインを使用する場合、「CtrlPBuffer」も使用できます。その後、<C-t>ショートカットを使用して新しいタブページで開くことができます。このスタイルは、簡単に別のバッファーに切り替えることができます。

「CtrlPBuffer」のショートカットで、4回以上のキーストローク。


:tabe %私が長い間探していたものです、ありがとう!
ペビック

いいえ、:tabe %実際に現在のバッファの新しいタブを開きません。起こることは%、現在のバッファのファイルパスに展開され、そのパスを:tabe開くことです。Vimは、既に開いているファイルを開こうとしていることを認識し、持っているバッファーを再利用します。これは、ファイルパスがないバッファーでは機能しないことを意味します。で新しいファイルを開いて:new保存していない場合、これを使用して新しいタブに配置することはできません。あなたが必要とする実際のコマンドは、その答えに入れrkjnsnものです::tab sb %または短い::tab sb
JOL
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.