Vimのマルチレイヤービュー(Windows、バッファー、タブ)は、少し混乱しました。表示を分割して(:sp)、各ウィンドウに表示する別のバッファーを選択するとします。バッファの1つを閉じたいが、ウィンドウを閉じたくない(閉じた後、リストの次のバッファまたは空のバッファを表示できるので、問題ではない)。これどうやってするの?
ありがとう。
DeleteCurBufferNotCloseWindow()
はうまく機能し、非常に読みやすいです。(免責事項:私の回答)
Vimのマルチレイヤービュー(Windows、バッファー、タブ)は、少し混乱しました。表示を分割して(:sp)、各ウィンドウに表示する別のバッファーを選択するとします。バッファの1つを閉じたいが、ウィンドウを閉じたくない(閉じた後、リストの次のバッファまたは空のバッファを表示できるので、問題ではない)。これどうやってするの?
ありがとう。
DeleteCurBufferNotCloseWindow()
はうまく機能し、非常に読みやすいです。(免責事項:私の回答)
回答:
これを行うためのスクリプトがVim wikiにあります。私はあなたが望むことをするビルトインがあるとは思いません。
私はこれを少しいじって、ついに思いつきました:
:bp | sp | bn | bd
キーマッピングのコピー/貼り付けバージョンは次のとおりです。
:bp<bar>sp<bar>bn<bar>bd<CR>
私はそれをかなりテストしました、そしてそれは様々な条件で一貫して働きます。最後のバッファで使用すると、新しい空のバッファが残ります。
これを.vimrcにスローします。
map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>
Vimを再起動するか:source ~/.vimrc
、変更を有効にします。次にバッファーを閉じたいときは、次のように入力します\q
(\
リーダーのキーの場合)
map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>
。再起動VIM、あなただけの入力バッファを閉じたい次の時間:\q
sp
)以外のウィンドウ分割構成。
sp
とvsp
。このような私の.vimrcエントリールックス:cnoremap bd bp<bar>vsp<bar>bn<bar>bd
今日これを検索して思いついた
:b#|bd#
現在のウィンドウを以前に開いていたバッファに変更し、切り替えたばかりのバッファを削除/非表示にします。
これには、少なくとも2つの既知のバッファが必要です。
別のウィンドウで現在のウィンドウに同じバッファが表示されている場合でも、分割は破棄されます。すべてのウィンドウを以前に開いていたバッファに変更することができます
:windo b#
同様の質問への回答に、以前のコマンドのマッピング(およびいくつかの落とし穴)について説明した詳細を追加しました。
:#b|#bd
上記のバッファコマンドとバッファ番号を交換するだけです。
:bn|bd#
か:bp|bd#
ではなく、あなたが最も最近アクセスバッファ(B#)と比べて、それぞれ、代わりに前または次のオープンのバッファに切り替えます。
nmap <leader>d :bprevious<CR>:bdelete #<CR>
1つのバッファが複数のウィンドウで開かれるまで、正常に機能します。もっと大きなスクリプトを使いたくないのであれば十分です。
編集:これは私が今使っているものです:
function! BufferDelete()
if &modified
echohl ErrorMsg
echomsg "No write since last change. Not closing buffer."
echohl NONE
else
let s:total_nr_buffers = len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
if s:total_nr_buffers == 1
bdelete
echo "Buffer deleted. Created new buffer."
else
bprevious
bdelete #
echo "Buffer deleted."
endif
endif
endfunction
nmap <leader>d :ene<CR>:bd #<CR>
これはあなたが探しているものだと思います
http://www.vim.org/htmldoc/windows.html#window-moving
これを試して:
使用してあなたのバッファIDを見てください
:buffers
そこにあるようなバッファのリストが表示されます
1 a.cpp
2 b.py
3 c.php
バッファからb.pyを削除したい場合
:2bw
バッファからすべてを削除/閉じる場合
:1,3bw
NERDTreeを使用する人向け。
このプラグインhttps://github.com/jistr/vim-nerdtree-tabsを使用してこれを修正し、ウィンドウを閉じることなく、唯一のbuff / file / tabを閉じることができます。
上記のプラグインをインストールした後、次のコードを.vimrcに追加します。
let g:nerdtree_tabs_autoclose=0
上記の変数の説明は次のとおりです。ウィンドウにウィンドウが1つしかなく、それがNERDTreeである場合は、現在のタブを閉じます(デフォルトは1)。
詳細はこちら:https : //github.com/jistr/vim-nerdtree-tabs#configuration
これを行うためのワンショットの方法はないと思いますが、バッファをリストする:enew
か:ls
、を使用して別のバッファに切り替えることができます:b [number]
。
ウィンドウに別のバッファを取得すると、ウィンドウ内の:bd #
前のバッファが削除され、現在のバッファがまだ存在しているため、ウィンドウは閉じられません。
以前使用していた:
:bp<bar>sp<bar>bn<bar>bd<CR>
しかし、それが私の窓を閉める特定の機会を見つけました。
最近、プロジェクトに取り組んでいるときはいつもこれを使用していて、.tmux.conf
.zshrc
仕事に戻る前にすばやく開く必要があることに気付きました。
この使用法では、私は次のことを行う方が良いと思います:
C-6
:bd#
前のバッファを削除するには(私はこのようにそれをマッピングしていますnnoremap <leader>d :bd#<CR>
)それは私が戻るバッファを制御することを可能にし、より自然に感じます。
これに対する私のお気に入りのソリューションは、bufkill.vimプラグイン(GitHub)です。さまざまな:b
-prefixコマンドの代替バージョンを提供し、対応するコマンドと同じように機能しますが、ウィンドウは開いたままにします。最後に表示されていたバッファが含まれていれば何でも表示します。前のバッファがなかった場合は空のバッファまたは新しいバッファを表示します。
ドキュメントから:
バッファをアンロード/削除/ワイプしたい場合は、以下を使用します: :bun /:bd /:bwもウィンドウを閉じる(vimコマンド)、または :BUN /:BD /:BWは、ウィンドウをそのままにします(このスクリプト)。
これは非常に読みやすいvimscript関数で、すべてのケースを適切に処理します。
:bd
(ウィンドウが1つだけの場合は、それを呼び出してください!)、
:enew
。buffer-list
、それに切り替え、そうでない場合はを介して次に進み:bn
ます。nnoremap <Leader> b:call DeleteCurBufferNotCloseWindow()<CR> func!DeleteCurBufferNotCloseWindow()アボート 変更された場合 echohl ErrorMsg echom "E89:最後の変更以降書き込みなし" echohlなし elseif winnr( '$')== 1 bd 他の "複数のウィンドウ oldbuf = bufnr( '%')にします oldwin = winnr()にします 一方、1 "oldbufを表示するすべてのウィンドウは開いたままになります buflisted(bufnr( '#'))の場合 b# そうしないと bn let curbuf = bufnr( '%') curbuf == oldbufの場合 enew "oldbufが唯一のバッファです。作成してください endif endif 勝つ= bufwinnr(oldbuf) 勝った場合== -1 ブレーク それ以外の場合は、「oldbufを表示する他のウィンドウがあります。 exec win 'wincmd w' endif 終わりに "oldbufを削除し、ウィンドウをoldwinに戻します exec oldbuf 'bd' exec oldwin 'wincmd w' endif endfunc