386

隠しバッファの同じウィンドウで多くのファイルを開くという現在の慣行の代わりとして、Vim でタブを使用する機能 ( 、 など) を調べました:tabe:tabnew

開いているすべての個別のファイルを常に独自のタブに配置したいと思います。ただし、これにはいくつかの障害があります。これらを修正するにはどうすればよいですか:

  1. コマンドが や のようgf^]別のファイル内の場所にジャンプすると、ファイルは現在のタブの新しいバッファーで開きます。これらすべての種類のコマンドでファイルを新しいタブで開く方法、またはファイルが既に開いている場合は既存のタブに切り替える方法はありますか?

  2. バッファを切り替えるときに使用 :b <part of filename><tab> でき、既存のバッファ内のファイルの名前を完成させます。<part of filename>ファイル名の先頭ではなく途中にあることさえあります。タブの切り替えに相当するものはありますか?

4

10 に答える 10

680

やめて、やめて、やめて。

これは、Vim のタブが使用されるように設計された方法ではありません。実は名前が間違っています。「viewport」または「layout」という名前の方が適しています。これがタブの意味であり、既存のすべてのバッファーのウィンドウのレイアウトが異なるためです。

1 つのタブ == 1 つのバッファに Vim を打ち負かそうとするのは、無駄なことです。Vim は認識も気にもせず、すべてのコマンドでそれを尊重しません。特に、クイックフィックス バッファーを使用するもの ( :make:grep、および:helpgrepが思い浮かびます) は喜んでタブを無視し、停止するためにできることは何もありません。それ。

その代わり:

  • :set hidden
    このセットをまだ持っていない場合は、そうしてください。これにより、vim は地球上の他のすべての複数ファイル エディターと同じように機能します。どこかのウィンドウに表示されていない編集済みバッファを持つことができます。
  • :bn:bp:b #:b name、およびを使用して、ctrl-6バッファーを切り替えます。私は自分が好きですctrl-6(単独で、以前に使用されたバッファに#ctrl-6切り替えるか、バッファ番号に切り替えます#)。
  • :lsバッファ、またはMiniBufExplBufExplorerなどのプラグインを一覧表示するために使用します。
于 2008-09-19T16:44:57.077 に答える
284

ここでのパーティーには少し遅れましたが、驚いたことに、このリストに次のものが表示されませんでした。

:tab sball- これにより、開いている各バッファの新しいタブが開きます。

:help switchbuf- これはバッファの切り替え動作を制御します。試してみてください:set switchbuf=usetab,newtab。これは、バッファが開いている場合は既存のタブに切り替えるか、開いていない場合は新しいタブを作成することを意味するはずです。

于 2010-08-13T11:36:57.070 に答える
189

Vim:help windowは、「タブとバッファ」という混乱についてかなりうまく説明しています。

バッファは、ファイルのメモリ内テキストです。
ウィンドウは、バッファー上のビューポートです。
タブ ページは、ウィンドウの集まりです。

複数のファイルを開くことは、バッファーを使用して vim で実現されます。他のエディター (notepad++ など) では、これはタブで行われるため、vim の名前タブは誤解を招く可能性があります。

ウィンドウは、ワークスペースを分割し、複数のファイル (バッファ) を 1 つの画面にまとめて表示するためのものです。他のエディタでは、複数の GUI ウィンドウを開き、デスクトップ上で再配置することでこれを実現できます。

最後に、このアナロジーでは、vim のタブ ページは複数のデスクトップに対応します。つまり、ウィンドウの再配置が異なります。

vimhelp: tab-pageが説明しているように、ファイルを一時的に編集したいが、ウィンドウとバッファの現在のレイアウトで何も変更したくない場合は、タブページを使用できます。このような場合、その特定のファイルを編集するためだけに別のタブ ページを使用できます。

もちろん、多くのタブ ページまたはウィンドウで同じファイルを表示すると、同じ作業コピー (バッファ) が表示されることを覚えておく必要があります。

于 2012-01-23T15:05:38.093 に答える
58

