質問
Vim でタブを使用する機能を調べました ( :tabe
, :tabnew
, など)、隠しバッファ内の同じウィンドウで多数のファイルを開くという現在の習慣の代替として。
開いているすべての個別のファイルを常に独自のタブに表示したいと考えています。ただし、これを妨げるものがいくつかあります。これらを修正するにはどうすればよいですか:
次のようなコマンドを実行すると、
gf
そして^]
別のファイル内の場所にジャンプすると、ファイルは現在のタブの新しいバッファーで開きます。この種のコマンドすべてでファイルを新しいタブで開くか、ファイルが既に開いている場合はそのファイルを含む既存のタブに切り替える方法はありますか?バッファを切り替えるときに使用できるのは
:b <part of filename><tab>
そして、既存のバッファ内のファイルの名前が完成します。<part of filename>
ファイル名の先頭ではなく途中に置くこともできます。タブの切り替えに相当するものはありますか?
解決
やめて、やめて、やめて。
これは Vim のタブが使用されるように設計されたものではありません。実際、彼らは名前が間違っています。より適切な名前は、「ビューポート」または「レイアウト」です。これは、タブが何であるか、つまりウィンドウの異なるレイアウトであるためです。 全て 既存のバッファの。
Vim を 1 タブ == 1 バッファにしようとするのは無駄な作業です。Vim はそれを知りませんし、気にせず、すべてのコマンド、特にクイックフィックス バッファーを使用するコマンド (特に) でそれを尊重しません。:make
, :grep
, 、 そして :helpgrep
が思い浮かびます) は喜んでタブを無視しますが、それを止めるためにできることは何もありません。
その代わり:
:set hidden
このセットをまだ持っていない場合は、そうしてください。これにより、vim は地球上の他のすべての複数ファイル エディターと同じように動作します。ウィンドウのどこかに表示されない編集済みのバッファーが存在する可能性があります。- 使用
:bn
,:bp
,:b #
,:b name
, 、 そしてctrl-6
バッファーを切り替えます。好きctrl-6
自分自身 (単独では以前に使用したバッファに切り替わります、または#ctrl-6
バッファ番号に切り替えます#
). - 使用
:ls
バッファをリストするか、次のようなプラグインを使用します MiniBufExpl または BufExplorer.
他のヒント
ここのパーティーに少し遅れましたが、このリストに次のものが含まれていなかったことに驚きました。
:tab sball
- これにより、開いているバッファごとに新しいタブが開きます。
:help switchbuf
- これはバッファの切り替え動作を制御します。試してみてください。 :set switchbuf=usetab,newtab
. 。これは、バッファが開いている場合は既存のタブに切り替え、そうでない場合は新しいタブを作成することを意味します。
ヴィム :help window
「タブとバッファ」という混乱をうまく説明しています。
バッファはファイルのメモリ内テキストです。
ウィンドウは、バッファー上のビューポートです。
タブ ページはウィンドウの集合です。
複数のファイルを開くには、vim で次のコマンドを使用します。 バッファ. 。他のエディター (例:notepad++) これはタブで行われるため、vim のタブという名前は誤解を招く可能性があります。
ウィンドウズ ワークスペースを分割し、複数のファイル(バッファ)を一つの画面にまとめて表示することを目的としています。他のエディタでは、これは複数の GUI ウィンドウを開いてデスクトップ上で再配置することで実現できます。
最後に、この類推では vim の タブページ 複数のデスクトップ、つまりウィンドウの異なる再配置に対応します。
vim として help: tab-page
ファイルを一時的に編集したいが、ウィンドウやバッファの現在のレイアウトは何も変更したくない場合にタブ ページが使用できることを説明しています。このような場合、その特定のファイルを編集する目的のみに別のタブ ページを使用できます。
もちろん、多くのタブ ページまたはウィンドウで同じファイルを表示すると、同じ作業コピー (バッファ) が表示されることになることに注意してください。
ここでの他の回答のいくつかとは反対に、タブは好きなように使用できると言います。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
.
同じ問題に遭遇しました。タブをバッファーのように機能させたかったのですが、うまく実現できませんでした。私が最終的に落ち着いた解決策は、バッファをタブのように動作させることでした。
というプラグインを確認してください ミニバッファエクスプローラー, をインストールして構成すると、機能を失うことなく、実質的にタブと同じ方法でバッファを操作できるようになります。
これは、Vim に詳しくなく、他のテキスト エディター (私の場合は Sublime Text) を使用している人のための答えです。
これらの回答をすべて読みましたが、まだ明確ではありませんでした。十分に読んでいけば、理解できるようになりますが、質問の間を行ったり来たりするのに何時間もかかりました。
最初のことは、他の人が説明したように、次のとおりです。
タブページ, 、よく似ています タブ, 、これらはタブのように機能し、他のほとんどの GUI エディターのタブとよく似ていますが、違います。これは Vim に基づいて構築された悪いメンタル モデルだと思います。残念なことに、タブ ページ内で持つ特別な力が曇ってしまいます。
私が最初に理解した説明は、 @crenateさんの答え つまり、それらは複数のデスクトップに相当します。その点から見ると、開いているデスクトップは 2 つだけですが、それぞれのデスクトップ内で多数の GUI ウィンドウが開いていることになります。
他のエディタ/ブラウザと似ていると思います。
- タブのグループ化
- Sublime Text ワークスペース (例:プロジェクト内で開いているファイルのリスト)
このように見ると、ファイル (バッファ) のセットを簡単にグループ化できるというその威力がわかります。CSS ファイル、HTML ファイル、および JS ファイルを別のタブ ページに配置します。これは実際にはかなり素晴らしいことです。
混乱を招くその他の説明
ビューポート
これは私にとって意味がありません。ビューポートには、 定義された辞書用語, 、Vim ウィンドウについて言及しているのは、 :help window
博士。ビューポートという用語は、Sublime Text、Visual Studio、Atom、Notepad++ などのエディターに関して聞いたことはありません。実際、私はタブページを使い始めるまで、Vim についてそれについて聞いたことがありませんでした。
タブ ページを複数のデスクトップのように表示する場合、デスクトップを 1 つのウィンドウと呼ぶのは奇妙に思えます。
ワークスペース
おそらくこれはもっと理にかなっていますが、 辞書の定義 は:
一時的に使用するためのメモリストレージ機能。
つまり、バッファのグループを保存する場所のようなものです。
最初はそんな風には聞こえなかった Sublime Textのコンセプト プロジェクト内で開いているすべてのファイルのリストであるワークスペースの:
sublime-workspace ファイル。これには、開いているファイルや各ファイルへの変更など、ユーザー固有のデータが含まれます。
しかし、よく考えてみると、これは実際には一致しています。Vim タブ ページを Sublime Text プロジェクトのように考えると、各プロジェクトでファイルを 1 つだけ開いて、プロジェクト間を切り替え続けるのは奇妙に思えるでしょう。したがって、タブ ページを使用して 1 つのファイルだけを開くのは奇妙です。
窓のコレクション
の :help window
はこのようにタブページを指します。さらに、他の多くの回答でも同じ概念が使用されています。ただし、vim ウィンドウが何であるかを理解するまでは、砂の上に城を建てるようなもので、あまり役に立ちません。
上で言及したように、vim ウィンドウはビューポートと同じであり、この記事でうまく説明されています。 linux.com の記事:
Vim の非常に便利な機能は、表示可能な領域を 1 つまたは複数のファイル間で分割したり、ウィンドウを分割して同じファイルの 2 ビットをより簡単に表示したりできることです。Vim ドキュメントでは、これをビューポートまたはウィンドウと同じ意味で呼んでいます。
:help topic を使用するか F1 キーを押して Vim のヘルプ機能を使用したことがある場合は、この機能にすでに精通しているかもしれません。ヘルプを入力すると、Vim はビューポートを分割し、上部のビューポートでヘルプ ドキュメントを開き、ドキュメントは下部のビューポートで開いたままにします。
タブ ページがバッファのコレクションではなくウィンドウのコレクションとして参照されるのは奇妙に感じます。しかし、少なくともそれが私が今のところ理解していることですが、複数のウィンドウがすべて同じバッファを指している状態で 2 つの別々のタブ ページを開くことはできると思います。
見てください:ヘルプタブは、Vimがあなたのやり方で働きたいと思っているようには見えません...
バッファはタブ間で共有されるため、特定のタブにのみ表示されるように特定のバッファをロックすることはできないようです。
しかし、それは良い考えです。
おそらく、multi-gnome-terminal などのタブをサポートするターミナルを使用し、各ターミナル タブで vim インスタンスを実行することで、必要な効果を得ることができるでしょう。完璧ではありませんが...
.vimrc の gf で行ったように、通常はバッファーを操作するコマンドをタブを操作するようにマップできます。
map gf :tabe <cfile><CR>
あなたもきっと同じことができると思います[^
vim は (まだ) タブに対してこれをサポートしていないと思います。次のタブと前のタブに移動するには、それぞれ gt と gT を使用します。Ngt を使用することもできます。N はタブ番号です。ひとつ気になるのは、デフォルトではタブ行にタブ番号が表示されないことです。これを修正するために、末尾にいくつかの関数を追加しました。 私の .vimrc ファイル (長くてフォーマットが正しくなかったため、ここには貼り付けませんでした)。
タブのようなバッファを使用します。 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 を使用すると、上部にタブ バーがありませんが、その一方で、画面上のスペースが節約され、さらに、無限の数のファイル/バッファを開いて、バッファ リストを検索できます。
バッファをタブのように機能させたい場合は、 タブラインプラグイン.
これは 1 つのウィンドウを使用し、タブをシミュレートする行を上部に追加します (バッファーのリストを表示するだけです)。これは、タブが GVim でのみサポートされ、コマンド ライン vim ではサポートされていなかったずっと前に登場しました。バッファーのみで動作するため、すべてが vim の残りの部分とうまく統合されます。