VIM'de işaretleme yazarken satırları otomatik olarak yeniden sar


11

Çok sık, VIM'de işaretleme yazıyorum ve bu işaretlemede paragraflar olacak. Düzenlememe yardımcı olmak için Vim'imi 80 karaktere bir çizgi sarmak için ayarladım. Sadece yazmaya devam edersem iyi çalışır, ancak sorun biraz düzeltme yapmam gerekirse çok sinir bozucu olur.

demo (wikipedia birinci dereceden mantıktan alınmıştır):

The adjective "first-order" distinguishes first-order logic from higher-order logic 
in which there are predicates having predicates or functions as arguments. In first-order 
theories, predicates are often associated with sets. In interpreted higher-order 
theories, predicates may be interpreted as sets of sets.

Çok uzak çok iyi. Ancak makaleyi gözden geçirdiğimde, ortada bir şey eklemeye karar verebilirim:

The adjective "first-order" distinguishes first-order logic from higher-order logic 
in which there are predicates having predicates or functions as arguments,
or in which one or both of predicate quantifiers or function quantifiers are permitted.
In first-order theories, predicates are often associated with sets. In interpreted higher-order
theories, predicates may be interpreted as sets of sets.

uyarı satırı 3, sarmak istediğim satırdır. VIM'de yaparsam, satırları manuel olarak birleştirmem ve tüm paragrafı yeniden sarmam gerekecek.

Herkes VIM otomatik olarak yapmak için nasıl bir fikrim var?

Yanıtlar:


7

Daha da basit: için abayrak, 'formatoptions'metin eklendiğinde veya silindiğinde paragrafların otomatik olarak biçimlendirilmesini sağlar. Bkz :help fo-tableayrıntıları için 'formatoptions'bayraklar ve :help autoformat.

:set formatoptions+=a

gqve gwaşağıdaki hareketin hareket ettiği çizgileri biçimlendirir.

Formatting is done with one of three methods:
                1. If 'formatexpr' is not empty the expression is
                   evaluated.  This can differ for each buffer.
                2. If 'formatprg' is not empty an external program
                   is used.
                3. Otherwise formatting is done internally.

                In the third case the 'textwidth' option controls the
                length of each formatted line

İkisi arasındaki fark gq, imleci son biçimlendirilen satırın ilk boş olmayan alanı üzerinde bırakacak olmasıdır. gwimleci başladığı yere geri koyacaktır.

İmlecinizin bulunduğu paragrafı gwapveya tüm belgeyi kolayca elle yeniden yazabilirsiniz, ancak bu satır gggwGimleç sayesinde imlecinizi hareket ettirir gg.

Bir otomatik komutla, biçimlendirmenin otomatik olarak gerçekleşmesini sağlayabilirsiniz. Ekleme modundan çıkarken geçerli paragrafı formatlayan bir örnek:

augroup myformatting
    autocmd!
    autocmd InsertLeave * normal gwap<CR>
augroup END

Sizin için daha iyi iş bulabileceğiniz başka otokomut tetikleyiciler de vardır. Aşağıdaki seçenekleri inceleyebilirsiniz :help autocmd-events. En alakalı olanlar muhtemelen "çeşitli" alt başlığı altındadır.


bir kelime: parlak!
Jason Hu

1

Bir göz atarım :help 'textwidth'. Siz yazdıkça satırları otomatik olarak keser. Ancak, bir satırın ortasını düzenliyorsanız bu çalışmaz.

Ben şahsen ayrılmayı tercih ederim, textwidthböylece bir paragrafı otomatik olarak birleştirip bölecek bir işlev oluşturdum. (Temel olarak 80 karaktere otomatik olarak biçimlendir) Şöyle görünüyor:

function! ParagraphToEightyChars()
   while (len(getline(".")) > 80)
      normal! 0
      " Find the first white-space character before the 81st character.
      call search('\(\%81v.*\)\@<!\s\(.*\s.\{-}\%81v\)\@!', 'c', line('.'))
      " Replace it with a new line.
      exe "normal! r\<CR>"
      " If the next line has words, join it to avoid weird paragraph breaks.
      if (getline(line('.')+1) =~ '\w')
         normal! J
      endif
   endwhile
   " Trim any accidental trailing whitespace
   :s/\s\+$//e
endfunction

Sonra ne zaman ihtiyacım olursa onu aramak için bir harita var:

nnoremap <silent><A-J> :call ParagraphToEightyChars()<CR>

Bu işlev formatoptions+=jr, koddaki yorumları da biçimlendirmek için harika çalışır ! İmlecinizi 80 karakterden uzun olan ilk satıra getirin ve işlevi çağırın.

(Not: Bu işlevi 80 dışında uzunluklar yapmak için genel yapmadım, ancak 80 ve 81'leri yalnızca başka bir şey yapmak istiyorsanız değiştirmeniz gerektiğini düşünüyorum)

Daha fazla bilgi için :help 'textwidth've bölümüne bakın :help 'formatoptions'.


Paylaşımın için teşekkürler. Kurulumunuzu kontrol ederken, yazarken otomatik olarak biçimlendirmiyor, değil mi? Eğer öyleyse, hala yetersiz bir çözüm, değil mi?
Jason Hu

textwidthsiz yazdıkça otomatik olarak biçimlendirilir. Benim fonksiyonum olmayacak. Vimin bir şeyi ne zaman tamamladığını kontrol etmeyi tercih ediyorum, bu yüzden benim için çalışıyor. Ancak, özellikle yazdığınız gibi bir biçimlendirici arıyorsanız, evet; iş akışınıza tam olarak uymuyor.
Tumbler41

1

Tamlık uğruna, eklenti tabanlı seçenekten bahsetmek istiyorum.

Kaydederken bir güzelleştirici aracılığıyla arabelleklerinizi çalıştırmayı destekleyen ALE gibi bir şey kullanırsanız , Prettier'in kodunuzu yeniden sarmasına izin verebilirsiniz .

Bunu şu şekilde koyarak başardım ~/.vim/ftplugin/markdown.vim:

let b:ale_fixers = ['prettier', 'remove_trailing_lines', 'trim_whitespace']
let b:ale_javascript_prettier_options = '--prose-wrap always'

... ve bunu şöyle koyarız ~/.vimrc:

let g:ale_fix_on_save = 1
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.