VI'daki bir HTML dosyasının girintisini nasıl düzeltirim?


130

Tümüyle karışık olan devasa html dosyalarının girintisini nasıl düzeltirim?

Kod dosyalarının girintisini düzeltmek için kullandığım normal "gg=Gkomutu denedim . Ancak, HTML dosyalarında doğru çalışmıyor gibi görünüyordu. Sadece tüm biçimlendirmeyi kaldırdı.

Ayrıca ayarlamayı denedim :filetype = xml, bunun bir XML dosyası olduğunu düşünmek için onu kandırıp kandırmayacağını görmek için yardım ettim ama yine de yapmadı.

Yanıtlar:


91

İle filetype indent oniç benim .vimrc, Vim girintiler HTML oldukça güzel dosyaları.

shiftwidth2'li basit örnek :

<html>
  <body>
    <p>
    text
    </p>
  </body>
</html>

15
Bu soru sayfasının html'sini kopyalayıp bir html dosyasına yapıştırın. VIM ile açın, "set smartindent" yazın ve ardından "gg = G" yazın ve dosyanın girintisini düzeltmez.
mmcdole

15
Benim için çalışıyor. ft = html <cr> ayarla si <cr> gg = G <cr> olarak ayarlayın. Bu sayfayı oldukça iyi biçimlendiriyor.
Don Reba

5
+1, "dosya türü girintisini açma / kapatma" nın sihri açıp kapattığını doğruladı.
Wim Coenen

4
Evet, akıllı girinti, filetype = html ve dosya türü tanımlamasını ayarladıktan sonra benim için çalıştı.
mmcdole

22
Gönderen chovy.com/web-development/fix-indentation-and-tabs-in-vim üzerinde filetype girintisi sonra e: Birlikte dosyasını yeniden gerekiyordu bulundu.
Marc Stober

189

Hepsinin yerinde olması gereken birkaç şey var. Hepsini tek bir yerde özetlemek gerekirse:

Aşağıdaki seçeneği ayarlayın:

:filetype indent on
:set filetype=html           # abbrev -  :set ft=html
:set smartindent             # abbrev -  :set si

Sonra ya imleci dosyanın üstüne taşıyın ve sonuna kadar girintileyin: gg =G
Ya da girintilemek için istenen metni seçin ve =girintilemek için basın.


@tyrel, teşekkürler, ama benim için çalışmıyor .. Dosyanın içeriği bu: pastebin.com/gagia8W2 . Dosya denir home.html. Php dosyalarını girintilemekle ilgili herhangi bir problemim yok. Burada
.vimrc'im

1
Bunu .vimrc dosyasında ayarlamanın bir yolu var mı? Bir HTML dosyasını her açtığımda bunun bir HTML dosyası olduğunu söylemek istemiyorum. Gg, =, G kısayolu için çok teşekkürler. Gerçekten kullanışlı.
zakishaheen

1
O Not vim 7.4varsayılan girinti ayarları olacaktır başarısız olarak, bu örneğin html, bodyve pvarsayılan olarak girintili değildir. Bu cevaba bakın .
Cory Klein

2
smartindentgerekli değil. Ayrıca C ve C ++ için ayarlanmış, autoindentbunun yerine daha genel kullanmayı tercih ediyorum .
Kos

Vim7.4 ile harika çalışıyor. @tylerl, bu yapılandırmayı 7.4'te html dosyaları için kalıcı hale getirmenin bir yolu var mı?
xaph

62

Akıllı girintiyi kullanmanın ana sorunu, XML (veya HTML) bir curl isteğinden geri gelebileceği için tek satırda oturursa gg=Ghile yapmayacağıdır. Bunun yerine, doğrudan VI'dan çağrılan tidy kullanarak iyi bir girinti deneyimledim:

:!tidy -mi -xml -wrap 0 %

