Przejdź do pasujących tagów XML w Vimie


140

%Operator Vima przeskakuje do pasujących nawiasów, końcówek komentarzy i kilku innych rzeczy. Nie pasuje jednak do tagów XML (ani żadnych innych tagów, zgodnie z moją najlepszą wiedzą).

Jaki jest najlepszy sposób, aby przeskoczyć do pasującego znacznika XML za pomocą Vima?

Uwaga: To, co naprawdę chcę zrobić, to zduplikować sekcję w pliku XML bez ręcznego wyszukiwania pasującego tagu.


4
Odnosząc się do oryginalnego pytanie (poprzedzający wyjaśniające Uwaga: ), przy czym połączenie v + a + t wydaje się spadać do dołu selekcji wizualnej. Druga strona wydaje się być komendą „o” w trybie wizualnym, która przenosi cię do alternatywnego końca twojego aktualnego wyboru. Jest to skuteczna sztuczka nie tylko w dokumentach XML, ale także podczas edycji PHP / HTML (jak się zdarzyło w moim przypadku).
Justin Bell

Odpowiedzi:


73

Istnieje wtyczka vim o nazwie matchit.vim. Możesz go znaleźć tutaj: http://www.vim.org/scripts/script.php?script_id=39 . Został stworzony prawie dokładnie w celu, który opisujesz.

Zainstaluj to, umieść kursor na treści tagu (nie <>, w przeciwnym razie będzie pasował do tych) i naciśnij%, aby przejść do innego tagu. Zobacz stronę skryptu, aby dowiedzieć się, do czego jeszcze pasuje.


4
Niezłe. Cały czas siedzi na moim dysku twardym.
innaM

34
Istnieje pewna wersja matchit, która jest już dostarczana z Vimem. runtime macros/matchit.vimpowinien ją włączyć i pozwolić %na dopasowanie znaczników XML.
Svend

1
Wydaje się, że mtchit.vim jest domyślnie włączony w NeoVim.
James

Być może masz już dopasowanie, ale nie jest ono domyślnie włączone. Dodaj packadd! matchitdo, .vimrcaby ją włączyć. Czytaj więcej:help matchit
ruuter

242

Możesz to zrobić bez dodatkowych wtyczek:

  • umieść kursor na tagu
  • vat - wybierze (zewnętrzny) tag i umieści kursor na końcu
  • po dokonaniu wyboru możesz przełączać się między górą a dołem za pomocą o( aktualizacja na podstawie notatki Michaela Grubera )
  • c- zmień lub, y- skopiuj lub, ucieknij, aby wyjść z trybu wizualnego ...

Kolejną przydatną operacją jest: vit- wybierze zawartość tagu (wewnętrzną).

Aktualizacja (dzięki @elrado) Przykład: vitoumożliwia wybranie wewnętrznej zawartości tagu i ustawienie kursora na początku zaznaczonego tekstu.

Źródła: /superuser/182355/how-can-i-select-an-html-tags-content-in-vim

Dokumentacja Vima (dzięki @Geek za zwrócenie uwagi):

:help visual-operators

dostaniesz:

4. Operating on the Visual area             *visual-operators*

The objects that can be used are:
    ...
    at  a <tag> </tag> block (with tags)        |v_at|
    it  inner <tag> </tag> block            |v_it|
    ...

1
Chcę przejść do tagu, a nie „wybierać” załączoną zawartość. A jeśli mogę to zrobić za pomocą 1 lub 2 naciśnięć klawiszy, dlaczego mam naciskać 5 klawiszy za każdym razem, gdy chcę wybrać tag? (co zdarza się naprawdę DUŻO razy)
kumarharsh

2
Fajnie, że istnieje wbudowany, choć zawiły, sposób przeskoczenia do tagu zamykającego. Czy objazd przez tryb wizualny to jedyny sposób, aby się tam dostać?
Mu Mind

2
Święty Molly, zawsze uczysz się nowych rzeczy z Vimem! Jest tak wiele do nauczenia, bardzo mi to pomogło, dzięki!
gosukiwi

23
Uwaga: po dokonaniu wyboru możesz przełączać się między górą a dołem za pomocą „o”
Michael Gruber

3
@ Geek, „t” oznacza „tag”. Aby zrozumieć „a”, należy najpierw zrozumieć „i”. citzmienia i nterior znacznika - tylko zawartość. catzmienia się LL tag - zawartość i do LSO sam znacznik, zarówno podczas otwierania i zamykania.
Edward

37

OP stwierdził, że naprawdę chciał skopiować sekcję XML bez konieczności znajdowania pasującego znacznika. Można to łatwo zrobić w normalnym trybie za pomocą yat<motion>p, który szarpie tekst do środka i dołącza pasujące tagi, a następnie wkleja go. yit<motion>pjest prawie taki sam, ale nie zawiera zewnętrznych znaczników.

„Y” w łańcuchu jest oczywiście poleceniem „yank” w trybie normalnym. ( :help y)

alub imoże być używany do wybierania obiektów po operatorze, takim jak ylub wewnątrz selekcji wizualnej. Symbol po alub iokreśla, co należy wybrać. Zastosowany ttutaj typ obiektu wskazuje na znacznik SGML. ( :help object-select).

Oczywiście <motion>oznacza to po prostu przeniesienie się w wybrane miejsce i pumieszczenie wyszarpanego tekstu w tym miejscu.


ioznacza „wewnątrz” (lub „wewnętrzny”). aoznacza „a”?
nilon

@nilon aoznacza „wszystko”.
Codie CodeMonkey

Mnemonik, którego używam, aoznacza około . To ma dla mnie więcej sensu.
Kit Johnson,

5

Po prostu moja sztuczka polegająca na używaniu "yank", "object-select" (zaznaczenie tagów) i "skocz do ostatnio wyszarpanego tekstu".

yit`] 

aby przejść w prawo przed zamykającym tagiem

i

yit

aby przejść w prawo po otwarciu tagu

Uwaga: spowoduje to zmianę zawartości domyślnego rejestru

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.