Agregar un bloque de encabezado de comentario de 80 columnas de ancho con texto centrado


9

Por alguna razón u otra, a menudo divido el código en subsecciones separadas por encabezados como estos:

################################################################################
#################################### LOAD ######################################
################################################################################

Estas son 3 líneas de 80 columnas de ancho #con un título centrado en el medio. Hasta ahora no he encontrado una forma rápida de generarlos en vim.

Lo que generalmente hago es algo en la línea de 80i#y luego yyppdarme 3 líneas, pero luego necesito navegar hacia el medio y agregar texto. Normalmente hago esto con reemplazar, pero reemplazar no centra el encabezado dentro #... #Así que elimino el exceso de #'s manualmente.

¿Cómo centrar el texto en la fila central? ¿Y cuál sería una forma más rápida de lograr este resultado?

Respuestas:


16

Aquí hay un método un poco más eficiente / más fácil. Escríbalo con el cursor al comienzo de la línea de texto (es decir LOAD) que desea centrar.

  • :center 80<cr>: centra el texto con la función integrada de Vim
  • hhv0r#: agregue la #s a la izquierda
  • A<space><esc>40A#<esc>: agregue muchos #s a la derecha
  • d80|: eliminar el exceso de #s a la derecha
  • YppVr#kk.: agregar arriba y abajo #s

Entonces, el comando completo:

:center 80<cr>hhv0r#A<space><esc>40A#<esc>d80<bar>YppVr#kk.

Puede agregar algo como esto en su .vimrc para agregar una asignación conveniente:

nnoremap <C-b> :center 80<cr>hhv0r#A<space><esc>40A#<esc>d80<bar>YppVr#kk.

Mini demostración de screencast:

demostración


3

Primero, necesitas hacerlo :set expandtab.

  1. 80i#Esc para crear la línea superior
  2. Yp duplicarlo
  3. OSpaceLOADSpaceEsc
  4. :center 80(Se 80puede omitir, dependiendo de su textwidthconfiguración).
  5. hhv0r# para llenar el lado izquierdo (usando selección visual y reemplazo)
  6. $hjlly$kp para llenar el lado derecho (duplicando algunos caracteres de la línea inferior)

3

Usaría una función vimscript para eso.

function Header(width, word)
    let a:inserted_word = ' ' . a:word . ' '
    let a:word_width = strlen(a:inserted_word)
    let a:length_before = (a:width - a:word_width) / 2
    let a:hashes_before = repeat('#', a:length_before)
    let a:hashes_after = repeat('#', a:width - (a:word_width + a:length_before))
    let a:hash_line = repeat('#', a:width)
    let a:word_line = a:hashes_before . a:inserted_word . a:hashes_after

    :put =a:hash_line
    :put =a:word_line
    :put =a:hash_line
endfunction

Y podría llamarse como

: call Header(80, 'Hello')

1
Gracias, esta es una gran respuesta. Funciona para cualquier número de líneas e incluso se puede modificar para incluir otros caracteres (no solo #) fácilmente. Es una pena que solo pueda dar 1 voto a favor y aceptar una sola respuesta. Esta vez tuve que ir con el que estoy más familiarizado (y escribir funciones, no estoy familiarizado con eso, pero gracias a ti veo cómo funcionan).
Karolis Koncevičius

2

O podrías usar bloques visuales:

  1. Asegúrese de tener al menos tres líneas en blanco en la parte superior, luego CtrlV80L

  2. R#

  3. Muévase a la mitad del bloque (tendrá que mirar esto)
  4. CtrlV y seleccione el área del bloque que desea eliminar
  5. RSpace
  6. Vaya al comienzo del espacio vacío, presione Ry escriba su encabezado.

Por supuesto, no es la forma más perfecta de crear un encabezado, ya que hay que mirarlo, pero es un caso interesante para la selección del Bloque visual.

Resultado

#################################################################################
##########################    this is a header      #############################
#################################################################################
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.