Po prostu umieść go w swoim .vim/pluginkatalogu, a następnie użyj :BufOnlypolecenia, aby zamknąć wszystkie bufory oprócz aktywnego. Możesz również zmapować go w dowolnym miejscu w swoim .vimrc.
Możesz chcieć zamknąć NERDTree przed zrobieniem tego, aby zapobiec bdzamknięciu samego polecenia vim; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>.
lvarayut
11
Dokumentacja ostrzega, że argument :bufdo„nie wolno usuwać buforów ani dodawać buforów do listy buforów”. Więc jeśli to rozwiązanie działa, działa przez przypadek… i często nie działa dla mnie (przełącza się na inny bufor).
wtapia się w kwietniu
10
To zamyka dla mnie wszystkie bufory, czego nie zadają pytania. (MacVim wersja 8.0.1207)
Michael Leonard,
1
To polecenie zamyka wszystkie bufory. Jak mogę pozostawić bieżącą otwartą?
To miła odpowiedź. Sprawia, że BufOnly czuje się trochę przesadnie (mam na myśli całą wtyczkę?), Chyba że używasz funkcji przekazywania argumentów BufOnly. Wszystko, co chcę naprawdę zrobić, to:%bd|e#
shmup
41
@jorgeh %bd= usuń wszystkie bufory. e#= otwórz ostatni bufor do edycji. Rura pomiędzy wykonuje tylko jedno polecenie po drugim.
OldTimeGuitarGuy
20
@Jared Możesz użyć, %bd|e#|bd#aby usunąć utworzony [No Name]bufor.
kshenoy
12
Wspaniale. Tutaj masz jedyną rzecz, dla której kiedykolwiek użyłem wtyczki BufOnly, destylowaną do jednego polecenia:command! BufOnly silent! execute "%bd|e#|bd#"
shmup
4
@Finn musisz uciec |:map <leader>o :%bd\|e#<cr>
Halil Özgür
57
Jeśli nie obchodzi Cię obecna, łatwiej jest zrobić coś takiego (nie wymaga skryptu):
Podczas korzystania z tego polecenia napotkałem problemy z włączeniem NERDTree. Polecam za pomocą wtyczki BufOnly.vim, jak wspomniano w @VoY.
moeabdol
1
Zrobiłem następujące mapowanie, które odpowiada za usunięcie bufora NERDTree:nnoremap <leader>bd :%bd | NERDTree<cr>
Uri
5
Używałem tego przez długi czas, ale teraz dostaję, E16: Invalid rangeponieważ niektóre bufory z tego zakresu faktycznie nie istnieją. Do niedawna to ignorowało.
Jon
3
@Jon Sprawdź :lsnajwiększy bufor, który faktycznie masz otwarty, i ustaw na niego swój zakres (tzn. Jeśli twój najwyższy bufor wynosi 22, to :1,22bd). Dostałem ten sam błąd, dopóki tego nie zrobiłem.
Nairou,
51
robię to
:w | %bd | e#
Moje ulubione, jeśli chcę tylko, aby mój bieżący bufor otwierał i zamykał wszystkie pozostałe.
Jak to działa: najpierw napisz zmiany w bieżącym buforze, następnie zamknij wszystkie otwarte bufory, a następnie ponownie otwórz bufor, w którym aktualnie byłem. W Vimie |łączy wykonywanie poleceń. Jeśli twój bufor jest aktualny, powyższe można skrócić:%bd | e#
Przeważnie działa dobrze. ale czasami %nie może działać jak wszystkie selektory. Czy mógłbyś coś zgadnąć?
Jinyoung Kim,
@JinyoungKim (z [1]) W poleceniu „:% bd” zakres „%” zostanie zastąpiony początkowymi i końcowymi numerami wierszy w bieżącym buforze. Zamiast używać „%” jako zakresu, należy podać liczby dla zakresu. Na przykład, aby usunąć wszystkie bufory, możesz użyć polecenia „: 1,9999bd” [1] vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl#8.8
iamnotsam
Właśnie sprawdziłem dokument. Zatem zakres „%” zależy od wielu bieżących linii pliku?
Jinyoung Kim,
2
Znalazłem wbudowaną funkcję, bufnr("$")która zwraca ostatni numer bufora. ale nie mam pomysłu na interpolację ciągów znaków, gdy używam w ten sposób :1,bufnr("$")bd. Może .. najlepszym rozwiązaniem byłoby :1,9999bd.
Jinyoung Kim,
2
:help :bdpokazuje :%bdelete " delete all buffers. To %jest dokładnie to, czego chcesz. Używam wariantu twojego rozwiązania: :%bd<CR><C-O>:bd#<CR>spowoduje to usunięcie wszystkich buforów, następnie użyj, <C-O>aby przywrócić pozycję w bieżącym pliku, a następnie, :bd#aby usunąć nienazwany bufor. Spowoduje to zamknięcie wszystkich buforów i pozostanie w tej samej lokalizacji w pliku.
Alejandro
26
Opierając się na odpowiedzi juananruiz.
Następnie wprowadź niewielką zmianę w buforze, który chcesz zachować
:1,1000bd
Polecenie bd(usuwanie bufora) nie usuwa buforów z niezapisanymi zmianami. W ten sposób możesz zachować bieżący (zmieniony) plik na liście buforów.
Edycja: Zauważ, że spowoduje to również usunięcie Twojego NERDTreeBuffer. Możesz go odzyskać za pomocą: NERDTree
Zauważyłem, że wznawiając sesje vima, które przywracają bufory, nie byłem w stanie usunąć buforów przy użyciu powyższego. Zamiast tego musiałem użyć:%bd|e#|bd#
shmup
Najlepsze rozwiązanie Dodałem polecenie, aby ponownie otworzyć NERDTreenmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Oto co robię. Lubię więc utrzymywać pozycję kursora po usunięciu wszystkich buforów, a większość powyższych rozwiązań po prostu ignoruje ten fakt. Myślę też, że ponowne mapowanie polecenia jest lepsze niż wpisanie go, więc tutaj używam <leader>bddo usuwania wszystkich buforów i powrotu do pierwotnej pozycji kursora.
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd = usuń wszystkie bufory.
e# = otwórz ostatni bufor do edycji (który to bufor pracuję).
bd#aby usunąć bufor [Bez nazwy], który jest tworzony podczas używania %bd.
Rura pomiędzy wykonuje tylko jedno polecenie po drugim. Musisz go uciec, używając\|
Naprawdę nie ma powodu, aby mieć bdqmapowanie, które zamyka wszystkie bufory i wychodzi z vima :q!, kiedy zamiast tego możesz po prostu użyć :qa!. Chyba że coś
Odpowiedzi:
Możesz użyć tego skryptu z vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
Po prostu umieść go w swoim
.vim/plugin
katalogu, a następnie użyj:BufOnly
polecenia, aby zamknąć wszystkie bufory oprócz aktywnego. Możesz również zmapować go w dowolnym miejscu w swoim.vimrc
.Źródło w Github (przez vim-scripts mirror): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
źródło
Spróbuj tego
bufdo uruchamia polecenie dla wszystkich buforów
http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers
źródło
bd
zamknięciu samego polecenia vim;nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
.:bufdo
„nie wolno usuwać buforów ani dodawać buforów do listy buforów”. Więc jeśli to rozwiązanie działa, działa przez przypadek… i często nie działa dla mnie (przełącza się na inny bufor).Byłem w stanie zrobić to tak łatwo:
źródło
:%bd|e#
%bd
= usuń wszystkie bufory.e#
= otwórz ostatni bufor do edycji. Rura pomiędzy wykonuje tylko jedno polecenie po drugim.%bd|e#|bd#
aby usunąć utworzony[No Name]
bufor.command! BufOnly silent! execute "%bd|e#|bd#"
|
:map <leader>o :%bd\|e#<cr>
Jeśli nie obchodzi Cię obecna, łatwiej jest zrobić coś takiego (nie wymaga skryptu):
źródło
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid range
ponieważ niektóre bufory z tego zakresu faktycznie nie istnieją. Do niedawna to ignorowało.:ls
największy bufor, który faktycznie masz otwarty, i ustaw na niego swój zakres (tzn. Jeśli twój najwyższy bufor wynosi 22, to:1,22bd
). Dostałem ten sam błąd, dopóki tego nie zrobiłem.robię to
Moje ulubione, jeśli chcę tylko, aby mój bieżący bufor otwierał i zamykał wszystkie pozostałe.
Jak to działa: najpierw napisz zmiany w bieżącym buforze, następnie zamknij wszystkie otwarte bufory, a następnie ponownie otwórz bufor, w którym aktualnie byłem. W Vimie
|
łączy wykonywanie poleceń. Jeśli twój bufor jest aktualny, powyższe można skrócić:%bd | e#
źródło
%
nie może działać jak wszystkie selektory. Czy mógłbyś coś zgadnąć?bufnr("$")
która zwraca ostatni numer bufora. ale nie mam pomysłu na interpolację ciągów znaków, gdy używam w ten sposób:1,bufnr("$")bd
. Może .. najlepszym rozwiązaniem byłoby:1,9999bd
.:help :bd
pokazuje:%bdelete " delete all buffers
. To%
jest dokładnie to, czego chcesz. Używam wariantu twojego rozwiązania::%bd<CR><C-O>:bd#<CR>
spowoduje to usunięcie wszystkich buforów, następnie użyj,<C-O>
aby przywrócić pozycję w bieżącym pliku, a następnie,:bd#
aby usunąć nienazwany bufor. Spowoduje to zamknięcie wszystkich buforów i pozostanie w tej samej lokalizacji w pliku.Opierając się na odpowiedzi juananruiz.
Następnie wprowadź niewielką zmianę w buforze, który chcesz zachować
:1,1000bd
Polecenie
bd
(usuwanie bufora) nie usuwa buforów z niezapisanymi zmianami. W ten sposób możesz zachować bieżący (zmieniony) plik na liście buforów.Edycja: Zauważ, że spowoduje to również usunięcie Twojego NERDTreeBuffer. Możesz go odzyskać za pomocą: NERDTree
źródło
set nohidden
ustawienia?Używając
i
źródło
Zamykanie wszystkich otwartych buforów:
Zamykanie wszystkich otwartych buforów oprócz bieżącego :
Dodaj tę funkcję
.vimrc
i wywołaj ją za pomocą:call CloseAllBuffersButCurrent()
.Mapa wygody:
źródło
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Umieszczam to w moim pliku .vimrc
następnie
leader + ca
(zamknij wszystko) zamknij wszystkie bufory oprócz bieżącego.Co to robi
: w - zapisz bieżący bufor
% bd - zamknij wszystkie bufory
e # - otwórz ostatnio edytowany plik
bd # - zamknij nienazwany bufor
źródło
Jest wtyczka, która robi dokładnie to i trochę więcej!
Sprawdź close-buffers.vim
źródło
Oto co robię. Lubię więc utrzymywać pozycję kursora po usunięciu wszystkich buforów, a większość powyższych rozwiązań po prostu ignoruje ten fakt. Myślę też, że ponowne mapowanie polecenia jest lepsze niż wpisanie go, więc tutaj używam
<leader>bd
do usuwania wszystkich buforów i powrotu do pierwotnej pozycji kursora.%bd
= usuń wszystkie bufory.e#
= otwórz ostatni bufor do edycji (który to bufor pracuję).bd#
aby usunąć bufor [Bez nazwy], który jest tworzony podczas używania%bd
.Rura pomiędzy wykonuje tylko jedno polecenie po drugim. Musisz go uciec, używając
\|
'"
= zachowaj moją pozycję kursora.źródło
Lubię
1,100bd
( sugerowane przez juananruiz ), który wydaje się działać dla mnie.Dodałem a
quit!
do mojego mapowania, aby mi daćTo zabija wszystkie bufory i wyłącza Vima, którego najbardziej szukałem.
źródło
bdq
mapowanie, które zamyka wszystkie bufory i wychodzi z vima:q!
, kiedy zamiast tego możesz po prostu użyć:qa!
. Chyba że cośA może po prostu:
(dzięki https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally )
źródło