VIMアプリケーションを終了せずにファイルを閉じますか?


258

:eおよび:wコマンドを使用して、ファイルの編集と書き込みを行います。Vimを終了せずに現在のファイルを閉じる「閉じる」コマンドがあるかどうかわかりません。

:qコマンドを使用してファイルを閉じることができることは知っていますが、それが最後のファイルである場合は、Vimも閉じられます。実際にはMac OSではMacVimは終了します。Vimウィンドウのみが閉じており、空のVimウィンドウを再び開くためにControl- Nを使用できました。Vimを空白の画面で開いたままにしておきたい。

回答:


343

これはバッファを削除します(これはファイルを閉じることを意味します)

:bd 

6
私はOPが求めたものよりもあなたのものよりも優れていますが、私は:enewを好む傾向があります。なぜなら、バッファリストにバッファを置くのが好きだからです。:)
リトミス2008年

2
これを行うと、vimは最初のバッファーを表示しますが、引き続きバッファーにアクセスできます
Martin Andersson

18
@Martin、バッファを完全に削除するには、:bw
sebnow

43

すでに述べたように、あなたはを探していますが:bd、これはバッファを完全に削除するわけではなく、まだアクセス可能です:

:e foo
:e bar
:buffers
  1 #h   "foo"                          line 1
  2 %a   "bar"                          line 1
Press ENTER or type command to continue
:bd 2
:buffers
  1 %a   "foo"                          line 1
Press ENTER or type command to continue
:b 2
2   bar

あなたは代わりにそれ:bwを完全に削除したいかもしれません。

:bw 2
:b 2 
E86: Buffer 2 does not exist

:bw長い間私を悩ませたことについて知らなかった。


3
VIMのヘルプがこれについて述べていることを覚えておいて:bwください-「何をしているのかを知らない限り、これを使わないでください」。
mato 2015年

23

Vimウィンドウに複数の分割ウィンドウがある場合:bdは、現在のファイルの分割ウィンドウを閉じます。そのため、もう少し高度なものを使用したいと思います。

map fc <Esc>:call CleanClose(1)

map fq <Esc>:call CleanClose(0)


function! CleanClose(tosave)
if (a:tosave == 1)
    w!
endif
let todelbufNr = bufnr("%")
let newbufNr = bufnr("#")
if ((newbufNr != -1) && (newbufNr != todelbufNr) && buflisted(newbufNr))
    exe "b".newbufNr
else
    bnext
endif

if (bufnr("%") == todelbufNr)
    new
endif
exe "bd".todelbufNr
endfunction

13
今、このスニペットは何をしますか?
dolzenko

1
おそらく、実際にコマンドを実行する呼び出しの後に<CR>が必要です。
dma

2
@dolzenkoは、通常モードで 'fc'と 'fq'をマップして、オプションで現在のバッファーを保存し、元のバッファーを削除する前に新しいバッファーに切り替えます。これにより、設定した分割が保持されます。
dma

良い考えのようです。試してみると、「関数CleanCloseを再定義できません:使用中です」というエラーメッセージが表示されます
jononomo

2
"f"を再マッピングしないでください。。。「f」は実際には非常に便利です。このマッピングでは、「c」または「q」を前方に「見つける」ことはできません。
tandrewnichols

17
:[N] bd [elete] [!] *:bd * *:bdel * *:bdelete * * E516 *
:bd [elete] [!] [N]
                バッファ[N](デフォルト:現在のバッファ)をアンロードし、バッファから削除します
                バッファリスト。バッファが変更された場合、これは失敗し、
                [!]が指定されている場合を除き、変更は失われます。
                ファイルは影響を受けません。このバッファーのウィンドウは
                閉まっている。バッファ[N]が現在のバッファの場合、別のバッファ
                代わりに表示されます。これはの最新のエントリです
                ロードされたバッファを指すジャンプリスト。
                実際には、バッファは完全には削除されず、削除されます
                バッファリストから| unlisted-buffer | およびオプション値、
                バッファの変数とマッピング/省略形は
                クリアされました。

9

最後のファイルをすでに保存している場合:enewは、友達に:enew!なります(最後のファイルを保存したくない場合)。元のファイルは引き続きバッファリストにあることに注意してください(を介してアクセスできるファイル:ls)。


6

ファイルを変更して、Vimを終了したり保存したりせずにファイルを閉じる場合は、と入力する必要があります:bd!


3

:bdマッピングすることができます。私はそれがためにマップF4Shift- F4私はので、私はもはやたいいくつかの変更の強制クローズする必要がある場合。


2

bufkill.vimのプラグインが追加されますBD(どのような分割を閉じることなくバッファを削除するには、などbdでしょうのみ)。


1

以下を.vimrcファイルに挿入し、を押すと、F4現在のファイルが閉じます。

:map <F4> :bd<CR>


-1

同じ問題があるのでプラグインを作成しました。このプラグインは、:qおよびその他のコマンドを置き換え、ウィンドウが閉じないようにします。

それでも問題が解決しない場合は、次のプラグインを使用してみてください。 https://github.com/taka-vagyok/prevent-win-closed.vim

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