Mam hordę buforów otwartych w vim, z których tylko kilka otwiera się w podzielonych oknach lub na innych zakładkach. Czy istnieje sposób, aby zamknąć wszystkie oprócz tych, które są obecnie widoczne w jednym z tych podziałów lub kart?Jak zamknąć wszystkie bufory, które nie są wyświetlane w oknie w vim?
Odpowiedz
Oto alternatywne rozwiązanie można upuścić w swojej .vimrc
:
function! Wipeout()
" list of *all* buffer numbers
let l:buffers = range(1, bufnr('$'))
" what tab page are we in?
let l:currentTab = tabpagenr()
try
" go through all tab pages
let l:tab = 0
while l:tab < tabpagenr('$')
let l:tab += 1
" go through all windows
let l:win = 0
while l:win < winnr('$')
let l:win += 1
" whatever buffer is in this window in this tab, remove it from
" l:buffers list
let l:thisbuf = winbufnr(l:win)
call remove(l:buffers, index(l:buffers, l:thisbuf))
endwhile
endwhile
" if there are any buffers left, delete them
if len(l:buffers)
execute 'bwipeout' join(l:buffers)
endif
finally
" go back to our original tab page
execute 'tabnext' l:currentTab
endtry
endfunction
Zastosowanie :call Wipeout()
.
Czy to powoduje usunięcie zmodyfikowanych buforów? –
Odpowiedź przez atomicules działa, ten usuwa bufory w kartach i wydaje się mieć dziwne zachowanie. –
Ostrożnie - "Wipeout()" uważa okna w innych zakładkach (zakładki, które nie są aktualnie widoczną zakładką), aby były niewidoczne. – emallove
Dodaj to do Twojego .vimrc:
function! CloseHiddenBuffers()
let i = 0
let n = bufnr('$')
while i < n
let i = i + 1
if bufloaded(i) && bufwinnr(i) < 0
exe 'bd ' . i
endif
endwhile
endfun
Następnie można zrobić, aby zamknąć ukryte bufory:
:call CloseHiddenBuffers()
(Prawdopodobnie będziesz chciał związać klucza lub polecenia do niego .)
Aktualizacja:
Tutaj s wersja zaktualizowana do obsługi stron kart. (Sam nie używam stron tabulacji, więc nie zdawałem sobie sprawy, że bufwinnr działa tylko dla okien na bieżącej stronie).
function! CloseHiddenBuffers()
" figure out which buffers are visible in any tab
let visible = {}
for t in range(1, tabpagenr('$'))
for b in tabpagebuflist(t)
let visible[b] = 1
endfor
endfor
" close any buffer that's loaded and not visible
for b in range(1, bufnr('$'))
if bufloaded(b) && !has_key(visible, b)
exe 'bd ' . b
endif
endfor
endfun
Mogłem źle sformułować moje pytanie. m próbuje wyczyścić wyjście ': ls', a ta funkcja nie wydaje się tego robić. –
Czy to był brak wsparcia na karcie, czy coś innego? Dodałem wersję obsługującą strony z kartami powyżej. –
To nadal nie działa dla mnie. –
Wiem, dlaczego drugi skrypt nie działa poprawnie.
Jest to spowodowane funkcją bufloaded(), która musi być bufexits()!
Rzeczywiście, bufor do usunięcia nie został załadowany! Po prostu usuń ten warunek jest w porządku, ale robi pewne ostrzeżenie, gdy próbujemy wymazać bufor, który nie jest używany, więc musimy użyć bufexists (b).
Ostateczne rozwiązanie jest następujące:
function! CloseHiddenBuffers()
" Tableau pour memoriser la visibilite des buffers
let visible = {}
" Pour chaque onglet...
for t in range(1, tabpagenr('$'))
" Et pour chacune de ses fenetres...
for b in tabpagebuflist(t)
" On indique que le buffer est visible.
let visible[b] = 1
endfor
endfor
" Pour chaque numero de buffer possible...
for b in range(1, bufnr('$'))
" Si b est un numero de buffer valide et qu'il n'est pas visible, on le
" supprime.
if bufexists(b) && !has_key(visible, b)
" On ferme donc tous les buffers qui ne valent pas 1 dans le tableau et qui
" sont pourtant charges en memoire.
execute 'bwipeout' b
endif
endfor
endfun
Dzięki tobie.
Jeśli "bufloaded (b)" ma wartość false dokładnie dla buforów, które chcemy zamknąć, dlaczego nie po prostu "if! Bufloaded (b)"? – derenio
Zrobiłem to, ale ja lubię: Wipeout bardzo chwytliwe 'polecenie! -nargs =? Wipeout call CloseHiddenBuffers() ' – expelledboy
Jeszcze inne podejście do tego. Korzystając z przykładu podanego w pomocy Vima dla tabpagebuflist()
, uzyskaj listę buforów wyświetlanych w karcie lub oknie. Mam poniżej w moim .vimrc
function! DeleteInactiveBufs()
"From tabpagebuflist() help, get a list of all buffers in all tabs
let tablist = []
for i in range(tabpagenr('$'))
call extend(tablist, tabpagebuflist(i + 1))
endfor
"Below originally inspired by Hara Krishna Dara and Keith Roberts
"http://tech.groups.yahoo.com/group/vim/message/56425
let nWipeouts = 0
for i in range(1, bufnr('$'))
if bufexists(i) && !getbufvar(i,"&mod") && index(tablist, i) == -1
"bufno exists AND isn't modified AND isn't in the list of buffers open in windows and tabs
silent exec 'bwipeout' i
let nWipeouts = nWipeouts + 1
endif
endfor
echomsg nWipeouts . ' buffer(s) wiped out'
endfunction
command! Bdi :call DeleteInactiveBufs()
To zepsuje CommandT. Otrzymuję "Vim :: DeletedBufferError: próba odwołania się do usuniętego bufora" przy pierwszym uruchomieniu CommandT po uruchomieniu Bdi. Następnym razem, gdy spróbuję keybinding CommandTs, nic się nie dzieje i kilka innych moich klawiszy przestaje działać. – bobpaul
@bobpaul Nie używam CommandT, ale możesz spróbować użyć 'bdelete' zamiast' bwipeout' w funkcji. To może bardziej zdenerwować CommandT. – atomicules
Cześć atomic, próbuję twojej funkcji, i dostaję masę błędów takich jak to: http://trusktr.io:7777/isowiyirid.rb. Jakieś pomysły? – trusktr
Jest wtyczki że robi dokładnie to i trochę więcej!
wyjazdu close-buffers.vim
- 1. vim - howto zamknij wszystkie bufory w bieżącej zakładce?
- 2. Pozycje menu, które nie są wyświetlane w pasku menu
- 3. Rekursywnie umieszczone składniki, które nie są wyświetlane
- 4. vim bufory copy-paste
- 5. wszystkie etykiety osi X nie są wyświetlane w 45 °
- 6. Jak uruchomić make w vim i otworzyć wyniki w podzielonym oknie?
- 7. znaleźć wszystkie, które są zerowe w stowarzyszeniu
- 8. Jak mogę otworzyć skorupę w oknie Vim?
- 9. Jak ustawić działanie kompilacji na pliku - zaawansowane właściwości nie są wyświetlane w oknie właściwości
- 10. Pokaż bufory vim pasujące do wzorca
- 11. Błędy ModelState nie są wyświetlane w widoku
- 12. Ikony Tortoisehg nie są wyświetlane
- 13. Mapy Google nie są wyświetlane
- 14. Jak zabić wszystkie wątki, które nie są głównym wątkiem?
- 15. Jak wysokie są liczby wyświetlane w X11?
- 16. twitter typeahead ajax wyniki nie wszystkie wyświetlane
- 17. Uwierzytelnianie interfejsu użytkownika jquery w modalnym oknie dialogowym - sugestie nie są wyświetlane?
- 18. Szyny form_tag nie są wyświetlane
- 19. Dane WatchKit nie są wyświetlane
- 20. Jak wyświetlić wszystkie zakładki w NERDTree VIM?
- 21. Pobierz wszystkie klawisze, które są wciśnięte
- 22. Eclipse RCP: Zadania równoległe wyświetlane w jednym oknie dialogowym postępu?
- 23. Jak automatycznie zamknąć okno szybkiej korekty podczas opuszczania pliku?
- 24. Jak znaleźć wszystkie wystąpienia zmiennej w Vim?
- 25. jak wybrać wszystkie i skopiować w vim?
- 26. Tworzenie niestandardowych asercji JUnit4, które nie są wyświetlane w ścieżce niepowodzenia
- 27. chińskie znaki nie są wyświetlane w PHP z bazy mysql
- 28. Jak zamknąć wszystkie Executory podczas zamykania aplikacji?
- 29. kolekcje nie są wyświetlane w bazie danych w Robomongo 0.8.5
- 30. Obrazy nie są wyświetlane w urządzeniu, ale w symulatorze
Dla porównania, stwierdzono, że ten gwint [Yahoo vim Group] (http://tech.groups.yahoo.com/group/vim/message/56425) zanim mogłaby się na to SO Pytania i odpowiedzi. Odpowiedzi są tutaj lepsze, ponieważ dotyczą stron kart. – atomicules
Artem Nezvigin zaadaptował miriadę poniżej do wtyczki, [wipeout.vim] (http://www.vim.org/scripts/script.php?script_id=4882) –