バッファのようなVimのタブの使用


366

私は(とVimの中でタブを使用できることを見てきた:tabe:tabnew多くのファイルが隠されたバッファ内の同じウィンドウで開くことの私の現在の練習のための代替として、など)。

開いているすべての個別のファイルを常に独自のタブに配置したい。しかし、これを妨げるいくつかのことがあります。これらの修正方法:

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

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

回答:


642

停止、停止、停止します。

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

Vimを1つのタブ== 1のバッファーにぶつけようとするのは、無駄な作業です。Vimは知っているかのケア、それはすべてのコマンド-中にクイックフィックスバッファ(使用しています特に、何もそれを尊重しませんしません:make:grep:helpgrep喜んでタブを無視し、心に春がいることなものです)、あなたが停止にできることは何がありませんがそれ。

代わりに:

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

192
私にとって、これはバグであり、「ユーザーエラー」ではありません。Webで「vimタブ」を検索すると、他の誰もがあなたに同意しないか、Vimタブの「実際の」使用方法を認識していないことがわかります。また、タブが本当に「レイアウト」ビューである場合、なぜデフォルトのタブタイトル、現在のファイル名なのでしょうか。同じファイルの複数のビューが必要な場合は、すべてのタブタイトルが同じ名前になります(あまり役に立ちませんか?)。どちらにしても、Vimのデフォルトのタブ実装には欠陥があります。
cmcginty 2009

45
他にタブのタイトルに何を表示しますか?現在のバッファ名が表示されます(「ファイル名」ではありません)。とにかくタブのタイトルに表示されるものを変更できます。
aehlke

46
@Casey:FWIW、私が最初にVimのタブについて知っていて、それらとその目的について頭を折り返さなければならなかったとき、Zathrusによって与えられた定義を正確に考えました。(私はVimの初心者です)だから、いいえ、私はそれがそのような壊れているか直感的でない機能であることに同意しません...「すべての人について」が同意しないことにさえ同意しません(そして、少なくとも1つまたは2つの参照がアサーションにより大きな重みを与えることができると思います)。これは、複数の同時画面レイアウトに非常に適しています。
2011年

17
このコメントは間違っています。なぜ賛成または反対されたのかはわかりません。以下のロビンスは正解です-:tab sballと:switchbufがあなたが探しているものです。
Roel

38
「停止、停止、停止」の+1。Vimはツールであると同時にメンタリティでもあります。新しいユーザーにこのツールを最大限に活用できるように、メンタリティを教えることが重要です。
Cody Poll 2013年

273

ここのパーティーには少し遅れましたが、このリストに以下が表示されていないことに驚きました。

:tab sball -開いているバッファごとに新しいタブが開きます。

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


4
以下のための+1はswitchbuf- set switchbuf=useopenの迷惑な行動を避けるために素晴らしいですが:make:vimgrepバッファがすでに表示されていたとしても、ウィンドウのレイアウトでバッファを変更し、同様のコマンドを。
mMontu

3
なぜ私に合わないのですか?設定後:se switchbuf=usetab,newtabbnバッファを切り替えるために使用すると、既存のタブに切り替えるのではなく、現在のタブでバッファファイルを開きますか?何か問題がありますか?
zhiyelee

173

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

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

複数のファイルを開くには、vimでバッファを使用ます。他のエディター(例えば、notepad ++)では、これはタブで行われるため、vimのタブ名は誤解を招く可能性があります。

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

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

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

もちろん、多くのタブページまたはウィンドウで同じファイルを表示すると、同じ作業コピー(バッファ)が表示されることに注意してください。


11
これは実際には素晴らしい答えですが、理解するために数回の読み取りを行いました。バッファ=タブ、ウィンドウ= GUIウィンドウ、タブページ=デスクトップは、これまでのところ、概念に精通していない人のために
見つけるのに最適です

