rca para estereo conectar como amplificador amplificado vim

vim - estereo - buffer amplificado para auto



¿Cómo puedo cerrar un buffer sin cerrar la ventana? (13)

Las vistas de varios niveles de Vim (Windows, Buffers y Tabs) me dejaron un poco confundido. Digamos que dividí la pantalla (: sp) y luego seleccioné un buffer diferente para mostrar en cada ventana. Ahora quiero cerrar uno de los búferes, pero no quiero que se cierre la ventana (después del cierre puede mostrar el siguiente búfer en la lista o un búfer vacío, no importa). ¿Cómo puedo hacer esto?

Gracias.


Busqué esto hoy y se me ocurrió

:b#|bd#

que cambia la ventana actual al búfer abierto previamente y elimina / oculta el búfer del que acabas de desconectar.

Esto requiere al menos dos almacenamientos intermedios conocidos.

Si otra ventana, pero la actual muestra el mismo búfer, esto aún destruirá la división. Puede cambiar todas las ventanas al búfer abierto anteriormente con

:windo b#

Agregué más detalles sobre el antiguo comando discutiendo un mapeo (y algunos escollos) en una respuesta a una pregunta similar .


Creo que esto es lo que estás buscando

http://www.vim.org/htmldoc/windows.html#window-moving

Prueba esto:

Mira tu ID de buffer usando

:buffers

verás una lista de buffers allí como

1 a.cpp 2 b.py 3 c.php

si quieres eliminar b.py del búfer

:2bw

si desea eliminar / cerrar todo de los almacenamientos intermedios

:1,3bw



Me metí con esto un poco y finalmente se me ocurrió:

:bp | sp | bn | bd

Aquí está la versión de copiar / pegar para la asignación de teclas:

:bp<bar>sp<bar>bn<bar>bd<CR>

Lo he probado un poco y funciona de manera consistente en diversas condiciones. Cuando se utiliza en el último buffer, te dejará un nuevo buffer en blanco.

Tíralo en tu .vimrc:

map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>.

Reinicie Vim o simplemente :source ~/.vimrc para que los cambios surtan efecto. La próxima vez que quiera cerrar un buffer simplemente escriba: /q (si / es su clave de líder)


Mi solución favorita para esto es el plugin vim.org/scripts/script.php?script_id=1147 ( GitHub ). Proporciona versiones alternativas de varios comandos :b -prefix que funcionan igual que sus contrapartes, pero dejan la ventana abierta. Muestran el último búfer visible que contenía, o un búfer vacío / nuevo si no había un búfer anterior.

De la documentación:

When you want to unload/delete/wipe a buffer, use: :bun/:bd/:bw to close the window as well (vim command), or :BUN/:BD/:BW to leave the window(s) intact (this script).


No creo que haya una forma única de hacer esto, pero podrías hacer :enew o :ls para listar tus buffers y cambiar a uno diferente usando :b [number] .

Una vez que tenga un búfer diferente en la ventana :bd # eliminará el búfer anterior en la ventana, y dado que el búfer actual aún existe, la ventana no se cerrará.


Para ''cerrar'' una vista, use :hid[e] . Funciona si ha logrado dividir la ventana gráfica o ha abierto varios archivos. No puedes ocultar el último buffer en exhibición.

1 Sugerencia adicional que me ayudó: use :e ./path/to/file.work para abrir un archivo en la ventana :e ./path/to/file.work sin dividir la ventana.

PD A los dos días de vim todavía tengo problemas para encontrar los comandos de ayuda precisos. Con suerte, esto ayudará a otra persona a seguir trabajando hasta que realmente tenga tiempo para comprender a vim.


Para aquellos que usan NERDTree.

Arreglo esto usando este plugin https://github.com/jistr/vim-nerdtree-tabs y ahora puedo cerrar el único buff / file / tab sin cerrar la ventana.

Después de haber instalado el complemento anterior, coloque el siguiente código en mi .vimrc:

let g:nerdtree_tabs_autoclose=0

La descripción de la variable anterior es: Cerrar pestaña actual si solo hay una ventana en ella y es NERDTree (valor predeterminado 1)

Más información aquí: https://github.com/jistr/vim-nerdtree-tabs#configuration


Solía ​​usar :

:bp<bar>sp<bar>bn<bar>bd<CR>

Pero encontré ciertas ocasiones donde cerró mi ventana.

Recientemente noté que siempre uso esto cuando estoy trabajando en un proyecto y necesito abrir rápidamente mi .tmux.conf .zshrc antes de volver a trabajar.

Para este uso, me parece mejor:

  • volver al buffer en el que estaba trabajando anteriormente con C-6
  • tipo :bd# para borrar el buffer anterior (lo he mapeado así: nnoremap <leader>d :bd#<CR> )

Me permite controlar el búfer al que vuelvo y me siento más natural.


haría

:enew

¿Haz lo que quieras? editará un nuevo buffer sin nombre en la ventana actual, dejando el archivo existente abierto en cualquier otra ventana.


use ": bd" como un comando.


Aquí hay una función vimscript muy legible, que maneja bien todos los casos ,

  • comportarse de forma similar al built-in :bd (si solo hay una ventana, ¡solo invoca!),
    • emita una advertencia y no haga nada si modifica el búfer.
    • si no hay otro buffer, crea uno, vía :enew .
    • si existe una memoria intermedia alternativa y en buffer-list , cambie a ella, de lo contrario, vaya a la siguiente, vía :bn .
  • comportamiento más razonable para el diseño de ventanas múltiples
    • no cerrando ninguna ventana,
    • siempre permanece en la ventana original.
    • para cada ventana que muestre el búfer actual, haga lo que se indica arriba, luego elimine el búfer actual.

nnoremap <Leader>b :call DeleteCurBufferNotCloseWindow()<CR> func! DeleteCurBufferNotCloseWindow() abort if &modified echohl ErrorMsg echom "E89: no write since last change" echohl None elseif winnr(''$'') == 1 bd else " multiple window let oldbuf = bufnr(''%'') let oldwin = winnr() while 1 " all windows that display oldbuf will remain open if buflisted(bufnr(''#'')) b# else bn let curbuf = bufnr(''%'') if curbuf == oldbuf enew " oldbuf is the only buffer, create one endif endif let win = bufwinnr(oldbuf) if win == -1 break else " there are other window that display oldbuf exec win ''wincmd w'' endif endwhile " delete oldbuf and restore window to oldwin exec oldbuf ''bd'' exec oldwin ''wincmd w'' endif endfunc


nmap <leader>d :bprevious<CR>:bdelete #<CR>

Funciona como debería hasta que se abre un búfer en varias ventanas. Lo suficientemente bueno a menos que quieras usar las secuencias de comandos más grandes que hay.

Editar: esto es lo que uso ahora mismo:

function! BufferDelete() if &modified echohl ErrorMsg echomsg "No write since last change. Not closing buffer." echohl NONE else let s:total_nr_buffers = len(filter(range(1, bufnr(''$'')), ''buflisted(v:val)'')) if s:total_nr_buffers == 1 bdelete echo "Buffer deleted. Created new buffer." else bprevious bdelete # echo "Buffer deleted." endif endif endfunction