buffers – Reabrir el búfer cerrado más recientemente

Pregunta:

Cuando escribo en un archivo, a menudo :wq accidentalmente :wq lugar de :w ya que las dos teclas están una al lado de la otra. Pero como casi siempre tengo más de un búfer abierto, Vim permanece activo y cualquier archivo que acabo de cerrar permanece en la lista de búferes ( :ls ).

A veces es mucho trabajo volver a abrir el archivo manualmente. Y lo que es peor, ¡a veces ni siquiera recuerdo el nombre del archivo de lo que acabo de editar! Así que tengo que estudiar :ls y tratar de recordar.

¿Hay alguna forma de "reabrir" la ventana cerrada más recientemente?

Respuesta:

Jugué un poco con esto y lo siguiente parece funcionar para los casos que probé, incluido el cierre de una ventana dividida y una pestaña con una ventana usando :q .

augroup bufclosetrack
  au!
  autocmd WinLeave * let g:lastWinName = @%
augroup END
function! LastWindow()
  exe "split " . g:lastWinName
endfunction
command -nargs=0 LastWindow call LastWindow()

Esto crea un autocomando en un nuevo grupo de aumento (solo necesita ponerlo en un grupo si corre el riesgo de cargar el archivo de secuencia de comandos varias veces) para que se ejecute justo antes de que el cursor salga de una ventana (ver :help WinLeave ), que incluye cerrar una ventana, sea es solo una división o la última ventana en una pestaña, cerrando la pestaña. Configuramos esto para que ocurra en cualquier nombre de búfer usando th * . Luego configuramos la acción para guardar el nombre de archivo de esa ventana en una variable global, llamaremos g:lastWinName , pero puede usar cualquier nombre de variable que desee.

Luego creamos una función que dividirá la ventana actual, dando al comando split el valor de la variable en la que guardamos. Esto se hace concatenando la cadena "split " con la variable g:lastWinName usando el . operador. El comando exe ejecuta la cadena resultante.

Cuando cierra accidentalmente una ventana o pestaña, puede llamar al comando LastWindow como :LastWindow , que llama a una función que abrirá una nueva división en ese último nombre de archivo.

Advertencias:

  • si cambia accidentalmente la ventana (simplemente moviendo el cursor a otra ventana, por ejemplo) después de cerrar una ventana, esto no recuperará la ventana cerrada
  • Si hace que vim cambie su directorio de trabajo según la ruta del archivo para el búfer activo, esto probablemente fallará (del mismo modo si cambia el directorio manualmente después de cerrar la ventana)
  • El uso de esto después de cerrar una pestaña completa de ventanas (por ejemplo, usando :tabc ) da como resultado el guardado llamado varias veces. Ejecutar LastWindow solo restaura uno de ellos (lo que Vim realmente se cerró por última vez)
  • Esto solo restaura el búfer por nombre; no se restaura ninguna otra información de la ventana (por ejemplo, tamaño de la ventana, posición en el búfer, configuración local de la ventana, etc.)

Posibles mejoras futuras:

  • Podría ser posible rastrear el número de búfer de la ventana antes de que se cierre y rastrearlo; eso debería resolver el problema con el cambio de directorio
  • Algunas configuraciones de ventana se pueden copiar a otras variables y restaurar en la llamada de función
  • Otros comandos / funciones en una línea similar podrían permitir otros métodos de restauración, por ejemplo, abrir en una nueva pestaña en lugar de una nueva división

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım