मैं VI में HTML फ़ाइल के इंडेंटेशन को कैसे ठीक करूं?


130

मैं उसकी विशाल HTML फ़ाइलों के इंडेंटेशन को कैसे ठीक करूं जो सब गड़बड़ हो गया था?

मैंने सामान्य "gg=Gकमांड की कोशिश की , जो कि मैं कोड फ़ाइलों के इंडेंटेशन को ठीक करने के लिए उपयोग करता हूं। हालाँकि, यह HTML फ़ाइलों पर सही काम नहीं करता था। यह बस सभी स्वरूपण को हटा दिया।

मैंने यह भी स्थापित :filetype = xmlकरने की कोशिश की , यह देखने के लिए कि क्या यह एक XML फ़ाइल थी, को चकमा देने में मदद मिलेगी लेकिन यह अभी भी नहीं किया।

जवाबों:


91

filetype indent onमेरे अंदर के साथ .vimrc, विम HTML फ़ाइलों को काफी अच्छी तरह से इंगित करता है।

shiftwidth2 के साथ सरल उदाहरण :

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

15
इस प्रश्न पृष्ठ के HTML को एक HTML फ़ाइल में कॉपी पेस्ट करें। वीआईएम के साथ खोलें, "सेट स्मार्टइंडेंट" टाइप करें, फिर "जीजी = जी" और यह फ़ाइल के इंडेंटिंग को ठीक नहीं करता है।
mmcdole

15
इससे मेरा काम बनता है। set ft = html <cr> set si <cr> gg = G <cr>। इस पृष्ठ को काफी अच्छी तरह से चित्रित करता है।
डॉन रेबा

5
+1 ने सत्यापित किया कि "filetype indent on / off" जादू को चालू या बंद करता है।
विम कॉइनन

4
हां, स्मार्ट इंडेंट सेट करने के बाद, filetype = html, और उस पर filetype पहचान ने मेरे लिए काम किया।
mmcdole

22
से chovy.com/web-development/fix-indentation-and-tabs-in-vim पर filetype मांगपत्र के बाद ई: में पाया गया कि मैं के साथ फाइल फिर से लोड करने की जरूरत है।
मार्क स्टोबेर

189

वहाँ कई चीजें हैं जो सभी जगह में होने की जरूरत है। बस उन सभी को एक स्थान पर संक्षेप में प्रस्तुत करने के लिए:

निम्न विकल्प सेट करें:

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

फिर या तो कर्सर को फ़ाइल के शीर्ष पर ले जाएं और अंत में इंडेंट gg =G
करें : या इंडेंट करने के लिए वांछित टेक्स्ट का चयन करें और इंडेंट करने के लिए हिट =करें।


@tyrel, धन्यवाद, लेकिन मेरे लिए काम नहीं कर रहा है .. यह फ़ाइल की सामग्री है: pastebin.com/gagia8W2 । फाइल कहलाती है home.html। मुझे .php फ़ाइलों को इंडेंट करने में कोई समस्या नहीं है। यहाँ आप मेरे .vimrc: pastebin.com/FAJ0MCA9
ziiweb

1
वहाँ एक तरीका है मैं इसे .vimrc में सेट कर सकता हूं? मैं हर बार यह बताना नहीं चाहता कि मैं एक HTML फ़ाइल खोल रहा हूँ जो कि एक HTML फ़ाइल है। जीजी, =, जी शॉर्टकट के लिए बहुत बहुत धन्यवाद। वास्तव में काम करते हैं।
ज़ाकिशीन

1
ध्यान दें कि vim 7.4डिफ़ॉल्ट इंडेंटेशन सेटिंग्स में इस उदाहरण के लिए विफल हो जाएगा , के रूप htmlमें body, और pडिफ़ॉल्ट रूप से इंडेंट नहीं हैं। इस जवाब को देखें ।
कोरी क्लेन

