Zamknąć plik bez wychodzenia z aplikacji VIM?

258

Używam poleceń :ei :wdo edycji i zapisu pliku. Nie jestem pewien, czy istnieje polecenie „zamknij”, aby zamknąć bieżący plik bez opuszczania Vima?

Wiem, że :qpolecenia można użyć do zamknięcia pliku, ale jeśli jest to ostatni plik, Vim również jest zamknięty; Właściwie w Mac OS MacVim się kończy. Tylko okno Vima jest zamknięte i mógłbym użyć Control- Naby ponownie otworzyć puste okno Vima. Chciałbym, aby Vim pozostał otwarty z pustym ekranem.

David.Chu.ca
źródło

Odpowiedzi:

343

Spowoduje to usunięcie bufora (co oznacza zamknięcie pliku)

:bd 
Vinko Vrsalovic
źródło
6
Twoja jest lepsza niż moja, jeśli chodzi o to, o co poprosił OP, chociaż wolę: na nowo, ponieważ lubię mieć bufor na liście buforów. :)
Rytmis
2
Kiedy to robię, vim pokazuje pierwszy bufor, ale nadal mogę uzyskać do niego dostęp
Martin Andersson
18
@ Martin, aby całkowicie usunąć bufor, użyj : bw
sebnow
43

Jak już wspomniano, szukasz :bd, jednak nie usuwa to całkowicie bufora, jest nadal dostępne:

: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

Możesz zamiast tego chcieć, :bwktóry całkowicie go usuwa.

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

Nie wiedziałam, że :bwmnie denerwowała przez dłuższy czas.

sebnow
źródło
3
Pamiętaj tylko, że pomoc VIM mówi o tym: :bw„Nie używaj tego, dopóki nie wiesz, co robisz”.
mato
22

Jeśli masz wiele podzielonych okien w oknie Vima, to :bdzamyka okno podziału bieżącego pliku, więc chciałbym użyć czegoś nieco bardziej zaawansowanego:

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
źródło
12
Co teraz robi ten fragment?
dolzenko,
1
Prawdopodobnie chcesz, aby <CR> po wywołaniach faktycznie wykonał polecenie.
dma,
2
@dolzenko odwzorowuje „fc” i „fq” w trybie normalnym, aby opcjonalnie zapisać bieżący bufor, a następnie przełączyć na nowy bufor przed usunięciem oryginału. Pozwala to zachować wszelkie skonfigurowane podziały.
dma,
To dobry pomysł. Kiedy jednak próbuję, pojawia się następujący komunikat o błędzie: „Nie można przedefiniować funkcji CleanClose: Jest w użyciu”
jononomo
2
Nie mapuj ponownie „f”. . . „f” jest w rzeczywistości bardzo przydatne. Dzięki temu mapowaniu nigdy nie można „znaleźć” do przodu dla „c” lub „q”.
tandrewnichols
17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Opróżnij bufor [N] (domyślnie: bieżący bufor) i usuń go
                lista buforów. Jeśli bufor został zmieniony, nie powiedzie się,
                chyba że podano [!], w którym to przypadku zmiany zostaną utracone.
                Plik pozostaje niezmieniony. Wszystkie okna dla tego bufora są
                Zamknięte. Jeśli bufor [N] jest bieżącym buforem, inny bufor
                zamiast tego wyświetli się. To jest najnowszy wpis w
                lista skoków wskazująca na załadowany bufor.
                W rzeczywistości bufor nie jest całkowicie usuwany, jest usuwany
                z listy buforów | unlisted-buffer | i wartości opcji,
                zmienne i odwzorowania / skróty dla bufora są
                wyczyszczone.
efemeryczny
źródło
9

Jeśli już zapisałeś ostatni plik, to :enewjest to twój przyjaciel ( :enew!jeśli nie chcesz zapisać ostatniego pliku). Zauważ, że oryginalny plik nadal będzie na twojej liście buforów (ten dostępny przez :ls).

Rytmis
źródło
6

Jeśli zmodyfikujesz plik i chcesz go zamknąć bez wychodzenia z Vima i bez zapisywania, wpisz :bd!.

pablofiumara
źródło
3

:bdmożna zmapować. I mapować go F4, Shift- F4jeśli muszę przymusowym zamknięciu z powodu jakiejś zmiany już nie ma.

wbogacz
źródło
2

Bufkill.vim Wtyczka dodaje BDitd., Aby usunąć bufor bez zamykania żadnych podziałów (a bd) by w spokoju.

niebieskawy
źródło
1

Wstaw następujące pliki do pliku .vimrc, a po naciśnięciu F4spowoduje zamknięcie bieżącego pliku.

:map <F4> :bd<CR>
Stryker
źródło
0

Spójrz na wtyczkę Butane, aby zachować układ okna podczas zamykania bufora.

Gary Willoughby
źródło