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?

Karolis Koncevičius
fuente

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

Perilla de la puerta
fuente
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)
200_success
fuente
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')
jalanb
fuente
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      #############################
#################################################################################
CharlesL
fuente