Jak naprawić wcięcia w jego ogromnych plikach HTML, które były pomieszane?
Wypróbowałem zwykłe "gg=G
polecenie , którego używam, aby naprawić wcięcia plików kodu. Jednak wydawało się, że nie działa dobrze na plikach HTML. Po prostu usunął całe formatowanie.
Próbowałem też ustawić :filetype = xml
, aby zobaczyć, czy oszukanie go w myśleniu, że to plik XML, pomogłoby, ale nadal tego nie robi.
html
vim
vi
indentation
mmcdole
źródło
źródło
Jest kilka rzeczy, które muszą być gotowe. Podsumowując je wszystkie w jednym miejscu:
Ustaw następującą opcję:
:filetype indent on :set filetype=html # abbrev - :set ft=html :set smartindent # abbrev - :set si
Następnie albo przesuń kursor na górę pliku i wykonaj wcięcie do końca:
gg
=G
Lub wybierz żądany tekst do wcięcia i naciśnij, =aby go wciąć.
źródło
home.html
. Nie mam problemu z wcięciem plików .php. Tutaj masz moje .vimrc: pastebin.com/FAJ0MCA9vim 7.4
domyślnych ustawień wcięcia będzie nie na tym przykładzie, jakhtml
,body
ip
nie są wcięte domyślnie. Zobacz tę odpowiedź .smartindent
nie jest konieczne. Jest również dostrojony do C i C ++, wolęautoindent
zamiast tego używać bardziej ogólnych .Głównym problemem związanym z inteligentnym wcięciem jest to, że jeśli XML (lub HTML) znajduje się w jednej linii, ponieważ może w końcu wrócić z żądania curl, to
gg=G
nie zadziała. Zamiast tego właśnie doświadczyłem dobrego wcięcia przy użyciu tidy wywołanego bezpośrednio z VI::!tidy -mi -xml -wrap 0 %
Zasadniczo mówi to VI, aby wywoływał tidy w celu wyczyszczenia pliku XML bez zawijania wierszy w celu dopasowania ich do domyślnych linii o szerokości 68 znaków. Przetworzyłem duży plik XML o wielkości 29 MB i zajęło to 5 lub 6 sekund. Domyślam się, że dla pliku HTML polecenie powinno wyglądać następująco:
:!tidy -mi -html -wrap 0 %
Jak wspomniano w komentarzach,
tidy
jest to podstawowe narzędzie, które można znaleźć w wielu podstawowych systemach Linux / MacOS. Oto strona projektu na wypadek, gdybyś chciał, ale nie masz: HTML Tidy .źródło
Jak Tylerl wyjaśnia powyżej, ustaw następujące elementy:
:filetype indent on :set filetype=html :set smartindent
Jednak należy pamiętać, że w vim 7.4 znaczniki HTML
html
,head
,body
, i niektórzy inni nie wcięty domyślnie. Ma to sens, ponieważ prawie cała zawartość pliku HTML podlega tym znacznikom. Jeśli naprawdę chcesz, możesz ustawić wcięcia tych tagów w następujący sposób::let g:html_indent_inctags = "html,body,head,tbody"
Zobacz „ Wcięcia HTML nie działają w skompilowanym Vimie 7.4, jakieś pomysły? ” I „ alternatywny skrypt wcięć HTML ”, aby uzyskać więcej informacji.
źródło
Oto moje rozwiązanie, które dobrze sprawdza się przy otwieraniu „brzydkiego” HTML-a w ładnie rozmieszczony sposób:
vim fileIn.html -c "set sw=2 | %s/>/>\r/ | execute 'normal gg=G' | set nohlsearch | g/^\\s*\$/d"
sw
polecenie jest spowodowane tym, że moja domyślna wartość to 4, co jest zbyt wysokie dla HTML.>
).=
.>
(ponieważ mamset hlsearch
w moim vimrc).Możesz nawet dodać
| wq! fileOut.html
na końcu, jeśli w ogóle nie chcesz wchodzić do Vima, ale po prostu wyczyść plik.źródło
:%s/>\s*/>\r/g
(dodałem ag
dla globalnego zastąpienia i\s*
aby usunąć końcowe białe znaki). Dodałem również,:%s/</\r</g
aby dodać nową linię przed otwartym nawiasem. W przeciwnym razie tagi like<td>foo</td>
zostaną podzielone jak<td>
ifoo</td>
.Używam tego skryptu: https://github.com/maksimr/vim-jsbeautify
W powyższym linku masz wszystkie informacje:
:call HtmlBeautify()
Wykonuje swoją pracę pięknie!
źródło
Czy próbowałeś użyć skryptu wcięć HTML na stronie Vim?
źródło
/usr/share/vim/vim74/indent/html.vim
.). „4 lipca 2014 r .: Vim 7.4.356 lub nowszy zawiera potomka tego skryptu (oficjalny skrypt jest teraz obsługiwany przez Brama i zawiera ogromne zmiany)”Oto ciężkie rozwiązanie, które umożliwia tworzenie wcięć, a także wszystkie ładne wydruki HTML, o które niekoniecznie chcesz się przejmować podczas edycji.
Najpierw pobierz Tidy . Upewnij się, że dodałeś plik binarny do swojej ścieżki, abyś mógł wywoływać go z dowolnego miejsca.
Następnie utwórz plik konfiguracyjny opisujący Twój ulubiony smak HTML. Dokumentacja nie jest świetna dla Tidy, ale oto przegląd i lista wszystkich opcji . Oto mój plik konfiguracyjny:
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
Zapisz to
tidyrc_html.txt
w swoimftplugin
folderze (w vimfiles).Jeszcze jeden plik: dodaj następujący wiersz do (lub utwórz)
html.vim
, również wftplugin
:map <leader>tidy :%! tidy -config ~/vimfiles/ftplugin/tidyrc_html.txt <CR>
Aby z niego skorzystać, po prostu otwórz plik HTML i wpisz
/tidy
. (To/
jest<leader>
klucz.)Proszę bardzo! W żadnym wypadku nie jest to szybkie rozwiązanie, ale teraz jesteś trochę lepiej przygotowany do edycji tych ogromnych, popsutych plików HTML.
źródło
Możesz automatycznie zintegrować tidy i html-beautify , instalując wtyczkę vim-autoformat . Następnie możesz uruchomić dowolny program formatujący, który jest zainstalowany, za pomocą jednego naciśnięcia klawisza.
źródło
Żadna z odpowiedzi nie działała dla mnie, ponieważ cały mój kod HTML znajdował się w jednej linii.
Zasadniczo musisz najpierw podzielić każdy wiersz za pomocą następującego polecenia, które zastępuje
><
te same znaki, ale z podziałem wiersza pośrodku.:%s/></>\r</g
Potem polecenie
gg=G
spowoduje wcięcie pliku.
źródło
Jeśli autoformatowanie / wcięcie vima
gg=G
wydaje się być "zepsute" (np. Wcięcie po lewej stronie każdej linii), najprawdopodobniej wtyczka indent nie jest włączona / załadowana. Powinien naprawdę dać komunikat o błędzie zamiast po prostu robić złe wcięcia, w przeciwnym razie użytkownicy po prostu uważają, że funkcja autoformatowania / wcięć jest okropna, podczas gdy w rzeczywistości jest całkiem dobra.Aby sprawdzić, czy wtyczka indent jest włączona / załadowana, uruchom
:scriptnames
. Sprawdź, czy.../indent/html.vim
jest na liście. Jeśli nie, oznacza to, że wtyczka nie została załadowana. W takim przypadku dodaj tę linię do~/.vimrc
:filetype plugin indent on
Teraz, jeśli otworzysz plik i uruchomisz
:scriptnames
, powinieneś zobaczyć.../indent/html.vim
. Następnie uruchomgg=G
, co powinno teraz wykonać poprawne autoformatowanie / wcięcie. (Chociaż nie doda nowych linii, więc jeśli cały kod html znajduje się w jednym wierszu, nie będzie wcięty).Uwaga: jeśli
:filetype plugin indent on
zamiast tego korzystasz z wiersza poleceń vim~/.vimrc
, musisz ponownie otworzyć plik:e
.Nie musisz się też martwić o ustawienia
autoindent
ismartindent
ustawienia, nie są one do tego istotne.źródło