Eu uso o gvim para escrever e-mails e tw=72
para quebrar longas filas. Agora eu também edito cabeçalhos básicos de correio no mesmo documento, por exemplo, estou adicionando destinatários ao meu correio. Agora com tw=72
ele também quebra todas as vezes após 72 caracteres.
Como definir tw=0
nas 4 primeiras linhas (que é a parte do cabeçalho) e tw=72
no restante do documento?
Minhas formações são assim, se isso for relevante:
set fo+=tcqn
formatting
mxmehl
fonte
fonte
textwidth
é aplicado a todo o buffer.line('.') < 5
, ou verificando se a linha começa com um cabeçalho de e-mail (por exemploFrom:
,To:
, etc.).Respostas:
Graças ao comentário do @ Carpetsmoker na minha pergunta, consegui resolver isso exatamente como queria.
Com a seguinte função em .vimrc (ou no meu caso em um arquivo especial que só foi carregado ao editar meus e-mails), tw é definido como 500 se o número da linha for menor que 5, caso contrário, é 72. Com
au CursorMovedI
isso é verificado sempre que o cursor se move.Se alguém planeja implementar isso, considere substituir o curinga
au CursorMovedI *
por um caminho fixo ou sufixo de arquivo.fonte
Uma alternativa mais robusta à resposta de mxmehl.
Se você usa o
filetype=mail
Vim, os cabeçalhos serão destacados para você:Podemos usar as informações de sintaxe para determinar se uma linha é um cabeçalho e definir a largura do texto de acordo.
O nome sintaxe dos cabeçalhos são
mailHeaderKey
,mailSubject
,mailHeaderEmail
, emailHeader
. Eu descobri isso olhando/usr/share/vim/vim74/syntax/mail.vim
.A razão de eu preferir essa solução é que ela não depende de números de linha arbitrários, mas funciona igualmente corretamente para emails com um cabeçalho e vinte cabeçalhos.
fonte
Você pode conseguir isso usando autocmds. Você pode incluí-los no seu vimrc, mas geralmente é melhor incluí-los em um tipo de arquivo, conforme explicado aqui .
Então você pode usar o seguinte:
Se você preferir usá-lo sem um plug-in de tipo de arquivo, será necessário substituí-lo
<buffer>
por um padrão de arquivo.A idéia é alterar
'textwidth'
quando você entra no modo de inserção e restaurá-lo quando sair.Se você costuma navegar no texto enquanto está no modo de inserção (por exemplo: usando as teclas de seta), pode aprimorá-lo com base no link mencionado por @Carpetsmoke: Impedir que o Vim interrompa os links no meio da tag na marcação.
fonte
Eu não acredito que isso seja possível. No entanto, existem algumas soluções alternativas.
Você pode escrever seu cabeçalho e depois
:set tw=72
. Comotw
não se aplica retroativamente ao texto que já está no seu buffer,Você pode digitar a coisa toda
:set tw=0
e, quando terminar, vá para a linha 4:set tw=72
, egqG
. Ou, se você não quiser fazer isso manualmente, poderá macro ou mapeá-lo. Por exemplo, ambos funcionariam:("r" para "reformatar")
Você pode até configurar isso para acontecer automaticamente quando você fechar o vim, supondo que você queira que seja reformatado ao fechar o vim, e que exista um tipo de arquivo que você use apenas para e-mails. Por exemplo, se todos os seus e-mails tiverem a
.email
extensão, você poderá:Claro, você teria que mudar
*.email
para qualquer extensão de arquivo que realmente usar. Se você usar algo como.txt
, eu não recomendaria isso, pois ele mexerá com todos os.txt
arquivos que você possui.fonte