Bu, temel olarak VI'ya, satırları varsayılan 68 karakter geniş satırlara sığdırmak için sarmayan bir XML dosyasını temizlemek için tidy'yi çağırmasını söyler. 29MB büyüklüğünde büyük bir XML dosyasını işledim ve 5 veya 6 saniye sürdü. Sanırım bir HTML dosyası için komut şu şekilde olmalıdır:

:!tidy -mi -html -wrap 0 %

Yorumlarda belirtildiği gibi tidy, birçok temel Linux / MacOS sisteminde bulabileceğiniz temel bir araçtır. İstediğiniz halde sahip olmanızı istememeniz durumunda projenin sayfası şu şekildedir: HTML Tidy .


1
Varsayılan olarak html olduğu için
html'ye

4
Seninle @Isieber kabul etti. Bununla birlikte, mantığı anlamayı kolaylaştırdığını ve hatta bazı insanlar tarafından iyi bir uygulama olarak kabul edilebileceğini tahmin ediyorum.
oscaroscar

2
Bilginize, HTML SVG içeriyorsa (ör. Grafikler vb.) Düzenli tıkanmalar olur.
Alex Quinn

1
Evet, html kodu tek satırdaysa, vim girinti komutu çalışmayacaktır!
akıllıca

Sözlükteki bir sözcükten başka ne derli toplu? Bu, projeye bağlanmadan tam bir cevap değildir.
Bruno Bronosky

49

Tylerl'ın yukarıda açıkladığı gibi, aşağıdakileri ayarlayın:

:filetype indent on
:set filetype=html
:set smartindent

Ancak, nota vim 7.4 HTML etiketleri o html, head, bodyve bazı diğerleri vardır değil varsayılan olarak girintili. Bir HTML dosyasındaki neredeyse tüm içerik bu etiketlerin altına düştüğü için bu mantıklıdır. Gerçekten istiyorsanız, bu etiketlerin şu şekilde girintili olmasını sağlayabilirsiniz:

:let g:html_indent_inctags = "html,body,head,tbody" 

Daha fazla bilgi için " HTML girintisi derlenmiş Vim 7.4'te çalışmıyor, herhangi bir fikir var mı? " Ve " alternatif html girinti komut dosyası " bölümlerine bakın.


bu kitabımın galibi! Windows'ta Vim 7.4 kullanmak ve bu harika bir şekilde çalışıyor! : D
Michael J

12

Bu, "çirkin" HTML'yi güzel aralıklarla açmak için iyi çalışan çözümüm:

