Minęło trochę czasu, odkąd musiałem pisać jakikolwiek kod podobny do HTML Vim
, ale ostatnio znowu się z tym spotkałem. Powiedz, że piszę kilka prostych HTML
:
<html><head><title>This is a title</title></head></html>
Jak szybko napisać te zamykające tagi dla tytułu, nagłówka i HTML? Czuję, że brakuje mi tutaj naprawdę prostego sposobu, który nie wymaga zapisywania ich wszystkich jeden po drugim.
Oczywiście mogę użyć CtrlPdo autouzupełniania poszczególnych nazw tagów, ale to, co dostaje się na klawiaturę laptopa, to w rzeczywistości prawidłowe nawiasy i ukośnik.
html
xml
vim
autocomplete
wds
źródło
źródło
Ctrl-_
, ale to robi małą czcionkę na moim terminalu.Uważam, że użycie wtyczki xmledit jest całkiem przydatne. dodaje dwie funkcjonalności:
<p>
), rozwija on znacznik zaraz po wpisaniu zamykania>
do<p></p>
i umieszcza kursor wewnątrz znacznika w trybie wstawiania.Jeśli następnie natychmiast wpiszesz inny
>
( np. Wpiszesz<p>>
), to rozwinie to do<p>
</p>
i umieszcza kursor wewnątrz znacznika, jednokrotnie wcięty, w trybie wstawiania.
Xml vim Wtyczka dodaje zwijania kodu i zagnieżdżony dopasowania tag do tych funkcji.
Oczywiście nie musisz się w ogóle martwić o zamykanie tagów, jeśli napiszesz zawartość HTML w Markdown i użyjesz
%!
do filtrowania bufora Vima przez wybrany przez Ciebie procesor Markdown :)źródło
git clone https://github.com/sukima/xmledit.git ~/.vim/bundle/xmledit
. Ale działa tylko podczas edycji plików .xml. Gdy rozszerzenie pliku to .html lub .htm, to nie działa.Lubię rzeczy minimalne,
źródło
imap <silent> <C-c> </<C-X><C-O><C-X>
<Esc>F<i
na końcu tego, więc umieszcza kursor z powrotem wewnątrz tagu.,/
aby zamknąć tagUważam, że wygodniej jest sprawić, by vim napisał dla mnie zarówno tag otwierający, jak i zamykający, zamiast tylko zamykającego. Możesz użyć doskonałej wtyczki Ragtag autorstwa Tima Pope'a. Sposób użycia wygląda następująco (zaznacz | pozycję kursora), gdy wpisujesz:
naciśnij CTRL+x SPACE
i dostajesz
Możesz także użyć CTRL+ x ENTERzamiast CTRL+ x SPACEi otrzymasz
Ragtag może zrobić więcej niż tylko to (np. Wstaw <% = rzeczy wokół tego%> lub DOCTYPE). Prawdopodobnie chcesz sprawdzić inne wtyczki autora ragtag , zwłaszcza surround .
źródło
ragtag
: vim.org/scripts/script.php?script_id=1896Jeśli robisz coś skomplikowanego, sparkup jest bardzo dobry.
Przykład z ich strony:
ul > li.item-$*3
rozwija się do:z
<C-e>
.Aby zrobić przykład podany w pytaniu,
plony
źródło
Istnieje również wtyczka zencoding vim: https://github.com/mattn/zencoding-vim
samouczek: https://github.com/mattn/zencoding-vim/blob/master/TUTORIAL
Aktualizacja: to teraz nazywa się Emmet : http://emmet.io/
Fragment samouczka:
źródło
Mapowanie
Lubię, gdy moje tagi blokowe (w przeciwieństwie do wbudowanych) są natychmiast zamykane i za pomocą tak prostego skrótu, jak to tylko możliwe (lubię unikać specjalnych klawiszy, takich jak CTRLtam, gdzie to możliwe, chociaż używam
closetag.vim
do zamykania moich tagów w wierszu). Lubię tego używać skrót przy uruchamianiu bloków tagów (dzięki @kimilhee; oto początek jego odpowiedzi):Przykładowe użycie
Rodzaj-
Wynik-
gdzie
|
wskazuje pozycję kursora.Wyjaśnienie
inoremap
oznacza utworzenie mapowania w trybie wstawiania><Tab>
oznacza zamykające nawiasy ostre i znak tabulacji; to jest to, co jest dopasowane><Esc>
oznacza zakończenie pierwszego znacznika i wyjście z trybu wstawiania do normalnego trybuF<
oznacza znalezienie ostatniego otwierającego nawiasu kątowegol
oznacza przesunięcie kursora w prawo (nie kopiuj otwierającego nawiasu kątowego)yt>
oznacza szarpnięcie od pozycji kursora do góry, aż do następnego zamykającego nawiasu kątowego (tj. kopiowanie zawartości znaczników)o</
oznacza rozpoczęcie nowej linii w trybie wstawiania i dodanie nawiasu kątowego otwierającego i ukośnika<C-r>"
oznacza wklejanie w trybie wstawiania z domyślnego rejestru ("
)><Esc>
oznacza zamknięcie zamykającego znacznika i wyjście z trybu wstawianiaO<Space>
oznacza rozpoczęcie nowej linii w trybie wstawiania nad kursorem i wstawienie spacjiźródło
l
oznaczało to „dobrze”, a nie „lewo”, haha ... co za zabawny błąd. Co myślisz o moim poście? Zauważyłem, że nie głosowałeś za.au filetype html inoremap <buffer> ...
inoremap ><Tab> ><Esc>F<lyt>o</<C-r>"><Esc>kJxi
Usunąłem0<Space>
i dodałemkJxi
. Idź o 1 krok w górę, połącz dwie linie, usuń jeden znak, a następnie przejdź do trybu wstawiania.Sprawdzić
vim-closetag
To naprawdę prosty skrypt (dostępny również jako
vundle
wtyczka), który zamyka tagi (X) HTML za Ciebie. Od tegoREADME
:Uwaga:
|
jest tu kursorźródło
allml (obecnie Ragtag) i Omni-Complete (<CX> <CO>) nie działają w plikach takich jak .py czy .java.
jeśli chcesz automatycznie zamknąć tag w tych plikach, możesz mapować w ten sposób.
(^ R to Contrl + R: możesz pisać w ten sposób Control + v, a następnie Control + r)
(| to pozycja kursora) teraz, jeśli wpiszesz ..
<p> abcde |
i wpisz ^ j
następnie zamyka tag w ten sposób ...
<p> abcde </p> |
źródło
Oto kolejne proste rozwiązanie oparte na łatwym do znalezienia pisaniu w Internecie:
Automatyczne zamykanie tagu HTML
:iabbrev </ </<C-X><C-O>
Włączam zakończenie
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
źródło
Opierając się na doskonałej odpowiedzi autorstwa @KeithPinson (przepraszam, za mało punktów reputacji, aby skomentować Twoją odpowiedź), ta alternatywa uniemożliwi autouzupełnianie kopiowanie jakichkolwiek dodatkowych elementów, które mogą znajdować się w tagu HTML (np. Klasy, identyfikatory itp.) .), ale nie należy ich kopiować do tagu zamykającego.
UPDATE Zaktualizowałem swoją odpowiedź, aby pracować z
filename.html.erb
plikami.Zauważyłem, że moja pierwotna odpowiedź nie działała w plikach powszechnie używanych w widokach Railsów, na przykład
some_file.html.erb
gdy używałem osadzonego ruby (np<p>Year: <%= @year %><p>
.). Poniższy kod będzie działał z.html.erb
plikami.Przykładowe użycie
Rodzaj:
Wynik:
gdzie
|
wskazuje pozycję kursoraJako przykład dodania zamykającego znacznika w linii zamiast stylu blokowego:
Przykładowe użycie
Rodzaj:
Wynik:
gdzie
|
wskazuje pozycję kursoraTo prawda, że oba powyższe przykłady opierają się na
>[Tab]
sygnalizowanie znacznika zamykającego (czyli trzeba by wybrać albo inline lub styl grupowych). Osobiście używam stylu blokowego>[Tab]
zi stylu inline z>>
.źródło