4
私はそれらを窓から部屋を見ていると考える傾向があります- buffer= オブジェクトwindow= ペイン、およびtab= ウィンドウ。部屋の中を移動して、別のウィンドウから見ることができますtabs)。ウィンドウごとに、ペインの数、配置、サイズを変えることができます。同じオブジェクトを、異なるウィンドウの異なるペインから同時に表示できます
go2null 2017

LinuxワークスペースとWindowsパラダイムに精通している場合は、vim使用の遺産が表示されます。最初はだけでした。ウィンドウマネージャーを使用すると、ウィンドウをペイン(タイルWM)またはオーバーラップペイン(、フローティングWM)に分割できますが、各ペインをウィンドウと呼びました。次に、ペインを複数のワークスペースに表示できるワークスペースの概念を追加します。したがって、このパラダイムでは、buffer= appwindow= windowおよびtab= workspaceです。
go2null 2017

56

ここでの他のいくつかの回答とは逆に、好きなようにタブを使用できると私は言います。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


3
vim -pただし、+ 1の場合、デフォルトでは最大10個のタブしか表示されないことに注意してください。余分なファイルはバッファに読み込まれますが、独自のタブには表示されません。
IanB 2014年

@IanB:デフォルトの設定を10タブに制限する方法を克服するにはどうすればよいですか?
0xC0000022L

3
@ 0xC0000022L tabpagemax設定を参照
IanB

14

私も同じ問題に遭遇しました。私はタブをバッファのように機能させたいと思っていましたが、どうにかそれらを実現することができませんでした。私が最終的に解決した解決策は、バッファーをタブのように動作させることでした!

Mini Buffer Explorerと呼ばれるプラグインをチェックしてください。一度インストールして設定すると、機能を失うことなく、タブと同じようにバッファを仮想的に操作できるようになります。


10

これは、Vimに精通しておらず、他のテキストエディター(私の場合はSublime Text)から来た人たちへの回答です。

私はこれらの答えをすべて読みましたが、それでもまだはっきりしていませんでした。あなたがそれらを読み通すと、十分なことが理にかなっていますが、質問の間を行ったり来たりするのに何時間もかかりました。

他の人が説明したように、最初のことです:

タブページはタブのように聞こえ、タブのように機能し、他のほとんどのGUIエディターのタブのように見えますが、そうではありません。これはVimで構築された悪いメンタルモデルだと思います。残念ながら、これはタブページ内にある追加のパワーを曇らせます。

私が理解した最初の説明は、@ crenateの回答からのものでした。これは、複数のデスクトップに相当するというものです。その点で見ると、デスクトップは2、3しか開いていませんが、それぞれのウィンドウ内で多数のGUIウィンドウが開いています。

他のエディター/ブラウザーと似ていると思います。

  1. タブのグループ化
  2. Sublime Textワークスペース(プロジェクトにある開いているファイルのリスト)

それらを見ると、CSSファイル、HTMLファイル、JSファイルなどのファイル(バッファー)のセットをさまざまなタブページに簡単にグループ化できるというそれらの能力を理解できます。それは実際にはかなり素晴らしいです。

混乱するその他の説明

ビューポート

これは私には意味がありません。辞書用語定義されているビューポートですが、:help windowドキュメントでVimウィンドウに言及しているだけです。ビューポートは、Sublime Text、Visual Studio、Atom、Notepad ++などのエディターに関して聞いたことのある用語ではありません。実際、私はタブページを使い始めるまで、Vimについてそれについて聞いたことがありませんでした。

複数のデスクトップのようにタブページを表示する場合、デスクトップを単一のウィンドウとして参照するのは奇妙に思えます。

ワークスペース

これはおそらくもっと理にかなっています、辞書の定義は次のとおりです:

一時的に使用するためのメモリストレージ機能。

つまり、バッファのグループを格納する場所のようなものです。

私は当初、プロジェクトで開いているすべてのファイルのリストであるSublime Textのワークスペースの概念のように聞こえませんでした。

開いているファイルや各ファイルへの変更など、ユーザー固有のデータを含む崇高なワークスペースファイル。

