Insira cabeçalhos perfeitamente centralizados no Vim

Ao organizar o código-fonte, geralmente é muito útil inserir cabeçalhos grandes e facilmente identificáveis ​​para indicar onde as seções começam e terminam. Infelizmente, os editores de texto não fornecem uma maneira embutida de centralizar o texto da maneira que os processadores de texto fazem, mas não é muito difícil escrever um método rápido que cuidará da formatação para você.

Por exemplo, digamos que eu queira inserir cabeçalhos como este em meu código-fonte Haskell (ficaria muito melhor se o coderwall realmente mantivesse blocos de código monoespaçados …):

module Main where

{----------------------------------------------------}
{- Begin Important Stuff -}
{----------------------------------------------------}

main
= putStrLn "hello world"

Se você contar os espaços, verá que eles são iguais (bem, quase; o lado direito tem um espaço adicional porque o título tem um número ímpar de letras).

Para permitir que o Vim controle os espaços de contagem para você, coloque-os em seu .vimrc:

function! s:GetHeaderSpaceCount(str, n)
return (a:n - len(a:str)) / 2
endfunction


function! GetHeader(str)
let header_width = 80
if &filetype =~ 'haskell'
let sep = '{-'.repeat('-', header_width-4).'-}'
let blank = repeat(' ', s:GetHeaderSpaceCount(a:str, header_width-4))
let title = '{-'.blank.a:str.blank
if (len(a:str) % 2) == 1
let title = title.' '
endif

let title = title.'-}'
return sep."n".title."n".sep
else
return 'Unrecognized filetype.'
endif

endfunction

Então, para inserir um cabeçalho, entre no modo de inserção e digite <Ctrl+R>=GetHeader("Begin Important Stuff")e pressione Enter.

Outros tipos de arquivos podem ser facilmente ativados adicionando outra verificação no GetHeadermétodo, e sua lógica provavelmente será muito semelhante ao exemplo que tenho para Haskell.

Aproveite seus novos cabeçalhos centralizados!