Datei schließen, ohne die VIM-Anwendung zu beenden?

258

Ich verwende die :eund :wBefehle zu bearbeiten und eine Datei zu schreiben. Ich bin nicht sicher, ob es den Befehl "Schließen" gibt, um die aktuelle Datei zu schließen, ohne Vim zu verlassen.

Ich weiß, dass der :qBefehl zum Schließen einer Datei verwendet werden kann, aber wenn es sich um die letzte Datei handelt, wird auch Vim geschlossen. Unter Mac OS wird MacVim tatsächlich beendet. Nur das Vim-Fenster ist geschlossen und ich könnte Control- Nein leeres Vim-Fenster wieder öffnen. Ich möchte, dass Vim mit einem leeren Bildschirm geöffnet bleibt.

David.Chu.ca
quelle

Antworten:

343

Dies löscht den Puffer (der übersetzt, um die Datei zu schließen)

:bd 
Vinko Vrsalovic
quelle
6
Ihre ist besser als meine für das, was das OP verlangt hat, obwohl ich es eher bevorzuge: neu, weil ich den Puffer gerne in der Pufferliste habe. :)
Rytmis
2
Wenn ich das mache, zeigt vim den ersten Puffer, aber ich kann immer noch auf den Puffer zugreifen
Martin Andersson
18
@ Martin, um den Puffer vollständig zu löschen, verwenden Sie : bw
sebnow
43

Wie bereits erwähnt, suchen Sie :bd, aber dies entfernt den Puffer nicht vollständig, es ist immer noch zugänglich:

: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

Möglicherweise möchten Sie stattdessen, :bwwas es vollständig entfernt.

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

Ich wusste :bweine ganze Weile nichts davon.

sebnow
quelle
3
Denken Sie daran, dass die Hilfe von VIM Folgendes sagt :bw: "Verwenden Sie dies nur, wenn Sie wissen, was Sie tun."
Mato
23

Wenn Ihr Vim-Fenster mehrere geteilte Fenster enthält, wird :bddas geteilte Fenster der aktuellen Datei geschlossen, sodass ich etwas Fortgeschritteneres verwenden möchte:

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
Gowri
quelle
13
Was macht dieser Ausschnitt?
Dolzenko
1
Sie möchten wahrscheinlich, dass <CR> nach den Aufrufen den Befehl tatsächlich ausführt.
Dma
2
@dolzenko ordnet 'fc' und 'fq' im normalen Modus zu, um optional den aktuellen Puffer zu speichern, und wechselt dann zu einem neuen Puffer, bevor das Original gelöscht wird. Dadurch bleiben alle von Ihnen eingerichteten Splits erhalten.
Dma
Scheint eine gute Idee zu sein. Wenn ich es versuche, erhalte ich jedoch die folgende Fehlermeldung: "Funktion CleanClose kann nicht neu definiert werden: Sie wird verwendet"
jononomo
2
Ordne "f" nicht neu zu. . . "f" ist eigentlich super nützlich. Mit dieser Zuordnung können Sie niemals vorwärts für "c" oder "q" "finden".
Tandrewnichols
17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Entladen Sie den Puffer [N] (Standard: aktueller Puffer) und löschen Sie ihn aus
                die Pufferliste. Wenn der Puffer geändert wurde, schlägt dies fehl.
                es sei denn, wenn [!] angegeben ist, gehen in diesem Fall Änderungen verloren.
                Die Datei bleibt unberührt. Alle Fenster für diesen Puffer sind
                geschlossen. Wenn Puffer [N] der aktuelle Puffer ist, ein anderer Puffer
                wird stattdessen angezeigt. Dies ist der letzte Eintrag in
                die Sprungliste, die in einen geladenen Puffer zeigt.
                Tatsächlich wird der Puffer nicht vollständig gelöscht, sondern entfernt
                aus der Pufferliste | unlisted-buffer | und Optionswerte,
                Variablen und Zuordnungen / Abkürzungen für den Puffer sind
                gelöscht.
kurzlebig
quelle
9

Wenn Sie die letzte Datei bereits gespeichert haben, :enewist dies Ihr Freund ( :enew!wenn Sie die letzte Datei nicht speichern möchten). Beachten Sie, dass sich die Originaldatei weiterhin in Ihrer Pufferliste befindet (die, über die zugegriffen werden kann :ls).

Rytmis
quelle
6

Wenn Sie eine Datei ändern und schließen möchten, ohne Vim zu beenden und ohne zu speichern, sollten Sie Folgendes eingeben :bd!.

Pablofiumara
quelle
3

:bdkann zugeordnet werden. Ich ordne es zu F4, Shift- F4wenn ich wegen einer Änderung, die ich nicht mehr möchte, zwangsweise schließen muss.

wbogacz
quelle
2

Das Plugin bufkill.vim fügt BDusw. hinzu , um den Puffer zu löschen, ohne Splits (wie bd) allein zu schließen.

blau gefärbt
quelle
1

Fügen Sie Folgendes in Ihre .vimrc-Datei ein und durch Drücken von F4wird die aktuelle Datei geschlossen.

:map <F4> :bd<CR>
Stryker
quelle
0

Schauen Sie sich das Butan-Plugin an, um das Fensterlayout beim Schließen eines Puffers beizubehalten.

Gary Willoughby
quelle
-1

Ich habe das gleiche Problem, also habe ich das Plugin gemacht. Dieses Plugin ersetzt: q und andere Befehle und verhindert dann das Schließen des Fensters.

Wenn Sie immer noch Probleme haben, versuchen Sie bitte, das folgende Plugin zu verwenden. https://github.com/taka-vagyok/prevent-win-closed.vim

Takashi Kojima
quelle