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.

Antworten:


343

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

:bd 

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.


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

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.

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).


6

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


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.



1

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

:map <F4> :bd<CR>


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.