Satır numarasına özel metin genişliği ayarı


9

E-posta yazmak için gvim, tw=72uzun satırları kırmak için kullanıyorum . Şimdi aynı belgedeki temel posta başlıklarını da düzenliyorum, örneğin postalarıma alıcı ekliyorum. Şimdi tw=7272 karakterden sonra her zaman kırılıyor.

tw=0İlk 4 satıra (başlık kısmı bu) ve tw=72belgenin geri kalanına nasıl ayarlayabilirim ?

İlgili olduğumda formatoptions'ım şöyle görünür:

set fo+=tcqn

textwidthtamponun tamamına uygulanır.
romainl

3
Ayrıca bkz: Vim'in markdown'da etiketin ortasında bağlantıları kesmesini önleme . E-postalara için, ya eğer kontrol ederek benzer bir çözüm kullanabilir line('.') < 5veya eğer bir e-posta başlığıyla hat başlar (ör kontrol ederek From: , To: vs.).
Martin Tournoij

@Carpetsmoker Çok teşekkürler, bu çözümün anahtarıydı. Cevabımı gerekli değişikliklerle birlikte ekledim.
mxmehl

Yanıtlar:


6

@ Carpetsmoker'ın sorum hakkındaki yorumu sayesinde, bunu tam istediğim gibi çözebildim.

.Vimrc'de (veya benim durumumda yalnızca e-postalarımı düzenlerken yüklediği özel bir dosyada) aşağıdaki işlevle, satır numarası 5'ten küçükse tw, 500 olarak ayarlanır, aksi takdirde au CursorMovedI72'dir. imleç hareket eder.

" Set tw to 500 if in the first 4 lines, else 500
au CursorMovedI * call ModifyTextWidth()   " execute when cursor has moved, use for all files
function! ModifyTextWidth()
    if line('.') < 5               " if line number smaller than 5
        setlocal textwidth=500     " use high tw setting
    else
        setlocal textwidth=72      " Otherwise use normal textwidth
    endif
endfunction

Birisi bunu uygulamayı planlıyorsa, joker karakteri au CursorMovedI *sabit bir yol veya dosya son ekiyle değiştirmeyi düşünün .


4

Mxmehl'ın cevabına daha sağlam bir alternatif.

Eğer kullanırsanız filetype=mailVim sizin için başlıklarını vurgulayacaktır:

resim açıklamasını buraya girin

Sözdizimi bilgilerini, bir satırın başlık olup olmadığını belirlemek ve metin genişliğini buna göre ayarlamak için kullanabiliriz.

Başlıkların sözdizimi adı olan mailHeaderKey, mailSubject, mailHeaderEmailve mailHeader. Bunu bakarak öğrendim /usr/share/vim/vim74/syntax/mail.vim.

Bu çözümü tercih etmemin nedeni, rastgele satır numaralarına bağlı olmaması, ancak bir başlık ve yirmi başlık içeren e-postalar için eşit derecede doğru çalışmasıdır.

augroup filetypes
    autocmd!

    autocmd FileType mail call s:mail()
augroup end

" Set up ft=mail
fun! s:mail()
    augroup ft_mail
        autocmd!
        autocmd CursorMoved,CursorMovedI *
            \  if index(["mailHeaderKey", "mailSubject", "mailHeaderEmail", "mailHeader"], synIDattr(synID(line('.'), col('.'), 1), 'name')) >= 0
            \|     setlocal textwidth=500
            \| else
            \|     setlocal textwidth=72
            \| endif
    augroup end
endfun

2

Bunu autocmds kullanarak yapabilirsiniz. Bunları vimrc'nize dahil edebilirsiniz, ancak burada açıklandığı gibi bunları bir dosya türüne dahil etmek genellikle daha iyidir .

Sonra aşağıdakileri kullanabilirsiniz:

augroup headerTw
   au!
   autocmd InsertEnter <buffer>
            \ if line('.') < 5 |
            \    setl tw=0 |
            \ endif
   autocmd InsertLeave <buffer>
            \ if line('.') < 5 |
            \    setl tw=72 |
            \ endif
augroup END

<buffer>Dosyayı filetype eklentisi olmadan kullanmayı tercih ederseniz, dosyayı bir dosya modeliyle değiştirmeniz gerekir .

Fikir 'textwidth'ekleme moduna girdiğiniz zamanı değiştirmek ve bıraktığınızda geri yüklemek.

Ekleme modundayken genellikle metinde gezinirseniz (örneğin: ok tuşlarını kullanarak) @Carpetsmoke tarafından belirtilen bağlantıya göre metni geliştirebilirsiniz: Vim'in işaretleme sırasında etiketin ortasında bağlantıları kesmesini önleyebilirsiniz.


0

Bunun mümkün olduğuna inanmıyorum. Ancak, birkaç geçici çözüm vardır.

  1. Sen Üstbilginizi yazıp olabilir sonra :set tw=72 . Yana tw, zaten tampon metne geriye dönük geçerli değildir

  2. Her şeyi ile yazabilirsiniz ve :set tw=0bitirdikten sonra 4. satıra gidin :set tw=72, ve gqG. Veya bunu manuel olarak yapmak istemiyorsanız, makro veya harita oluşturabilirsiniz. Örneğin, her ikisi de işe yarar:

    let @r=":set tw=72<cr>4GgqG:set tw=0<cr>"
    nnoremap <silent> <leader>r :set tw=72<cr>4GgqG:set tw=0<cr>
    

    ("yeniden biçimlendirme" için "r")

    Vim'i kapattığınızda yeniden biçimlendirilmesini istediğinizi ve yalnızca e-postalar için kullandığınız bir dosya türünün olduğunu varsayarak, vim'i kapattığınızda otomatik olarak gerçekleşecek şekilde ayarlayabilirsiniz. Örneğin, tüm e-postalarınız .emailuzantıya sahipse şunları yapabilirsiniz:

    autocommand VimLeavePre *.email set tw=72 | exe "normal! 4GgqG" | w
    

    Tabii ki, *.emailgerçekte kullandığınız dosya uzantısını değiştirmeniz gerekir. Eğer böyle bir şey kullanırsanız .txt, ben ederim değil onunla karışıklık olacak, çünkü bu tavsiye her .txt Sahip dosyaya.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.