vim fileIn.html -c "set sw=2 | %s/>/>\r/ | execute 'normal gg=G' | set nohlsearch | g/^\\s*\$/d"
  • swBenim varsayılan HTML için çok yüksek olan 4 olduğu için komuttur.
  • Sonraki kısım, her öğeden ( >) sonra bir satırsonu ekler (Vim bunun bir satır başı olduğunu düşünür, iç çeker ).
  • Ardından tüm dosyanın girintisini ile yeniden girin =.
  • Sonra vurguyu kaldırın >( set hlsearchvimrc'imde olduğu için).
  • Sonra tüm boş / yalnızca boşluk satırlarını kaldırın (daha fazlası için " Vim boş satırları sil " konusuna bakın , ayrıca bu, kabukta olduğu için çift çıkışlıdır).

| wq! fileOut.htmlVim'e hiç girmek istemiyorsanız sonuna kadar ekleyebilirsiniz , ancak dosyayı temizleyin.


Düzgün çözüm! Olarak değiştirdim :%s/>\s*/>\r/g( ggenel değiştirme için bir ekledim ve \s*sondaki beyaz boşluğu kaldırdım). :%s/</\r</gAçık köşeli parantezden önce yeni satır eklemek için de ekledim . Aksi takdirde etiketleri gibi <td>foo</td>gibi bölünmüş olurdu <td>ve foo</td>.
bilgece

Doğru nokta, varsayılan olarak global değiştirmeyi açtım, bu yüzden çözümümde yok.
adam_0


4

Vim sitesinde HTML girinti komut dosyasını kullanmayı denediniz mi?


+1, bunu görmedim. Bir komut dosyası çalıştırmam gerekmeseydi güzel olurdu ama görünen o ki tek yol bu olabilir.
mmcdole

Bu komut dosyası artık kullanımdan kaldırılmıştır ve daha yeni bir sürüm vim (örn. /usr/share/vim/vim74/indent/html.vim) İle birlikte gelir . "2014 Temmuz 04: Vim 7.4.356 veya sonraki sürümleri bu komut dosyasının soyundan gelenleri içeriyor (resmi komut dosyası artık Bram tarafından korunmaktadır ve büyük değişiklikler içermektedir)"
akıllıca

4

İşte size girintileme sağlayan ağır bir çözüm ve ayrıca düzenleme sırasında umursamak istemediğiniz tüm HTML güzel baskıları.

Önce Tidy'yi indirin . İkili dosyayı yolunuza eklediğinizden emin olun, böylece onu herhangi bir yerden çağırabilirsiniz.

Ardından, en sevdiğiniz HTML çeşidini açıklayan bir yapılandırma dosyası oluşturun. Dokümantasyon Tidy için harika değil, ancak burada bir genel bakış ve tüm seçeneklerin bir listesi var . İşte benim yapılandırma dosyam:

bare: yes
break-before-br: no
clean: yes
drop-proprietary-attributes: yes
fix-uri: yes
indent-spaces: 4
indent: yes
logical-emphasis: yes
markup: yes
output-xhtml: yes
quiet: yes
quote-marks: yes
replace-color: yes
tab-size: 4
uppercase-tags: no
vertical-space: yes
word-2000: yes
wrap: 0

Bunu klasörünüzde (vimfiles altında) olarak tidyrc_html.txtkaydedin ftplugin.

Bir daha dosyası: aşağıdaki satırı ekleyin (veya oluşturun) html.vimda, ftplugin:

map <leader>tidy :%! tidy -config ~/vimfiles/ftplugin/tidyrc_html.txt <CR>

Kullanmak için bir HTML dosyası açın ve yazın /tidy. (Yani /bir <leader>anahtar.)

İşte gidiyorsun! Hiçbir şekilde hızlı bir çözüm değil, ancak şimdi bu büyük, karışık HTML dosyalarını düzenlemek için biraz daha donanımlısınız.



0

Kod dosyalarının girintisini düzeltmek için kullandığım normal "gg = G" komutunu denedim. Ancak, HTML dosyalarında doğru çalışmıyor gibi görünüyordu. Sadece tüm biçimlendirmeyi kaldırdı.

Vim'in otomatik biçimi / girintisi gg=G "bozuk" görünüyorsa (her satırın sol gibi), büyük olasılıkla girinti eklentisi etkinleştirilmemiştir / yüklenmemiştir. Kötü girinti yapmak yerine gerçekten bir hata mesajı vermeli, aksi takdirde kullanıcılar sadece otomatik biçimlendirme / girinti oluşturma özelliğinin berbat olduğunu düşünürler, aslında oldukça iyi.

Girinti eklentisinin etkin / yüklü olup olmadığını kontrol etmek için çalıştırın :scriptnames. .../indent/html.vimListede olup olmadığına bakın . Değilse, bu eklentinin yüklenmediği anlamına gelir. Bu durumda, bu satırı şuraya ekleyin ~/.vimrc:

filetype plugin indent on

Şimdi dosyayı açıp çalıştırırsanız :scriptnames, görmelisiniz .../indent/html.vim. Ardından gg=G, şimdi doğru otomatik biçim / girintiyi yapacak şekilde çalıştırın . (Yeni satır eklemeyecek olsa da, tüm html kodu tek bir satırdaysa, girintilenmeyecektir).

Not: :filetype plugin indent onyerine vim komut satırında çalıştırıyorsanız ~/.vimrc, dosyayı yeniden açmanız gerekir :e.

Ayrıca, autoindentve smartindentayarlar için endişelenmenize gerek yoktur , bunlar bununla ilgili değildir.

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.