A veces veo una ventana abierta con nombre scratch
.
Sé que es algún tipo de búfer / ventana temporal.
¿Cómo puedo crear una?
:h scratch
no devuelve nada
buffers
vim-windows
wizzup
fuente
fuente
:h
comando utilizado para acceder a esta ayuda?:edit
archivo para editar un archivo, se crea automáticamente un nuevo búfer. Se puede crear un búfer vacío ingresando:enew
o:new
o:vnew
. Desde Vim buffer FAQ: vim.fandom.com/wiki/Vim_buffer_FAQ:helpgrep scratch
aparece como uno de los 10 resultados (en mi instalación).Recuerdo una sugerencia de vim (que se ha migrado a vim.wikia) sobre el tema.
La última versión de la función que uso para crear buffers de memoria virtual también establece:
'buflisted'
a falso'readonly'
(Desde mi complemento de biblioteca VimL: lh-vim-lib)
fuente
Un búfer 'scratch' es solo un término informal para un lugar para escribir contenido temporal arbitrario.
Después de la respuesta aceptada y otra pregunta, creé la siguiente función en mi vimrc.
La función crea un búfer en blanco en la ventana actual y lo nombra 'scratch'. El búfer de memoria virtual no está protegido si intenta salir. Se descartará sin preguntar incluso con cambios no guardados si sale de Vim o lo borra (
:bw
).Pon esta función en tu vimrc. Para crear un tampón de scratch use
:call Scratch()
.Puede probar esto rápidamente tirando de las líneas y luego
:@"
. Entonces puedes intentarlo:call Scratch()
.Se utiliza una división para que su búfer actual no se vea afectado cuando crea el búfer de memoria virtual.
(Si prefiere omitir el
split
de la función, entonces su búfer actual estaría "oculto" (ya no en una ventana) cuando cree el búfer de memoria virtual. Vim aún se detendrá y le preguntará si intenta salir con cambios no guardados en ese buffer).El búfer scratch normalmente tendría el mismo directorio de trabajo del búfer en el que se encuentra cuando llama a la función Scratch. He incluido una línea comentada para cambiar el directorio de trabajo del búfer de memoria virtual a inicio. Esto es para aquellos con líneas de estado divertidas que pueden mostrar la ruta del directorio actual como la ruta del búfer. O solo para aquellos que lo prefieren.
Puede configurar el búfer de memoria virtual como "listado" o "no listado" (listado de forma predeterminada). Si no lo
:buffers
incluye en la lista, no lo verá en su lista, pero sí lo estará:buffers!
. Descomente lanobuflisted
línea si prefiere que no aparezca en la lista. En la lista o en la lista, siempre puede cambiar a su búfer de memoria virtual de:b scratch
todos modos. Hacer que el búfer de scratch aparezca en la lista lo hace un poco más accesible. Por ejemplo,:sball
lo incluirá en una división.Si utiliza
:bw
(limpieza de búfer) en el búfer de memoria virtual, Vim eliminará el contenido y eliminará el búfer sin previo aviso. Si usa:bd
(eliminar búfer) en el búfer de memoria virtual, Vim soltará el contenido sin previo aviso y dejará el búfer sin listar.Usted puede crear varias memorias intermedias de rascar. Vim comienza a quejarse, pero aún así terminas con otros.
fuente
buftype=hide
antes de configurar el nombre, no es necesario cambiar el directorio, porque el nombre del búfer no se "manejará como un nombre de archivo". Además, vale la pena mencionar'nobuflisted'
, lo que evita que el búfer se muestre en la salida de:ls
. Aludiste a eso, pero no lo mencionaste explícitamente.buftype=hide
de hecho no tiene sentido, y sí, en realidad estaba hablandobuftype=nofile
:). Pero no puedo reproducir el comportamiento que describe, y todavía creo que la afirmaciónVim buffer names are always filenames
es incorrecta. Si elimino lacd
línea de su función y luego la ejecuto, no hay una ruta en mi línea de estado o en la salida deecho bufname('%')
Me pregunto si tal vez sea un problema con su línea de estado en lugar del nombre del búfer. ¿Cuál es su'statusline'
opción establecida?statusline
para usar algo comoexpand(&buftype == 'nofile' ? '%' : '%:p:~:h')
, pero creo que ahora estamos en el ámbito de la preferencia personal. Si decide seguir con la solución de cambio de directorio, entonces podría ser mejor usar:lcd
para limitar los cambios a la ventana en cuestión, pero de nuevo eso depende de usted. De todos modos, creo que esta es una gran respuesta. +1!