2
smartindentजरूरी नहीं है। इसके अलावा यह C और C ++ के लिए ट्यून किया गया है, मैं autoindentइसके बजाय अधिक सामान्य का उपयोग करना पसंद करता हूं ।
कोस

यह vim7.4 के साथ बहुत अच्छा काम करता है। 7.4 में html फ़ाइलों के लिए इस कॉन्फ़िगरेशन को स्थायी बनाने का कोई तरीका @tylerl है?
14

62

स्मार्ट इंडेंटेशन का उपयोग करने में मुख्य समस्या यह है कि अगर XML (या HTML) एक लाइन पर बैठता है क्योंकि यह एक कर्ल अनुरोध से वापस आ gg=Gसकता है तो यह चाल नहीं चलेगा। इसके बजाय मैंने अभी-अभी सीधे छठी से बुलाए गए साफ-सुथरे प्रयोग का अनुभव किया है।

:!tidy -mi -xml -wrap 0 %

यह मूल रूप से VI को बताता है कि XML फ़ाइल को साफ करने के लिए साफ-सुथरी एक्सएमएल फाइल को लपेटना नहीं है, जो कि उन्हें डिफ़ॉल्ट रूप से 68 अक्षरों की चौड़ी लाइनों पर फिट करने के लिए लाइनों को लपेटता है। मैंने एक बड़ी 29MB XML फ़ाइल संसाधित की और इसमें 5 या 6 सेकंड का समय लगा। मुझे लगता है कि HTML फ़ाइल के लिए कमांड इसलिए होनी चाहिए:

:!tidy -mi -html -wrap 0 %

जैसा कि टिप्पणियों में उल्लेख किया गया है, tidyएक बुनियादी उपकरण है जिसे आप कई बेस लिनक्स / मैकओएस सिस्टम पर पा सकते हैं। यदि आप चाहते हैं कि यह मामला है, तो यहाँ प्रोजेट का पृष्ठ है: नहीं: HTML सुव्यवस्थित


1
मुझे विश्वास नहीं है कि html की आवश्यकता है, क्योंकि यह html
lsiebert के

4
आपके साथ सहमत @Iieieber। हालाँकि, मुझे लगता है कि यह तर्क को समझना आसान बनाता है और कुछ लोगों द्वारा अच्छा अभ्यास भी माना जा सकता है।
ऑस्करोसेर

2
FYI करें, चुस्त चुटकुले अगर HTML में SVG (जैसे, चार्ट, आदि) शामिल हैं।
एलेक्स क्विन

1
हाँ, यदि html कोड एक लाइन पर है, तो vim indent कमांड काम नहीं करेगा!
बुद्धिमानबुन

एक शब्दकोष में एक शब्द के अलावा सुव्यवस्थित क्या है? यह परियोजना से जुड़े बिना पूर्ण उत्तर नहीं है।
ब्रूनो ब्रोंस्की

49

जैसा कि टायलर ऊपर बताते हैं, निम्नलिखित सेट करें:

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

हालाँकि, ध्यान दें कि vim 7.4 HTML टैग्स htmlमें head,body , और कुछ अन्य कर रहे हैं नहीं डिफ़ॉल्ट रूप से इंडेंट। यह समझ में आता है, क्योंकि HTML फ़ाइल में लगभग सभी सामग्री उन टैग के अंतर्गत आती है। यदि आप वास्तव में चाहते हैं, तो आप उन टैगों को इंडेंट कर सकते हैं जैसे:

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

अधिक जानकारी के लिए " HTML इंडेंटिंग संकलित विम 7.4 में काम नहीं कर रहा है, किसी भी विचार? " और " वैकल्पिक HTML इंडेंट स्क्रिप्ट " देखें।


यह मेरी पुस्तक में विजेता है! विंडोज पर विम 7.4 का उपयोग करना और यह कार्य काल्पनिक रूप से! : डी
माइकल जे

12

