Vimのバッファーをどのように切り替えますか?


回答:


23

Wincent ColaiutaのCommand-T vimプラグインを2か月間使用しています。Wincentは、Cで高速である必要がある部分を記述しました。そして、そのファイルパターンマッチングロジックは、TextmateのCommand-Tよりも優れていると思います。スクリーンキャストをご覧ください。

VIM用のCommand-Tプラグインは、最小限のキーストロークでファイルを開くための非常に高速で直感的なメカニズムを提供します。これは、TextMateのCommand-Tにバインドされた[ファイルへ移動]ウィンドウに触発されたため、「Command-T」と呼ばれています。

ファイルは、パスに表示される文字を入力することによって選択され、特定の場所(たとえば、パス区切り記号の直後)に表示される文字にはより大きな重みを与える必要があることを認識するアルゴリズムによって順序付けされます。

より簡単なバッファ切り替えには、多くの役立つヒントが含まれています。以下を私の.vimrcに適合させました。これは、バッファー名の自動補完を行い、最も有用なバッファー切り替えコマンドを<Leader>および左側のホーム行キーにマップし、ステータス行に現在のバッファー番号を表示します:

"" Tab triggers buffer-name auto-completion
set wildchar=<Tab> wildmenu wildmode=full

let mapleader = ","

map <Leader>t :CommandT<Return>
map <Leader>a :bprev<Return>
map <Leader>s :bnext<Return>
map <Leader>d :bd<Return>
map <Leader>f :b 

"" Show the buffer number in the status line.
set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

私はMiniBufExplorerも使用します。これは、リストされた各バッファーのコンパクトなリストを独自の水平分割上部に提供します。


73

以前は、タブと複数のgvimインスタンスを組み合わせて使用​​し、関連するファイルのグループを各インスタンスのタブとして保持していました。1つのインスタンスでタブが多すぎない限り、タブバーには編集中の各ファイルの名前が一目でわかります。

その後、私はJamis BuckがTextMateからvimに切り替えた方法についての投稿を読み、いくつかの素晴らしいトリックを学びました。

  • Ctrl-w sおよびCtrl-w vで現在のウィンドウを分割
  • Ctrl-6キーを押すと、同じウィンドウ内の2つのバッファー間を行き来します。
  • 現在のディレクトリ内のファイルまたは現在開いているバッファのオートコンプリート検索を提供する素晴らしいfuzzyfinder.vim
  • Jamis独自のfuzzy_file_finderfuzzyfinder_textmateは、fuzzyfinderの動作を少し変更して、TextMateの同様の機能のように動作させます(私が知る限り、違いは、ファイル名の最初からではなく、どこにでも一致することです)。見るこのビデオをアクションでそれを見るために。

これで、最大化された1つのgvimインスタンスがあり、複数のウィンドウに分割して、一度に複数のファイルを表示できるようになりました。Ctrl-Fをfuzzyfinder_textmateにバインドしたので、(たとえば)Ctrl-Fを入力mod/usobすると、app / models / user_observer.rbが開きます。タブを気にすることはほとんどありません。

2010/08/07更新

fuzzyfinder_textmateは素晴らしいままですが、Caseyがコメントで指摘しているように、それはもはや維持されていません。また、大規模なプロジェクト(多数のディレクトリまたはファイル)で作業する場合、それ(またはfuzzyfinder.vim)が少し遅く不安定になるため、別の方法を探していました。

幸いなことに、Wincent ColaiutaCommand-Tプラグインの形で非常に優れた代替手段があるようです。これはfuzzyfinder_textmateと非常によく似ていますが(少し優れているわけではありません)、著しく高速です。見つかったファイルを分割または垂直分割で開くことができるなど、優れた機能もあります。それを指摘してくれたDavid Riversに感謝(そして賛成投票!)


はい、fuzzyfinderは私が望むものに非常によく適合しています。
Alexey Romanov

Jamisのfuzzyfinder_textmateがvimを完成させます。それは本当にコア機能になるはずです!
csexton 2008年

