Adicionando bloco de cabeçalho de comentário de 80 colunas com texto centralizado

9

Por alguma razão ou outra, geralmente divido o código em subseções separadas por cabeçalhos como estes:

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

São três linhas largas de 80 colunas, #com um título centralizado no meio. Até agora, não encontrei uma maneira rápida de gerá-las no vim.

O que costumo fazer é algo ao longo das linhas de 80i#e, em seguida, yypppara me dar três linhas, mas preciso navegar para o meio e adicionar texto. Eu costumo fazer isso com substituir, mas a substituição não centraliza o cabeçalho dentro ##Então, eu excluo o excesso de #manualmente.

Como centralizar o texto na linha do meio? E qual seria a maneira mais rápida de alcançar esse resultado?

Karolis Koncevičius
fonte

Respostas:

16

Aqui está um método um pouco mais eficiente / fácil. Digite-o com o cursor no início da linha de texto (ou seja LOAD) que você deseja centralizar.

  • :center 80<cr>: centraliza o texto com a função incorporada do Vim
  • hhv0r#: adicione os #à esquerda
  • A<space><esc>40A#<esc>: adicione muitos #s à direita
  • d80|: exclua o excesso de #s à direita
  • YppVr#kk.: Top add e inferior #s

Então, o comando completo:

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

Você pode colocar algo assim no seu .vimrc para adicionar um mapeamento conveniente:

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

Demonstração de mini-screencast:

demonstração

Maçaneta
fonte
3

Primeiro, você precisa :set expandtab.

  1. 80i#Esc para criar a linha superior
  2. Yp duplicá-lo
  3. OSpaceLOADSpaceEsc
  4. :center 80( 80Pode ser omitido, dependendo da sua textwidthconfiguração.)
  5. hhv0r# para preencher o lado esquerdo (usando visual, selecione e substitua)
  6. $hjlly$kp para preencher o lado direito (duplicando alguns caracteres da linha inferior)
200_success
fonte
3

Eu usaria uma função vimscript para isso.

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

E poderia ser chamado como

: call Header(80, 'Hello')
jalanb
fonte
11
Obrigado, esta é uma ótima resposta. Funciona para qualquer número de linhas e pode até ser modificado para incluir outros caracteres (não apenas #) facilmente. Pena que só posso dar um voto positivo e aceitar apenas uma única resposta. Desta vez, eu tive que escolher aquele com quem eu estou mais familiarizado (e funções de escrita - eu não estou familiarizado com isso, mas graças a você eu vejo como elas funcionam).
Karolis Koncevičius
2

Ou você pode usar blocos visuais:

  1. Verifique se você já tem pelo menos três linhas em branco na parte superior e, em seguida, CtrlV80L

  2. R#

  3. Mover para o meio do quarteirão (você terá que olhar isso)
  4. CtrlV e selecione a área do bloco que você deseja remover
  5. RSpace
  6. Vá para o início do espaço vazio, pressione Re digite seu cabeçalho.

Concedido, não é a maneira mais perfeita de criar um cabeçalho, pois você precisa observá-lo, mas é um caso interessante para a seleção do Visual Block.

Resultado

#################################################################################
##########################    this is a header      #############################
#################################################################################
CharlesL
fonte