यह मेरा समाधान है जो "बदसूरत" HTML खोलने के लिए अच्छी तरह से काम करता है:

vim fileIn.html -c "set sw=2 | %s/>/>\r/ | execute 'normal gg=G' | set nohlsearch | g/^\\s*\$/d"
  • swआदेश क्योंकि मेरा डिफ़ॉल्ट 4 है, जो एचटीएमएल के लिए बहुत अधिक है।
  • प्रत्येक भाग के बाद अगला भाग एक नई पंक्ति जोड़ता है (विम को लगता है कि यह एक गाड़ी वापसी है, आह)> ) के )।
  • फिर पूरी फ़ाइल के साथ फिर से इंडेंट करें =
  • तब अनहोनी >(जब से मेरे पास है)set hlsearch अपने vimrc में हूं)।
  • फिर सभी खाली / व्हाट्सएप-केवल लाइनों को हटा दें (अधिक के लिए " विम लाइनों को खाली करें " देखें , यह भी डबल-एस्केप है क्योंकि यह शेल में है)।

आप | wq! fileOut.htmlअंत में जोड़ सकते हैं यदि आप विम को बिल्कुल भी दर्ज नहीं करना चाहते हैं, लेकिन बस फ़ाइल को साफ करें।


नीट समाधान! मैंने इसे :%s/>\s*/>\r/g( gवैश्विक प्रतिस्थापन के लिए जोड़ा , और \s*अनुगामी व्हाट्सएप को हटाने के लिए) संशोधित किया । मैंने :%s/</\r</gओपन ब्रैकेट से पहले एक नई पंक्ति जोड़ने के लिए भी जोड़ा । अन्यथा जैसे टैग और <td>foo</td>जैसे विभाजित हो जाएंगे । <td>foo</td>
समझदार

निष्पक्ष बिंदु, मेरे पास डिफ़ॉल्ट रूप से वैश्विक प्रतिस्थापन है, यही वजह है कि यह मेरे समाधान में नहीं है।
adam_0

7

मैं इस स्क्रिप्ट का उपयोग करता हूं: https://github.com/maksimr/vim-jsbeautify

उपरोक्त लिंक में आपके पास सभी जानकारी है:

  1. इंस्टॉल
  2. कॉन्फ़िगर करें (पहले उदाहरण से प्रतिलिपि)
  3. Daud :call HtmlBeautify()

काम खूबसूरती से करता है!


3
हाहा, आप html + को साफ करने के लिए नोड + जेएस का उपयोग क्यों करना चाहेंगे, जिसमें नोड की तुलना में अधिक समय तक यह क्षमता बनी है ... यहां तक ​​कि मेरे दिमाग को भी
नुकसान पहुंचाता

4

क्या आपने विम साइट पर HTML इंडेंटेशन स्क्रिप्ट का उपयोग करने की कोशिश की है?


+1, मैंने ऐसा नहीं देखा। यह अच्छा होगा यदि मुझे स्क्रिप्ट चलाने की आवश्यकता नहीं है लेकिन ऐसा लगता है कि यह एकमात्र तरीका हो सकता है।
mmcdole

इस स्क्रिप्ट को अब हटा दिया गया है, और एक नया संस्करण विम के साथ आता है (उदा /usr/share/vim/vim74/indent/html.vim ) के । "2014 जुलाई 04: विम 7.4.356 या बाद में इस स्क्रिप्ट का एक वंशज शामिल है (आधिकारिक स्क्रिप्ट अब ब्रैम द्वारा बनाए रखी गई है और इसमें बड़े पैमाने पर बदलाव शामिल हैं)"
समझदार

4

यहां एक भारी-भरकम समाधान है जो आपको इंडेंट कर रहा है, साथ ही आपके द्वारा संपादित किए जा रहे सभी एचटीएमएल सुंदर-मुद्रण जो आप जरूरी नहीं चाहते हैं।

