Dodanie bloku nagłówka komentarza o szerokości 80 kolumn z wyśrodkowanym tekstem

9

Z jakiegoś powodu często dzielę kod na podsekcje oddzielone takimi nagłówkami:

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

Są to 3 80-kolumnowe linie #z tytułem pośrodku. Jak dotąd nie znalazłem szybkiego sposobu na wygenerowanie ich w vimie.

To, co zwykle robię, to coś wzdłuż linii, 80i#a następnie, yyppaby dać mi 3 linie, ale potem muszę przejść do środka i dodać tekst. Zwykle robię to z zamień, ale zamień nie wyśrodkowuje nagłówka w środku ##Więc #ręcznie usuwam nadmiar .

Jak wyśrodkować tekst w środkowym rzędzie? A jaki byłby szybszy sposób na osiągnięcie tego wyniku?

Karolis Koncevičius
źródło

Odpowiedzi:

16

Oto nieco bardziej wydajna / łatwiejsza metoda. Wpisz go kursorem na początku wiersza tekstu (tj. LOAD), Który chcesz wyśrodkować.

  • :center 80<cr>: wyśrodkuj tekst za pomocą wbudowanej funkcji Vima
  • hhv0r#: dodaj #s po lewej stronie
  • A<space><esc>40A#<esc>: dodaj dużo #s po prawej stronie
  • d80|: usuń nadmiar #s po prawej stronie
  • YppVr#kk.: dodaj górne i dolne #s

Tak więc pełne polecenie:

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

Możesz dodać coś takiego w swoim .vimrc, aby dodać wygodne mapowanie:

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

Demonstracja mini-screencastu:

demonstracja

Klamka
źródło
3

Najpierw musisz :set expandtab.

  1. 80i#Esc aby utworzyć górną linię
  2. Yp powielić to
  3. OSpaceLOADSpaceEsc
  4. :center 80( 80Można je pominąć, w zależności od textwidthustawień.)
  5. hhv0r# wypełnić lewą stronę (używając wizualnego wyboru i zamień)
  6. $hjlly$kp aby wypełnić prawą stronę (poprzez skopiowanie niektórych znaków z dolnego wiersza)
200_sukces
źródło
3

Użyłbym do tego funkcji vimscript.

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

I można to nazwać tak

: call Header(80, 'Hello')
jalanb
źródło
1
Dziękuję, to naprawdę świetna odpowiedź. Działa dla dowolnej liczby wierszy, a nawet można go łatwo modyfikować, aby zawierał inne znaki (nie tylko #). Szkoda, że ​​mogę wyrazić tylko jedną opinię i zaakceptować tylko jedną odpowiedź. Tym razem musiałem wybrać ten, który znam bardziej (i funkcje pisania - nie jestem z tym zaznajomiony, ale dzięki tobie widzę, jak działają).
Karolis Koncevičius
2

Lub możesz użyć bloków wizualnych:

  1. Upewnij się, że masz już co najmniej trzy puste linie u góry CtrlV80L

  2. R#

  3. Przejdź na środek bloku (musisz to zrobić gałką oczną)
  4. CtrlV i wybierz obszar bloku, który chcesz usunąć
  5. RSpace
  6. Przejdź na początek pustej przestrzeni, naciśnij Ri wpisz nagłówek.

To prawda, że ​​nie jest to najdoskonalszy sposób na utworzenie nagłówka, ponieważ musisz go obejrzeć, ale jest to interesujący przypadek wyboru bloku wizualnego.

Wynik

#################################################################################
##########################    this is a header      #############################
#################################################################################
CharlesL
źródło