Hinzufügen eines 80 Spalten breiten Kommentar-Header-Blocks mit zentriertem Text


9

Aus irgendeinem Grund teile ich den Code oft in Unterabschnitte, die durch folgende Überschriften getrennt sind:

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

Dies sind 3 80 Spalten breite Zeilen #mit einem Titel in der Mitte. Bisher habe ich keinen schnellen Weg gefunden, diese in vim zu generieren.

Was ich normalerweise mache, ist etwas in der Art von 80i#und dann yypp, um mir 3 Zeilen zu geben, aber dann muss ich in die Mitte navigieren und Text hinzufügen. Normalerweise mache ich das mit Ersetzen, aber Ersetzen zentriert den Header nicht im Inneren #... #Also lösche ich den Überschuss von #'s manuell.

Wie zentriere ich den Text in der mittleren Reihe? Und was wäre ein schnellerer Weg, um dieses Ergebnis zu erzielen?

Antworten:


16

Hier ist eine etwas effizientere / einfachere Methode. Geben Sie es mit dem Cursor am Anfang der Textzeile (dh LOAD) ein, die Sie zentrieren möchten.

  • :center 80<cr>: Zentrieren Sie den Text mit der integrierten Funktion von Vim
  • hhv0r#: füge das #s links hinzu
  • A<space><esc>40A#<esc>: #rechts viel s hinzufügen
  • d80|: Überschüssiges #s rechts löschen
  • YppVr#kk.: oben und unten hinzufügen #s

Also, der vollständige Befehl:

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

Sie können so etwas in Ihre .vimrc-Datei einfügen, um eine praktische Zuordnung hinzuzufügen:

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

Mini-Screencast-Demonstration:

Demonstration


3

Zuerst müssen Sie :set expandtab.

  1. 80i#Esc um die oberste Zeile zu erstellen
  2. Yp um es zu duplizieren
  3. OSpaceLOADSpaceEsc
  4. :center 80(Das 80kann je nach textwidthEinstellung weggelassen werden .)
  5. hhv0r# um die linke Seite zu füllen (mit visuellem Auswählen und Ersetzen)
  6. $hjlly$kp um die rechte Seite zu füllen (durch Duplizieren einiger Zeichen aus der unteren Zeile)

3

Ich würde dafür eine Vimscript-Funktion verwenden.

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

Und es könnte so heißen

: call Header(80, 'Hello')

1
Vielen Dank, das ist eine wirklich gute Antwort. Funktioniert für eine beliebige Anzahl von Zeilen und kann sogar leicht geändert werden, um andere Zeichen (nicht nur #) einzuschließen. Schade, dass ich nur 1 Gegenstimme abgeben und nur eine einzige Antwort akzeptieren kann. Dieses Mal musste ich mich für die entscheiden, mit der ich besser vertraut bin (und Schreibfunktionen - das kenne ich nicht, aber dank dir sehe ich, wie sie funktionieren).
Karolis Koncevičius

2

Oder Sie könnten visuelle Blöcke verwenden:

  1. Stellen Sie dann sicher, dass Sie oben bereits mindestens drei Leerzeilen haben CtrlV80L

  2. R#

  3. Bewegen Sie sich in die Mitte des Blocks (Sie müssen dies in Augenschein nehmen)
  4. CtrlV und wählen Sie den Bereich des Blocks aus, den Sie entfernen möchten
  5. RSpace
  6. Gehen Sie zum Anfang des leeren Raums, drücken Sie Rund geben Sie Ihren Header ein.

Zugegeben, es ist nicht die perfekteste Möglichkeit, einen Header zu erstellen, da Sie ihn betrachten müssen, aber es ist ein interessanter Fall für die Auswahl des visuellen Blocks.

Ergebnis

#################################################################################
##########################    this is a header      #############################
#################################################################################
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.