Tengo una horda de buffers abiertos en vim, con solo algunos de ellos abiertos en ventanas divididas o en otras pestañas. ¿Hay alguna manera de cerrar todas las que están visibles actualmente en una de esas divisiones o pestañas?¿Cómo cierro todos los almacenamientos intermedios que no se muestran en una ventana en vim?
Respuesta
Aquí es una solución alternativa que puede caer en su .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
Uso :call Wipeout()
.
¿Esto elimina los búferes modificados? –
la respuesta por atomicules funciona, esta elimina búferes en pestañas y parece tener un comportamiento extraño. –
Cuidado: 'Wipeout()' considera que las ventanas en otras pestañas (pestañas que no son visibles actualmente) son invisibles. – emallove
Agregue esto a su .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
Entonces usted puede hacer esto para cerrar tampones ocultos:
:call CloseHiddenBuffers()
(Es probable que desea enlazar una tecla o un comando a ella .)
actualización:
Aquí' s una versión actualizada para admitir páginas de pestañas. (No utilizo páginas con pestañas, así que no me había dado cuenta de que bufwinnr solo funciona para Windows en la página actual).
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
Pude haber formulado mi pregunta de manera incorrecta-I ' Estoy tratando de limpiar la salida de ': ls' y esta función no parece hacer eso. –
¿Fue por la falta de soporte de página de pestañas u otra cosa? He agregado una versión que admite páginas con pestañas, más arriba. –
Esto todavía no funciona para mí. –
Sé por qué la segunda secuencia de comandos no funciona correctamente.
Esto se debe a la función bufloaded() que debe ser bufexits()!
De hecho, no se carga un búfer para eliminar. Solo eliminar esta condición está bien, pero advierte cuando estamos tratando de eliminar un buffer no utilizado, así que tenemos que usar bufexists (b).
La solución final es la siguiente:
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
Gracias a ti.
Si "bufloaded (b)" es falso para los búferes que queremos cerrar, ¿por qué no simplemente "if! Bufloaded (b)"? – derenio
Esto hizo el truco, y me gusta bastante: ¡Wipeout muy pegadizo! -nargs =? Wipeout llama CloseHiddenBuffers() ' – expelledboy
Otra visión más de esto. Usando el ejemplo dado en la ayuda de Vim para tabpagebuflist()
para obtener una lista de los buffers que aparecen en una pestaña o ventana. Tengo el siguiente en mi .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()
Esto rompe CommandT. Obtengo "Vim :: DeletedBufferError: intento de referirme al búfer eliminado" la primera vez que activo CommandT después de ejecutar Bdi. La próxima vez que pruebo la combinación de teclas de CommandTs, no pasa nada y varias de mis otras combinaciones de teclas también dejan de funcionar. – bobpaul
@bobpaul No uso CommandT, pero podría intentar usar 'bdelete' en lugar de' bwipeout' en la función. Eso podría molestar a CommandT menos. – atomicules
Hola, atomicules, estoy intentando tu función, y me sale un montón de errores como este: http://trusktr.io:7777/isowiyirid.rb. ¿Algunas ideas? – trusktr
Hay un pluginque hace exactamente esto y un poco más!
Salida close-buffers.vim
- 1. vim - ¿Cómo puedo buscar almacenamientos intermedios?
- 2. ¿Cómo administrar eficazmente pestañas/almacenamientos intermedios en vim?
- 3. No se pueden cerrar muchos almacenamientos intermedios con un comando en Vim
- 4. escribiendo directamente en los almacenamientos intermedios internos std :: string
- 5. ¿Cómo cierro una ventana abierta automáticamente en Emacs?
- 6. almacenamientos intermedios nodejs vs matrices tipadas
- 7. Eliminando todos los búferes vacíos en VIM
- 8. Evitar que Emacs pregunte "existen almacenamientos intermedios modificados; ¿salir de todos modos?"
- 9. ¿Cuál usar - memmove() o memcpy() - cuando los almacenamientos intermedios no se superponen?
- 10. ¿Cómo se muestran los resultados de phpcs en VIM?
- 11. Display Vim comandos intermedios
- 12. Emacs: ¿Cómo puedo usar una lista de guardado para restaurar los almacenamientos intermedios del bloqueo?
- 13. VS2010 - Los guiones se muestran en todos los espacios
- 14. comparar almacenamientos intermedios tan rápido como sea posible
- 15. Los punteros y los almacenamientos intermedios de tamaño fijo solo se pueden usar en un contexto inseguro
- 16. Cómo encontrar rápidamente el archivo en el espacio de trabajo/cambiar entre almacenamientos intermedios/etc. en Eclipse?
- 17. vim: buscar sustituir más de todos los buffers de escritura
- 18. Caracteres hebreos que no se muestran en una plantilla HTML5
- 19. En Mongo, ¿cómo se muestran los índices de una colección?
- 20. ¿Cómo se muestran los campos en una tabla en Oracle?
- 21. vim - deshacer en todos los tampones/ventanas/abrir archivos etc
- 22. WPF: ¿Cómo recorro todos los controles en una ventana?
- 23. Aplicar una función a todos los buffers en emacs
- 24. Ejecutar una macro en todos los buffers en vim
- 25. Imágenes precargadas que no se muestran en Chrome
- 26. vim - ¿cómo cerrar todos los buffers en la pestaña actual?
- 27. Vim: crear marcas en todos los archivos?
- 28. Menú en Fragmentos que no muestran
- 29. Los modelos registrados no se muestran en el administrador
- 30. Seleccionar opciones que no se muestran en IE
Como referencia, he encontrado esta [hilo Yahoo Vim Grupo] (http://tech.groups.yahoo.com/group/vim/message/56425) antes de que me encontré con este SO Q & A. Las respuestas aquí son mejores ya que tratan con páginas de pestañas. – atomicules
Artem Nezvigin ha adaptado la miríada de soluciones a continuación en un complemento, [wipeout.vim] (http://www.vim.org/scripts/script.php?script_id=4882) –