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.

Nathan Fellman
źródło
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.

sykora
źródło
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|
    ...
Robert Lujo
źródło
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.

Codie CodeMonkey
źródło
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

transang
źródło