Додавання блоку заголовка в 80 стовпців із коментарями із центрованим текстом


9

З якихось чи інших причин я часто поділяю код на підрозділи, розділені такими заголовками:

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

Це 3 широкі лінії з 80 стовпцями #із заголовком, по центру посередині. Поки що я не знайшов швидкого способу генерувати їх у vim.

Що я зазвичай роблю, це щось уздовж рядків, 80i#а потім yyppмені 3 рядки, але тоді мені потрібно перейти до середини та додати текст. Я зазвичай роблю це із заміною, але заміна не центрує заголовок всередині ##Тож я видаляю надлишки #'вручну.

Як центрувати текст у середньому рядку? І який би був швидший спосіб досягти цього результату?

Відповіді:


16

Ось трохи ефективніший / простіший метод. Введіть його курсором на початку рядка тексту (тобто LOAD), який ви хочете в центрі.

  • :center 80<cr>: центруйте текст за допомогою вбудованої функції Vim
  • hhv0r#: додайте #s зліва
  • A<space><esc>40A#<esc>: додайте багато #s справа
  • d80|: видалити надлишки #s праворуч
  • YppVr#kk.: додайте верхній і нижній #s

Отже, повна команда:

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

Ви можете поставити щось подібне у свій .vimrc, щоб додати зручне відображення:

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

Демонстрація міні-екрана:

демонстрація


3

По-перше, вам потрібно :set expandtab.

  1. 80i#Esc щоб створити верхню лінію
  2. Yp дублювати його
  3. OSpaceLOADSpaceEsc
  4. :center 80(Це 80може бути пропущено, залежно від вашого textwidthпараметра.)
  5. hhv0r# залити ліву частину (за допомогою візуального вибору та заміни)
  6. $hjlly$kp заповнити праву сторону (дублюючи деякі символи з нижнього рядка)

3

Я б використав для цього функцію 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

І це можна назвати як

: call Header(80, 'Hello')

1
Дякую, це справді чудова відповідь. Працює для будь-якої кількості рядків і навіть може бути змінено, щоб легко включати інші символи (не тільки #). Сором Я можу дати лише 1 підсумок і прийняти лише одну відповідь. Цього разу мені довелося піти з тим, з ким я більше знайомий (і писати функції - я з цим не знайомий, але завдяки вам я бачу, як вони працюють).
Karolis Koncevičius

2

Або ви можете використовувати візуальні блоки:

  1. Переконайтеся, що ви вже маєте принаймні три порожні рядки вгорі CtrlV80L

  2. R#

  3. Перемістіть до середини блоку (вам доведеться це зав'язати)
  4. CtrlV і виберіть область блоку, який потрібно видалити
  5. RSpace
  6. Перейдіть до початку порожнього місця, натисніть Rі введіть заголовок.

Зрозуміло, це не найдосконаліший спосіб створити заголовок, як це потрібно для його очного яблука, але це цікавий вибір для вибору Visual Block.

Результат

#################################################################################
##########################    this is a header      #############################
#################################################################################
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.