バッファリストの再番号付け


29

しばらくプロジェクトに取り組んできた後、連続するバッファ番号の間に大きなギャップが見られるようになりました。これは、それらの間のバッファがさまざまな理由で消去されたためです。残念ながら、これにより、を入力し:lsた後、特定のバッファーにジャンプしたり、バッファーの範囲を選択したりするのが面倒になります。すべてのファイルを再度開かずに、開いているバッファーの番号を1から始めて番号を変更する方法はありますか?

回答:


21

いいえ(バッファを削除せずに)。

Vimでは、手動でのバッファー番号の割り当てや、一度開いたバッファーの並べ替えはサポートされていません。哲学は、各バッファーがそのバッファーの存続期間中固定される識別子を取得することです(のヘルプでは:ls、「各バッファーには一意の番号があります。その番号は変更されません...」)。

ただし、引数リストを使用できます。開いているすべてのバッファを引数リストに入れ、未処理のバッファをすべて削除してから、引数リストのすべてを開きます。次のコマンドでそれを実現できます。

  • :argdel * (既存の引数リストを削除します)
  • :bufdo argadd % (各バッファーについて、バッファーのパスをリストに追加します)
  • :1,1000bd (バッファー1から1000を削除します。おそらくこれを行うより良い方法があります)
  • :argdo e (各引数について、その引数を編集します)

これにより、以前のすべてのバッファーを削除したときにvimが開く余分な空のバッファーが残りますが、これは必要な機能の合理的な近似値です。:bd余分なバッファを追加できます。


1
あなたの答えはノーと言っていますが、それはうまくいくようです!
aharris88

(ファイルを再度開かない限りできないという意味で、「いいえ」を意味しました)。それは実際にはあなたのために1から番号を付け直しますか?最初に試してみたときに思ったのですが、今で番号が付け直されていないようです。

ええ、それは私のために番号を付け直します。
aharris88

ええ、私はただ愚かです、私は自分の間違いを見つけました。

「各バッファは、そのバッファの存続期間中固定されている識別子を取得します」実際にセッション!

14

「バッファ番号がおかしくなります」と教えてください!1日の終わりには、100を超えるバッファーを簡単に使用できます。しかし、幸運なことに、このアニメーションでわかるようにtab、バッファー名が完成しています。

ヒット:b se <Tab>

そのため、バッファの番号を変更できなくても、簡単にジャンプできます。

アニメーションから明らかかどうかはわかりませんが、「タブ補完」はコマンドラインのタブ補完とは異なります。「あいまいさを解決するタブ置換」に似ています。コマンドラインで私が入力しなければならなかっただろうことを意味しsctab、その後setabのvimここけどは「SE」の検索を行い、最初の(そして唯一の)試合に置き換えます。入力testtabした場合、「generate_test_data.py」とtab一致し、「scripts / setup_test_data.sh」と一致し、tab再び循環します。

ポイントは、単に:b <minimum amount of unambiguous characters>tabあなたが望む文書にジャンプするためにタイピングの習慣を身につけることができるということです。これは、「私のバッファは1:foo 2:bar 3:etc」だと覚えているよりも良いと思います。


7

vim-airlineを使用できます。このプラグインには、問題を解決する可能性のある動作があります。

Airlines.txtの470-479を参照してください

これはバッファ番号を変更しませんが、タブラインの行番号で左から右にバッファを選択できます。これは私の航空会社の設定です.vimrc

"set airline 
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#tab_nr_type = 1 " tab number
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline#extensions#tabline#formatter = 'default'
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#fnametruncate = 16
let g:airline#extensions#tabline#fnamecollapse = 2

let mapleader=","

let g:airline#extensions#tabline#buffer_idx_mode = 1

nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9

私のタブ行: 私のタブライン


すごい!大好きです:)
Blasco

質問への答えではありませんが、狂ったバッファ数の問題を修正します。buffer_numbersのみを表示することをお勧めします:switch_buffers_and_tabs=1およびbuffer_idx_mode=0
caligari

6

ドキュメントによると、バッファー番号は決して変更されません

    Each buffer has a unique number.  That number will not change,
    so you can always go to a specific buffer with ":buffer N" or
    "N CTRL-^", where N is the buffer number.

バッファの番号を変更する唯一の方法は、vimを再起動することです。


0

古い質問ですが、これはグーグル検索の一番上にあるので、今後の検索のためにここに残しておきます。ブルーノが示唆したように、バッファリストをサポートするファジーファインダーを使用する方法です。私は個人的にfzf-vimを使用し、推奨しています。:FZFBuffers次のようなコマンドを提供します:

ここに画像の説明を入力してください

バッファ番号は、必要に応じて左側に表示されますが、ファジーファインダを使用すると、再び使用する必要がなくなる場合があります。ファイル名の一部を覚えておけば、通常は2〜5回のキーストロークです。個人的には、このコマンドをキーストロークにマッピングしました。バッファーの切り替えは、ほとんど瞬時に行われます。

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