Ajout d'un bloc d'en-tête de commentaire de 80 colonnes avec du texte centré

9

Pour une raison ou une autre, je divise souvent le code en sous-sections séparées par des en-têtes comme ceux-ci:

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

Ce sont 3 lignes larges de 80 colonnes #avec un titre centré au milieu. Jusqu'à présent, je n'ai pas trouvé de moyen rapide de les générer dans vim.

Ce que je fais habituellement, c'est quelque chose dans le sens de 80i#, puis yyppde me donner 3 lignes, mais je dois ensuite naviguer vers le milieu et ajouter du texte. Je fais habituellement cela avec replace, mais replace ne centre pas l'en-tête à l'intérieur ##Donc je supprime l'excédent de #manuellement.

Comment centrer le texte sur la ligne du milieu? Et quel serait un moyen plus rapide d'atteindre ce résultat?

Karolis Koncevičius
la source

Réponses:

16

Voici une méthode légèrement plus efficace / plus simple. Tapez-le avec le curseur au début de la ligne de texte (c'est-à-dire LOAD) que vous souhaitez centrer.

  • :center 80<cr>: centrez le texte avec la fonction intégrée de Vim
  • hhv0r#: ajoutez le #s à gauche
  • A<space><esc>40A#<esc>: ajoutez beaucoup de #s sur la droite
  • d80|: supprimer les excès #s sur la droite
  • YppVr#kk.: ajouter le haut et le bas #s

Ainsi, la commande complète:

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

Vous pouvez mettre quelque chose comme ça dans votre .vimrc afin d'ajouter un mappage pratique:

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

Démonstration de mini-screencast:

manifestation

Poignée de porte
la source
3

D'abord, vous devez :set expandtab.

  1. 80i#Esc pour créer la ligne supérieure
  2. Yp le dupliquer
  3. OSpaceLOADSpaceEsc
  4. :center 80(Le 80peut être omis, selon votre textwidthréglage.)
  5. hhv0r# pour remplir le côté gauche (en utilisant la sélection visuelle et remplacer)
  6. $hjlly$kp pour remplir le côté droit (en dupliquant certains caractères de la ligne du bas)
200_success
la source
3

J'utiliserais une fonction vimscript pour cela.

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

Et ça pourrait s'appeler comme

: call Header(80, 'Hello')
jalanb
la source
1
Merci, c'est une très bonne réponse. Fonctionne pour n'importe quel nombre de lignes et peut même être modifié pour inclure facilement d'autres caractères (pas seulement #). Dommage que je ne puisse donner qu'une seule voix positive et n'accepter qu'une seule réponse. Cette fois, j'ai dû choisir celle que je connais le mieux (et les fonctions d'écriture - je ne connais pas ça, mais grâce à vous je vois comment elles fonctionnent).
Karolis Koncevičius
2

Ou vous pouvez utiliser des blocs visuels:

  1. Assurez-vous que vous avez déjà au moins trois lignes vides en haut, puis CtrlV80L

  2. R#

  3. Déplacez-vous au milieu du bloc (vous allez devoir le regarder)
  4. CtrlV et sélectionnez la zone du bloc que vous souhaitez supprimer
  5. RSpace
  6. Allez au début de l'espace vide, appuyez sur Ret tapez votre en-tête.

Certes, ce n'est pas le moyen le plus parfait pour créer un en-tête, car vous devez le regarder, mais c'est un cas intéressant pour la sélection du bloc visuel.

Résultat

#################################################################################
##########################    this is a header      #############################
#################################################################################
CharlesL
la source