सबसे पहले, साफ डाउनलोड करें । सुनिश्चित करें कि आप अपने रास्ते में बाइनरी को जोड़ते हैं, इसलिए आप इसे किसी भी स्थान से कॉल कर सकते हैं।

इसके बाद, अपने पसंदीदा एचटीएमएल फ्लेवर का वर्णन करते हुए एक कॉन्फिग फाइल बनाएं। प्रलेखन Tidy के लिए बहुत अच्छा नहीं है, लेकिन यहाँ एक सिंहावलोकन है , और सभी विकल्पों की एक सूची है । यहाँ मेरी विन्यास फाइल है:

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

इस रूप tidyrc_html.txtमें सहेजें अपनेftplugin फ़ोल्डर में (vimfiles के तहत) सहेजें।

एक और फ़ाइल: निम्न पंक्ति को (या बनाएँ) में जोड़ें html.vim, इसमें भी ftplugin:

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

इसका उपयोग करने के लिए, बस एक HTML फ़ाइल खोलें, और टाइप करें /tidy। (वह /है)<leader> कुंजी।)

तुम वहाँ जाओ! किसी भी तरह से त्वरित समाधान नहीं है, लेकिन अब आप उन विशाल, गड़बड़ HTML फ़ाइलों को संपादित करने के लिए थोड़ा बेहतर हैं।


2

आप प्लगइन vim-autoformat को स्थापित करके स्वचालित रूप से सुव्यवस्थित और एचटीएमएल- दोनों को एकीकृत कर सकते हैं । उसके बाद, आप एक भी कीस्ट्रोक के साथ जो भी फ़ॉर्मेटर स्थापित किया गया है उसे निष्पादित कर सकते हैं।


0

मैंने सामान्य "जीजी = जी" कमांड की कोशिश की, जो कि मैं कोड फ़ाइलों के इंडेंटेशन को ठीक करने के लिए उपयोग करता हूं। हालाँकि, यह HTML फ़ाइलों पर सही काम नहीं करता था। यह बस सभी स्वरूपण को हटा दिया।

यदि विम का ऑटोफार्माट / इंडेंट gg=G "टूटा हुआ" लगता है (जैसे कि हर लाइन को छोड़ दिया जाता है), तो सबसे अधिक संभावना है कि इंडेंट प्लगइन सक्षम / लोड नहीं है। यह वास्तव में केवल खराब इंडेंटिंग करने के बजाय एक त्रुटि संदेश देना चाहिए, अन्यथा उपयोगकर्ताओं को लगता है कि ऑटोफ़ॉर्मैट / इंडेंटिंग सुविधा भयानक है, जब यह वास्तव में बहुत अच्छा है।

यह जाँचने के लिए कि इंडेंट प्लगइन सक्षम / लोड है, चलाएं :scriptnames। देखें कि .../indent/html.vimक्या सूची में है। यदि नहीं, तो इसका मतलब है कि प्लगइन लोड नहीं है। उस स्थिति में, इस पंक्ति को इसमें जोड़ें ~/.vimrc:

filetype plugin indent on

अब यदि आप फ़ाइल खोलते हैं और चलाते हैं :scriptnames, तो आपको देखना चाहिए .../indent/html.vim। फिर चलाएं gg=G, जो अब सही ऑटोफ़ॉर्म / इंडेंट करना चाहिए। (हालांकि यह नई लिंक नहीं जोड़ेगी, इसलिए यदि सभी HTML कोड एक ही लाइन पर हैं, तो यह इंडेंट नहीं किया जाएगा)।

नोट: यदि आप :filetype plugin indent onइसके बजाय vim कमांड लाइन पर चल रहे हैं ~/.vimrc, तो आपको फ़ाइल को फिर से खोलना होगा :e

इसके अलावा, आपको इसके बारे में autoindentऔर smartindentसेटिंग्स के बारे में चिंता करने की ज़रूरत नहीं है , वे इसके लिए प्रासंगिक नहीं हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.