ここでの他のいくつかの答えとは反対に、私はあなたが好きなようにタブを使うことができると言います。vimは、事前定義されたパラメーターに従って作業することを強制するのではなく、用途が広くカスタマイズ可能になるように設計されています。私たちは皆、プログラマーが私たちの「倫理」を他のすべての人に押し付けるのが好きな方法を知っているので、この成果は確かに主要な機能です。

<C-w>gfバッファのgfコマンドに相当するタブです。 <C-PageUp>タブを<C-PageDown>切り替えます。(Byobuでは、これら2つのコマンドは私には機能しませんが、Byobu / tmuxの外部では機能します。代替手段はとgtですgT。) <C-w>T現在のウィンドウを新しいタブページに移動します。

可能であれば、重複するタブを作成するのではなく、vimが既存のタブを使用することを希望する場合は:set switchbuf=usetab、.vimrcファイルに追加します。newtabリスト( )に追加して、:set switchbuf=usetab,newtabコンパイルエラーを表示するQuickFixコマンドを別のタブで強制的に開くことができます。split代わりに、分割ウィンドウでコンパイルエラーを開く方が好きです。

でマウスサポートを有効にしている場合は:set mouse=a、タブをクリックして操作できます。+デフォルトでは、新しいタブを作成するボタンもあります。

タブのドキュメントについては:help tab-page、通常モードで入力してください。(これを行った後、を使用してウィンドウをタブに移動する練習をすることができます<C-w>T。)コマンドの長いリストがあります。一部のウィンドウコマンドはタブに関係しているため、。を介してそのドキュメントも確認することをお勧めします:help windows

追加:2013-12-19

vimで複数のファイルを開き、各ファイルを別々のタブに表示するには、を使用しますvim -p file1 file2 ...。あなたが私のようで、いつも追加するのを忘れている場合は-p、vimが通常のコマンドラインオプションの解析ルールに従うので、最後に追加することができます。または、bashエイリアスマッピングvimをに追加することもできますvim -p

于 2012-11-11T05:27:00.470 に答える
14

私は同じ問題に遭遇しました。タブをバッファのように機能させたかったのですが、うまくいきませんでした。私が最終的に落ち着いた解決策は、バッファをタブのように動作させることでした!

Mini Buffer Explorerというプラグインを確認してください。インストールして構成すると、機能を失うことなく、タブと同じようにバッファーを操作できるようになります。

于 2008-09-19T15:12:05.473 に答える
4
  • .vimrc で gf を使用して行ったように、通常はバッファーを操作するコマンドをタブを操作するようにマップできます。

    map gf :tabe <cfile><CR>
    

    [^でも同じことができると確信しています

  • vimがタブに対してこれをサポートしているとは思わない(まだ)。gt と gT を使用して、それぞれ次のタブと前のタブに移動します。Ngt を使用することもできます。N はタブ番号です。私が持っている 1 つの不満は、デフォルトでは、タブ番号がタブ行に表示されないことです。これを修正するために、.vimrc ファイルの末尾にいくつかの関数を追加しました(ファイルが長く、正しくフォーマットされていないため、ここには貼り付けませんでした)。

于 2008-09-19T14:53:33.990 に答える
4

BufExplorerプラグインといくつかのマクロを使用して、タブのようなバッファーを使用します。

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

BufExplorer を使用すると、上部にタブ バーがありませんが、画面のスペースを節約できます。さらに、無限の数のファイル/バッファーを開くことができ、バッファー リストは検索可能です...

于 2008-09-19T22:46:12.463 に答える
4

:help タブを見ると、vim があなたのやり方で動作したいようには見えません...

バッファはタブ間で共有されるため、特定のバッファを特定のタブにのみ表示されるようにロックすることはできないようです。

しかし、それは良い考えです。

multi-gnome-terminal などのタブをサポートするターミナルを使用し、各ターミナル タブで vim インスタンスを実行することで、おそらく必要な効果を得ることができます。完璧ではありませんが...

于 2008-09-19T14:50:18.270 に答える