しかし、それについてもっと考えると、これは実際には同意します。VimのタブページをSublime Textプロジェクトのように考えると、各プロジェクトで開いているファイルが1つだけで、プロジェクトを切り替え続けるのは奇妙に思えます。したがって、タブページを使用して1つのファイルのみを開くのはなぜ奇妙なことでしょう。

窓のコレクション

:help windowタブページこの方法を指します。さらに、他の多くの回答も同じ概念を使用しています。しかし、vimのウィンドウが何であるかについて頭に浮かぶまでは、砂の上に城を建てるなど、あまり役に立ちません。

上記で言及したように、vimウィンドウはビューポートと同じで、このlinux.comの記事で非常によく説明されているクワイエットです。

Vimの本当に便利な機能は、1つ以上のファイル間で表示可能領域を分割する機能、またはウィンドウを分割して同じファイルの2ビットをより簡単に表示する機能です。Vimのドキュメントでは、これをビューポートまたはウィンドウと呼びます。

:helpトピックを使用するかF1キーを押してVimのヘルプ機能を使用したことがあれば、この機能に慣れているかもしれません。ヘルプを入力すると、Vimはビューポートを分割し、上部のビューポートでヘルプドキュメントを開き、下部のビューポートでドキュメントを開いたままにします。

タブページがバッファのコレクションではなくウィンドウのコレクションとして参照されるのは奇妙です。しかし、私はあなたが2つの別々のタブページを開いて、それぞれが同じバッファを指している複数のウィンドウで開くことができると思います、少なくとも私はこれまで理解しています。


1
ついにVimをフルタイムで使い続けた堅実な年の後に、複数のタブページを使用したいというケースに遭遇しました。現在、他のエディターでタブを使用するので、バッファーは完全に機能します。しかし、大きなモニターを使用して、私は3〜4個の異なるバッファーの全体を比較していました。次に、同僚から、コードベースの別の場所でコードを検索するように依頼されました。比較ウィンドウのセットを失うのではなく、新しいタブページを作成するだけで、通常のVimを使用する場合と同じように個別の検索を行うことができ、完了したらタブページを閉じて、最初のセットに戻ることができます。
icc97 2018年

4

:helpタブを見ると、vimはあなたがやっているように働きたいように見えません...

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

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

multi-gnome-terminalのように、タブをサポートするターミナルを使用し、各ターミナルタブでvimインスタンスを実行することで、必要な効果を得ることができます。完璧ではないけど...


タブ間を移動するのが困難になるだけでなく、基本的に2つの異なるターミナル/シェルであるため、ヤンクされたテキストをターミナルタブ間で共有できないという問題がありました
puk

@puk:YankRing vimプラグインを試してください。ヤンクしたテキストをファイルに保存するため、vimインスタンス間で共有できます。
pixelastic

@Pixelasticシステムクリップボードにヤンクするための適切なソリューションをここで見つけました。また、Vimは1つのインスタンスで最適に動作します。私はそれが私が望んでいたことをするのをやめ、vimを適切に使用する方法を学びました:-) stackoverflow.com/a/8757876/654789
puk

@puk:ありがとう、システムクリップボードを使用すると、vimインスタンス間で共有することもできるとは思いませんでした:)
pixelastic

4
  • .vimrcでgfを使用した場合と同様に、通常はバッファーを操作するコマンドをタブを操作するためにマップできます。

    map gf :tabe <cfile><CR>
    

    [^でも同じことができると思います

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


<c-w>gfカーソルの下のファイル名を新しいタブで開きます
Peter Rincker

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を使用すると、上部にタブバーはありませんが、一方で画面のスペースを節約できます。さらに、開いているファイル/バッファーの数を無制限にでき、バッファーリストを検索できます...


2

バッファをタブのように機能させたい場合は、tablineプラグインをチェックしてください

これは単一のウィンドウを使用し、上部に線を追加してタブをシミュレートします(バッファーのリストを表示するだけです)。これは、タブがGVimでのみサポートされていて、コマンドラインvimではサポートされていなかった昔のことです。バッファでのみ動作しているため、すべてが残りのvimとうまく統合されます。

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