Добавление блока заголовка комментария шириной 80 столбцов с центрированным текстом

9

По той или иной причине я часто делю код на подразделы, разделенные такими заголовками:

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

Это 3 строки шириной 80 столбцов #с заголовком в центре. До сих пор я не нашел быстрый способ создать их в VIM.

То , что я обычно делаю что - то вдоль линии , 80i#а затем yyppдать мне 3 линии, но затем нужно перейти к середине и добавить текст. Я обычно делаю это с заменой, но замена не центрирует заголовок внутри #... #Поэтому я удаляю лишние #буквы вручную.

Как центрировать текст в среднем ряду? И что было бы быстрее достичь этого результата?

Каролис Концевичюс
источник

Ответы:

16

Вот немного более эффективный / простой метод. Введите его курсором в начале строки текста (т.е. LOAD), которую вы хотите центрировать.

  • :center 80<cr>: центрирование текста с помощью встроенной функции Vim
  • hhv0r#: добавьте #слева
  • 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 заполнить правую сторону (дублируя некоторые символы из нижней строки)
200_success
источник
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')
jalanb
источник
1
Спасибо, это действительно отличный ответ. Работает на любое количество строк и может быть легко изменен, чтобы легко включать другие символы (не только #). Позор, я могу дать только 1 ответ и принять только один ответ. На этот раз мне пришлось пойти с тем, с кем я более знаком (и писать функции - я не знаком с этим, но благодаря вам я вижу, как они работают).
Каролис Концевичюс
2

Или вы можете использовать визуальные блоки:

  1. Убедитесь, что у вас уже есть как минимум три пустые строки вверху, а затем CtrlV80L

  2. R#

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

Конечно, это не самый совершенный способ создания заголовка, как вы должны его видеть, но это интересный случай для выбора визуального блока.

Результат

#################################################################################
##########################    this is a header      #############################
#################################################################################
CharlesL
источник