Vim'deki metni haklı çıkarabilir miyim?


38

Bir metin dosyasını Pico ya da Nano'da düzenlememi ve Vim'de düzenlemememin tek sebebi "Justify" komutuydu ^J. Bir metin paragrafını yeniden biçimlendirir, sözcük sonlarında satır sonları oluşturur, böylece metin sabit genişlikli ekranda güzel bir şekilde yüzerdi - metni önceden tanımlanmış 80 sütunlara uyacak şekilde biçimlendirir, yalnızca sözcük aralarında satır sonları oluşturur. İşlev sınırlı olduğu için uzun yorum bloklarını, dokümantasyon dosyalarını biçimlendirmek ya da sadece sınırsız bir parametre satırını daha okunaklı bir şeyle değiştirmek çok kullanışlıdır.

Vim'de böyle bir şey yapabilir miyim?

Yanıtlar:


37

Bir hareket komutu ile birlikte gqveya gwişleçlerini kullanabilirsiniz . Varsayılan olarak, fmtverilen metni biçimlendirmek için programı kullanır (Linux'ta). Ancak, bildiğim kadarıyla, çizgileri haklı çıkarmaz, böylece düzensiz kenar boşlukları elde edersiniz.

Benim kullanma gwipbiçimim, bir paragraftaki imleç ile (normal mod). Bu, imleci aynı konumda tutan geçerli paragrafı biçimlendirir. Yalnızca geçerli paragrafın biçimlendirildiğinden emin olmak için bu yolu kullanırım. Bir metin dosyasını düzenlerken gwG, dosyanın başlangıcında (normal modda) düzenleme metni bütün olarak biçimlendirir. İyi bir uygulama olarak, paragraflar arasında en az bir satır boşluk bıraktığınızdan emin olun.

Yapılabilecek bir çok yapılandırma var. Öncelikle, burada bazı ilgili yardım şunlardır: :h gq, :h gw, :h fo(biçim seçenekleri), :h fp(biçim programı), :h fo-table(olası seçeneklerden bir açıklama).


1
gq / gw kesinlikle gitmenin yoludur. bu mesaja eklemek için daha fazla seçeneğe sahip olmak için format programını par olarak değiştirebilirsiniz. Ödeme vimcasts.org/episodes/formatting-text-with-par
Bambu

3
Varsayılan olarak, Vim herhangi bir harici programı kullanmaz, ancak 'formatprg'seçeneği ayarlayarak kullanmayı seçebilirsiniz .
jamessan

15

Bu konuda harika bir VimCast var.

http://vimcasts.org/episodes/formatting-text-with-par/

Temel olarak, yüklemeniz gerekir par:

$ brew install par
# or
$ sudo apt-get install par

Ve sonra, sütunların 80 sütuna sarılmasını istediğiniz için:

:set formatprg=par\ -w80

Artık gqoperatörü, diğer cevaplarda olduğu gibi (örn. gqip) Kullanabilirsiniz ve Vim'in yerleşik formatlayıcısı yerine Par'yı kullanacaktır.

Par oldukça ileri düzeydedir ve bu gibi yorumları güzel bir şekilde formatlar:

/* This is a long */
/* multiline comment */

11

Kimden :help usr_25:

JUSTIFYING TEXT                                                                 

Vim has no built-in way of justifying text.  However, there is a neat macro     
package that does the job.  To use this package, execute the following          
command:                                                                        

        :runtime macros/justify.vim                                             

This Vim script file defines a new visual command "_j".  To justify a block of  
text, highlight the text in Visual mode and then execute "_j".

Tek yapman gereken koşmak

:ru macros/justify.vim

ve sonra yazın

_j

metni tüm dosyaya yaslamak için.

(Tabii ki, ru macros/justify.vim.vimrc'inize de ekleyebilirsiniz , böylece her seferinde yazmak zorunda kalmazsınız.)

Not : Bu mu değil sizin için satır sonları ekleyin. Bunları elle eklemek zorundasınız gq. Bunun için ayrıca textwidth(varsayılan 0'dır) ile istediğiniz değere ayarlamanız gerekir.

set textwidth=80

ve - eğer istersen - t-flag ile ayarlayarak otomatik metin sarma

set formatoptions+=t

İsterseniz, sizin için her şeyi yapmak için .vimrc'nizde bir eşleme ayarlayabilirsiniz:

nnoremap <C-j> gggqG_j

Dosyası (başlangıcına Bu hamle gg), (tüm hatları sarar gqkadar G) ve ardından _jmetni ustifies.


Biçimlendirme konusuna daha yakından bakmak için bakınız: VIM KULLANIM KILAVUZU - Biçimlendirilmiş metni düzenleme
Suuuehgi

:set fo+=aParagrafın tamamının otomatik olarak yeniden biçimlendirilmesi için çok kullanışlı bir seçenek buldum . :help fo-tableDiğer seçeneklere bir göz atın . Burada ayrıca güzel bir video eğitimi var .
Suuuehgi

Tamamen yerleşik bir çözüm için +1. _jMakro tarafından eklenen haritalama benim için dosyanın tamamını haklı görünüyor, ya da bir linewise görsel seçimi ile sınırlandırılabilir.
Ches

5

Nano'nun yardımı ^J"Yasakla" komutunu çağırırken, aslında metni haklı çıkarmaz , ekranın sağ kenarından önce çizgileri kıran metni yeniden biçimlendirir (veya bazı yapılandırılabilir sütunlarda sanırım).

Sen değişkeni ayarlayarak VIM aynı şeyi yapabilir textwidthdan, :help 'textwidth':

Eklenen maksimum metin genişliği. Bu genişliği elde etmek için beyaz boşluktan sonra daha uzun bir çizgi kesilecektir. Sıfır değeri bunu devre dışı bırakır.

Başka bir deyişle: siz yazarken, bir satır textwidthkarakterlerden daha uzunsa, VIM, satır uzunluğunu daha az veya eşit tutmak için satırı ilk boşluğa saracaktır textwidth.

Bunun çalışması için seçeneğin formatoptionsharfi içermesi gerekir t. Bkz :help 'formatoptions've :help fo-tablemevcut seçenekler için, örneğin ilginizi çekebilir cyorumlarla işi biçimlendirme yapmak için seçenek.

Düzenleme : Eğer koymak gerek kalmadan, aynı işlemi gerçekleştirebilirsiniz tiçinde formatoptionskomutunu kullanarak, gw{motion}o anki imleç konumu ve sonrasında imlecin konumu arasındaki metni biçimlendirir, {motion}. gwKomut görsel modda da mevcuttur, bu seçili metni biçimlendirmek.


1
Yazmak için iyi. Bunu önceden var olan metinler için uygulayabilir miyim?
SF.

3

İşte iki kolay seçenek:

  1. bir metin bloğu seçiliyken yazın !fmt
  2. imleciniz bir bloğun başlangıcında !}fmt

Her ikisi de unix'e bir metin bloğu gönderir fmt, man fmtseçeneklere bakın . Seçenek argümanlarını vim'den iletebilirsiniz. Örneğin, bir bloğu 50 karakter genişliğinde biçimlendirmek için yazın !}fmt -w 50.


bunun için üzgünüm, şimdi düzeltildi
kaan

Ayrıca , sonucunuzu beğenmiyorsanız, tüm dosyanızı yazarak :%!fmtve tek bir öğeyle geri alarak de biçimlendirebilirsiniz u.
Joker,

-1

Görsel komutu kullanarak metni işaretleyin ve sonra kullanın:

:!par 40j 

40 sütun genişliği ve jhaklı anlamına gelir.


2
Sitemize hoşgeldiniz! Sorunuz şu anda düşük kalitede çünkü kullandığınız araçla ( par) ve çözümünüzün neden çalıştığıyla ilgili açıklamalar bulunmuyor . Yanıtınızın kalitesini yükseltmek ve gelecek okuyucular için daha kullanışlı hale getirmek için daha fazla ayrıntı eklemek isteyebilirsiniz.
statox
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.