Takas işlevi bağımsız değişkenleri


19

Kodu yeniden düzenlerken işlev bağımsız değişkenlerini değiştirebilmek yararlı olacaktır.

Örneğin:

func(foo[0], bar(), baz.spam)

içine

func(baz.spam, foo[0], bar())

İşlev parantezlerini ve virgülleri yerinde tutarak, sola / sağa argümanları değiştirmenin bir yolu var mı?


Not: Kendileri, kendi bağımsız değişkenleriyle işlev çağrıları olan argümanları hesaba katmak istiyorsanız , bunun oldukça karmaşık hale gelebileceğini unutmayın - örneğin: func(baz->spam, foo[0], bar(a, b, c))- bu davaları desteklemek, muhtemelen daha kapsamlı bir ayrıştırma gerektirecektir.

Yanıtlar:


23

Eklenti olmadan

| imleç konumunu gösterir

func(foo[0], bar(), |baz.spam)

Adımlar:

  1. dt) silinecek baz.spam
  2. Ff imleci içindeki f karakterine götürür foo[0]
  3. vt,p foo [0] 'u silecek ve onunla değiştirecek baz.spam
  4. $P fooyu [0] parensin önüne yapıştıracak
  5. Diğerleri için 1-4. Adımları tekrarlayın.

Eklentiler ile

  • vin -argümentatif : Peter Rincker : Fonksiyon argümanlarında gezinmek için metin nesneleri sağlar (Varsayılan eşlemeler: <,ve >,).
  • vim-değişim ile Tom McDonald : Santrala iki seçim (: Varsayılan eşleştirmeleri kullanışlı eşleştirmeleri sağlar cxnormal modda ve Xgörsel modunda).
  • vim-sideways by Andrew Radev : İşlev bağımsız değişkenlerini (ve diğer sınırlandırılmış öğeler) sola ve sağa taşı (Varsayılan eşlemeler:) NA.
  • vim-takas yoluyla machakann : Tekrar sipariş öğeleri ayrılmış (: Varsayılan eşleştirmeleri g<ve g>).

6
eklenti olmayan çözüm dava için çok özel ...
elyashiv

3
@elyashiv, herhangi bir işlev argümanı için benzer bir teknik kullanabilmenizdir. Temel olarak, bir kelimeyi çekin, görsel olarak başka bir kelime seçin, yapıştırın, Vim silinmiş karakteri kayıt defterine çeker ve sonra ilk nereden geldiğinizi yapıştırın.
akshay

1
Vim-side için +1! Son bölümde çok hoş bir özellik açıklanmaktadır: cia "tartışmada değişiklik". ❤️
Martijn Courteaux

5

3 yöntem sunuyorum. İlk ikisi daha az tuş vuruşu gerektiren özel durumlardır. Sonuncusu geneldir. |imleç konumunu temsil eder.


Bitişik bağımsız değişkenleri değiştir (son iki saat için çalışmaz)

function func(foo[0], |bar(), baz.spam, qux->norf)

Adımlar:

  1. dW geçerli Word'ü sil (bağımsız değişken)
  2. W sonraki argümanın ilk karakterine git
  3. P imleçten önce yapıştır

Son iki argümanı değiştir

function func(foo[0], bar()|, baz.spam, qux->norf)

Adımlar:

  1. dt, bir sonraki virgülün sonuna kadar sil
  2. E sonraki argümanın son karakterine git
  3. P imleçten önce yapıştır

İki bağımsız değişkeni değiştirin

function func(|foo[0], bar(), baz.spam, qux->norf)

Adımlar:

  1. vt,d virgül alana kadar görsel olarak sil
  2. W takas etmek istediğiniz argümana ulaşıncaya kadar birkaç kez
  3. gP imlecin önüne yapıştır ve yapıştırılan içerikten sonra imleci karakterin üzerine getir
  4. dt,bir sonraki virgülün sonuna kadar sil. yerine ,göre )bu son argüman ise
  5. `< son görsel alanın başlangıcına geri dön (imleç virgül üzerine yerleştirilir)
  6. P imleçten önce yapıştır

Düzenleme: @ aharris88 tarafından işaret edildiği gibi OP son argümanın ilk olmasını ve diğerlerinin tümünü doğru hareket etmesini ister.

Bağımsız değişkenleri sağa döndürme

function func(foo[0], bar(), baz.spam|, qux->norf)

Adımlar:

  1. dw silmek ,␣
  2. dt) son argümanı sil
  3. %p açılış parantezine atla ve son argümanı yapıştır
  4. a,␣ virgül ve boşluk ekle
  5. <Esc> normal moda dön

Veya normal moddan çıkmak istemiyorsanız:

  1. "rdw,␣sicile silr
  2. dt) son argümanı sil
  3. %p açılış parantezine atla ve son argümanı yapıştır
  4. "rp kayıt içeriğini yapıştır r

Bonus: her vaka için bir GIF: takas1 , takas2 , takas3 ve döndür


Bu cevap argümanları değiştirirken, son argümanı başlangıca nasıl taşıyacağımız sorusuna cevap vermez.
aharris88

@ aharris88, haklısın. Cevabımı düzenledim.
Gonçalo Ribeiro
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.