ジェイミはこのプロジェクトに取り組んでいないようです。たぶん、元の作者はこれらの機能を取り入れますか? weblog.jamisbuck.org/2009/1/28/...
cmcginty

サム、あなたが私にくれた小道具をありがとう(私の誕生日に!):D
デビッドリバーズ

14
ctrlp vimプラグイン(kien.github.com/ctrlp.vim)を試してみてください。fuzzyfinderが実装されていますが、便利な機能がたくさんあります:)
Philip

33

私は基本を使います-' :ls' + ' :bn' / ' :bp' + ' :b <part-of-name>'


8
:-)同じ文に「シンプル」と「 ':ls' + ':bn' / ':bp' + ':b <part-of-name>'」が表示されるとは思いもしませんでした。
paxdiablo 2008年

16
パックス、まだ見えない。:-)
csexton 2008年

これに加え:map <c-n> :bn<cr>:map <c-p> :bp<cr>C-nC-pなので、入力が高速で、繰り返し押すとバッファ間を循環できます。(私はそれらを元々の目的で使用したことはありません。)これは、ブラウザーのタブ間でC-PgUpC-PgDnまたはブラウザーのショートカットを循環するようなものです。
Tobia

他のほとんどのエディターではCtrl + Nが「新規ファイル」の標準であり、Ctrl + Pは貼り付けコマンドなので、ほとんどの人にとってこれらは本当に混乱します。Tim Popeのvim-unimpaired[b、前のバッファーと]b次のバッファーを提供します。さらに、]「次へ」と[「前へ」の概念を使用する他の多くのグッズ。
icc97 '19

31

ウィンドウを分割するには、「ctrl-w s」と「ctlr-w v」が好きです。次に、Ctrlキーを押しながら移動キー(h、j、k、l)をマップして、分割ウィンドウ間を移動します。

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

矢印キーに手をかざすのは面倒です。

次に、ctlr-tabを設定して、(他の多くの環境と同様に)現在のウィンドウのバッファーを切り替える:

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

これらは過去数年間、私にとってはかなりうまくいきましたが、vimには常にあなたが知ることができるより多くの秘密があります。


3
「代替ファイルに切り替える」というコメントは誤解を招く可能性があります。Vimにはすでに代替ファイルがあり、それは以前のファイルであり、現在の(%)ファイルと代替(#)ファイルをctrl-6を使用して簡単に切り替えることができるためです。
graywh 2009

10
また、hjklを指定した<Cw>はウィンドウを切り替えます。矢印キーは不要です。
graywh 2009

4
<CS-Tab>はRSIを求めています。<SJ>を:bp<SK>にマッピングしました:bn
puk

3
<SJ>の再マッピングは、(連結行に)一般的に使用されるため、通常モードでは不適切な選択のようです。
マイケルパーシー

18
nmap <Leader>bb :ls<CR>:buffer<Space>

誰も素敵なプラグインctrlp.vimについて言及していませ。このプラグインを使用すると、名前でバッファを検索できます。


私はそのマッピングが好きです!スマートで柔軟。
ivan


5
imap <A-1> <Esc>:tabn 1<CR>i
imap <A-2> <Esc>:tabn 2<CR>i
imap <A-3> <Esc>:tabn 3<CR>i
imap <A-4> <Esc>:tabn 4<CR>i
imap <A-5> <Esc>:tabn 5<CR>i
imap <A-6> <Esc>:tabn 6<CR>i
imap <A-7> <Esc>:tabn 7<CR>i
imap <A-8> <Esc>:tabn 8<CR>i
imap <A-9> <Esc>:tabn 9<CR>i

map <A-1> :tabn 1<CR>
map <A-2> :tabn 2<CR>
map <A-3> :tabn 3<CR>
map <A-4> :tabn 4<CR>
map <A-5> :tabn 5<CR>
map <A-6> :tabn 6<CR>
map <A-7> :tabn 7<CR>
map <A-8> :tabn 8<CR>
map <A-9> :tabn 9<CR>

1
Vimで最も興味深いのは、毎日何かを学ぶことができるということです。
Luc M

問題はタブではなくバッファについてです...しかし、最初に、または使用する代わりに使用する必要があります:tab sball:tabn:buffer
pera

5

私は最近、よりミニマルになりました。

私が使用]bしているバッファーを[b、障害のないユーザーから循環するには、https//github.com/tpope/vim-unimpaired

開いているバッファに直接ジャンプするには、でVimのタブ補完を使用し:bます。数文字で、1つまたは2つのタブで開いているバッファにアクセスできます。

オープンバッファーと同様に:e、相対パスと完全なタブで使用します。

また、:ls開いているバッファーを確認するため(およびそれらの変更されたステータスを確認するため)も時々使用します。

バッファーを取り除くには、バッファーを:bwワイプします。通常は一時的な分割を行い、レイアウトを維持するためにバッファーを変更します:bwが、アクティブウィンドウも閉じます。

私が試したすべてのminibufのことは私を困らせてしまい、ランダムなファイルを開くスマートマッチングのものが欲しくありません。何かを実際に参照する必要がある場合は、NERDtree(:e .)を使用します。

IDK、最近私はヤンクリングも落とし(それが台無しになるためxp)、レジスターを使い始めました、そして最近f/ tムーブメントが史上最高のものであることを決めました...


これはすべて素晴らしいアドバイスです。にマップ<leader>llしました:ls。また、それはあなたが持っていることを確認するために非常に便利ですset wildmenu、あなたの中で.vimrcのように、あなたがのためにすべての選択肢を思い付く小さなメニューを取得:b
icc97

2

優れたバッファーエクスプローラーであるbeは、他のアプリケーションで使用できることを望んでいるほど強い筋肉の記憶になっています。3つ以上のファイルをアクティブに編集する場合は、非常に高速です。


2

このHTML :: Masonプロジェクトを4年間使用して作業するために.vimrcを構築するのにかなりの時間を費やしてきたので、タブと分割ウィンドウの奇妙な組み合わせがあります。あなたの視聴を楽しむために:

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>

2

私はtselectbufferを使用しています。これは本当に高速で、bufexplorerとは異なり、ウィンドウ内のスペースを取りません。インクリメンタルサーチもあります。minibufexplorerを試してみたところ、バッファー内のナビゲーションが少し難しいことがわかりました。


ポインタをありがとう、今は両方を使用しています。BufExplorerのデフォルトである,be,bs,bv、私はにTSelectBufferをマッピングされました,bb
ブレイディトレーナー2014

2

私が使用するバッファをリストして切り替えるには:

nnoremap <Leader>l :ls<CR>:b<space>

バッファを切り替えるには:

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>

2

私は<S-J>andと<S-K>をマップしましたが:bp:bnファイルの数が10を超えているため使用していませんが、Gnomeターミナルの前後のタブにマップし<C-J><C-K>通常はそれぞれに対してvimの4つのインスタンスを実行しています私が取り組んでいる4つの異なるプロジェクト。次のバッファと前のバッファが、バッファリストの順序ではなく、作業中のバッファの履歴に移動することを本当に望んでいます。


2

tselectbufferを使用します。これは本当に高速で、bufexplorerとは異なり、ウィンドウ内のスペースを取りません。インクリメンタルサーチもあります。minibufexplorerを試してみたところ、バッファー内のナビゲーションが少し難しいことがわかりました。


0

^ W + w / ^ W + rでシンプルな:vsplitを使用し、Ctrl + Alt + PgUp / PgDownキーの組み合わせで:tabnewを使用します。


1
ここでザスラスが言っことに同意する必要があります。Vimのタブ(またはそのことについてはTabBarを備えたEmacs)は、通常のタブ付きインターフェースのようには機能しません。
Alexey Romanov

0

Vimセッションで複数のバッファーが開いている場合、バッファーとそれぞれのバッファー番号を追跡することが困難になる可能性があります。この場合、単純なマップを使用して、別のファイルへの切り替えを簡単に行うことができます。

:nnoremap(F5):buffers(CR):buffer(Space)

vim.wikia.com

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