Vim'de eşleşen XML etiketlerine atla


140

Vim %operatörü eşleşen parantezlere, yorum uçlarına ve diğer birkaç şeye atlar. Bununla birlikte, XML etiketlerini (veya başka herhangi bir etiketi, bilgim dahilinde) eşleştirmez.

Vim kullanarak eşleşen XML etiketine atlamanın en iyi yolu nedir?

Not: Ne gerçekten yapmak istediğim manuel eşleştirme etiketi için bakmadan bir XML dosyasında bir yinelenen bölüm olduğunu.


4
Orijinal soruya cevap (netleştirilmesi önceki Not: ) v + a + t kombinasyonu görsel seçimi dibine damla gibi görünüyor. Bunun diğer tarafı görsel moddaki "o" komutu gibi görünüyor ve sizi mevcut seçiminizin alternatif sonuna götürüyor. Bu, yalnızca XML belgelerinde değil, PHP / HTML'yi düzenlerken de etkili bir numaradır (kendim için olduğu gibi).
Justin Bell

Yanıtlar:


73

Matchit.vim adlı bir vim eklentisi var. Burada bulabilirsiniz: http://www.vim.org/scripts/script.php?script_id=39 . Hemen hemen tanımladığınız tam olarak yaratıldı.

Bunu yükleyin, imlecinizi etiketin gövdesinin üzerine getirin (<> ile eşleşmez, aksi takdirde bunlarla eşleşir) ve diğer etikete atlamak için% tuşuna basın. Başka neyle eşleştiğini öğrenmek için komut dosyasının sayfasına bakın.


4
Güzel bir. Her zaman sabit diskimde oturuyordu.
innaM

34
Vim ile zaten gelen btw ile birlikte gelen bazı matchit sürümü var. runtime macros/matchit.vimetkinleştirmeli ve %XML etiketleriyle eşleşmesine izin vermelidir .
Svend

1
mtchit.vim, NeoVim'de varsayılan olarak etkin görünüyor.
James

Zaten matchit'iniz var olabilir, ancak varsayılan olarak etkin değildir. Ekle packadd! matchitiçin .vimrcetkinleştirmek için. Devamını oku:help matchit
ruuter

242

Bunu ek eklentiler olmadan yapabilirsiniz:

  • imleci etikete yerleştir
  • vat - (dış) etiketi seçer ve imleci sonuna yerleştirir
  • seçiminizi yaptıktan sonra üst ve alt arasında geçiş yapabilirsiniz o( Michael Gruber'in notuna göre güncelleme )
  • c- değiştirmek veya, y- kopyalamak veya görsel moddan çıkmak için kaçmak ...

Diğer bir yararlı işlem: vit- etiketin içeriğini seçer (iç).

Güncelleme (@elrado sayesinde) Örnek: vitoetiketin iç içeriğini ve imlecin seçilen metnin başına seçilmesini sağlar.

Referans: /superuser/182355/how-can-i-select-an-html-tags-content-in-vim

Vim referansı (bunu bildirdiği için @Geek'e teşekkürler):

:help visual-operators

alacaksınız:

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
Bir etikete atlamak istiyorum, ekteki içeriği "seçmeyin". Ve 1 veya 2 tuş vuruşuyla yapabilirsem, her etiket seçmek istediğimde neden 5 tuşa basacağım? (bu aslında çok fazla olur)
kumarharsh

2
Kapanış etiketine atlamak için kıvrık da olsa yerleşik bir yol olması güzel. Görsel modda dolambaçlı yoldan geçmek oraya ulaşmanın tek yolu mudur?
Mu Mind

2
Kutsal molly, Vim ile her zaman yeni şeyler öğrenirsin! Öğrenecek çok şey var, bu bana çok yardımcı oldu, teşekkürler!
gosukiwi

23
Sadece not etmek için: Seçiminizi yaptıktan sonra 'o' ile üst ve alt arasında geçiş yapabilirsiniz
Michael Gruber

3
@Geek, 't', 'etiket' içindir. 'A'yı anlamak için önce' i 'yi anlamalısınız. citdeğiştirir i sadece içeriği - nterior etiketinin. catdeğiştirmek bir içeriği ve - etiketinin ll bir LSO etiketi kendisi açılıp kapanmasını hem.
Edward

37

OP, gerçekten yapmak istediği şeyin, eşleşen etiketi bulmak zorunda kalmadan bir XML bölümünü kopyalamak olduğunu belirtti. Bu, yat<motion>piçindeki metni soran ve eşleşen etiketleri içeren normal modda kolayca yapılır , ardından yapıştırır. yit<motion>phemen hemen aynıdır, ancak dış etiketleri içermez.

Dizedeki 'y' elbette normal mod "yank" komutudur. ( :help y)

aveya görsel bir seçim igibi yveya içinde bir operatörden sonra nesne seçimi için kullanılabilir . Sonra gelen sembol aveya ineyin seçilmesi gerektiğini belirtir. tBurada kullanılan nesne türü bir SGML etiketini belirtir. (:help object-select ).

Tabii ki <motion>sadece seçtiğiniz bir yere bir yere gitmek anlamına gelir ve pçekili metni o yere koyar.


i"iç" (veya "iç") anlamına gelir. a"a" anlamına mı geliyor?
nilon

@nilon a"all" anlamına gelir.
Codie CodeMonkey

Kullandığım anımsatıcı etraftaa duruyor . Benim için daha mantıklı.
Kit Johnson

5

Sadece "yank", "object-select" (tag select) ve "son çekili metne atla" yı kullanmam.

yit`] 

etiketi kapatmadan önce sağa atlamak için

ve

yit

etiketi açtıktan sonra sağa atlamak

Not: Bu, varsayılan kaydın içeriğini değiştirir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.