İşlemleri bir kod bölümü ile sınırlama


10

Günlük iş hayatımda, bir değişkeni vurgulamak veya aramak gibi şeyler üzerinde çalışmam gereken birçok kez var, ancak hiçbir zaman düzenlemelerin / aramanın kapsamını sınırlamayı başaramadım.

Vim'de $colorbu parantez kümelerinin veya bu katın vb . İçindeki tüm referansları bulmak için seçici bir yol var mı? Mümkünse, bunun nispeten genel olması idealdir, böylece metin Düzenleme / Değiştirme için uygulanabilir.

Örnek olarak:

$color = "#fff";
function PickColor () {
  $color = "#bbb";
  $newColors = ["#000", "#fbf", $color];
  foreach ($newColors as $c) {
    if ($c == "#fff") {
       break;
    }
  }
}
$differentColor = $color;

Bu kod nispeten kötü bir örnektir, ancak $ color'ın tüm örneklerini değiştirmeniz gerekirse, bunu PickColor işlevi bağlamında nasıl yapabilirim. Başka bir örnek olarak, #ve kullanarak *bu metin nesnesinin bir sonraki örneğine gidebilirsiniz, arama satırının kapsamını, binlerce satıra yayılabilen ve kaybeden tüm dosyanın aksine yalnızca bu işleve (temelde aramayı sarar) nasıl sınırlayabilirsiniz? ya da yanlış bir şekilde yerine getirmemeniz gereken başka bir işlev mi?

Yanıtlar:


15

İşte bunu yapmanın birkaç yolu.

1  | $color = "#fff";
2  | function PickColor () {
3  |     $color = "#bbb";
4  |     $newColors = ["#000", "#fbf", $color];
5  |     foreach ($newColors as $c) {
6  |         if ($c == "#fff") {
7  |             break;
8  |         }
9  |     }
10 | }
11 | $differentColor = $color;

Örneğinizi satır numaralarını içerecek şekilde değiştirdim.

Yani şimdi örneklerini yerini alabilir $colorsözü söyleyen, $newColoraşağıdaki şekillerde.

Satır Numarası Aralıkları

:1,11s/\$color/$newColor/g

Bu, ikamenin 1-11 hatları dahil olmasını sağlar.

Bağıl Çizgi Aralıkları

İmlecinizi 1. satıra getirin, sonra ...

:.,11s/\$color/$newColor/g

Bu, aralığın geçerli satırla başladığını ve 11. satırda sona erdiğini söylüyor.

Görsel Seçim Aralıkları

1. satıra gidin ve Shift+Vardından düğmesine basın G. Bu görsel olarak çizgi 1'i seçer. Sonra ...

:'<,'>:s/\$color/$newColor/g

Bu, ikameyi seçiminizin kapsadığı aralıkla sınırlar. Vim, etkin bir seçimle '<,'>bastığınızda aralığı sizin için otomatik olarak ekler :.


Vim'i seviyorum, hayatı daha kolay ve günlük olarak öğrenmek ve öğrenmek için her zaman bir şeyler var :)
Kyle Mcgill

6

Eklenti rotasını kullanmak konusunda rahatsanız , NrrwRgn var .

Görsel olarak bir blok seçersiniz, ardından :NRseçilen metinle yeni bir arabellek (bölünmüş olarak) açan komutu çalıştırırsınız . Bu arabellekte değişiklikler yapabilirsiniz ve bu dosyaya kaydettiğinizde, orijinal dosyaya da geri kaydedilir.

Bana göre, bu eklenti sorunu çok iyi çözerek, belirli bir aralığa nasıl uygulanacağını yeniden düşünmeden yapmak istediğiniz işlemlere odaklanmanıza izin verir.


Bu, yemin ettiğim eklentilerden biri .. Normal kod dosyanıza geri verebileceğiniz küçük bir çizik tamponuna sahip olmak gibi.
craigp

3

Görsel satır modunda ilgilendiğiniz bloğu seçersiniz (shift + v) ve sonra :bloğa uygulanacak komutunuzu yazarsınız.

Yani seçimde değiştirmek isterseniz, :s/string/replacement_string


sağ; örneğinVaB:s/\$color/replaced/g
wchargin

Sadece ekledim, iyi bir nokta :)
Stefan Dorunga

0

Kaşlı ayraçlar metin nesnesini '}' kullanın ve kaşlı ayraçların içinde 'i}' ile seçin

fonksiyonun açılış küme ayracı ile çizgide:

$<C-V>i}:s/\$color/$newColor/g

önce satırın sonuna gidin (açılış ayracı içinde veya içinde olacak), sonra görsel seçime gitmek için, sonra parantez metin nesnesini kullanarak seçin. 'i}' diş telleri içinde 'a}' diş telleri etrafında.

Diş teli olmayan diller için Vim Metin Nesnesi: Kesin Kılavuz bazı eklentiler önerir:

  • Python ve CoffeeScript gibi diller için Girinti Nesnesi girinti düzeyine dayalı metin nesneleri sağlar: aigeçerli girinti düzeyini ve yukarıdaki satırı içerir; iiyukarıdaki satır hariç, geçerli girinti düzeyini içerir.
  • Ruby Block , metin nesnelerine arve anahtar kelimenin irvarlığına bağlı olarak destek ekler end.
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.