Neden ci "alıntılanan alanın ve ci'nin dışında olabilir (sadece parantez içinde çalışır?"


27

ci"İmleç kullanırken çift ​​alıntı alanında kalması gerekmez.

|String somestring = "some text";

Borunun imleç konumunda olduğu varsayımıyla, ci"belirtilen alana atlamasını sağlar.

Öte yandan, ci(imleçin çalışması için parantez içinde olması ve imleci onların içinde hareket etmemesi gerekir.

Davranıştaki bu farkın sebebi nedir? Anahtarları eşleştirmenin bu davranışı sağlamak için bir yolu olduğunu varsayıyorum. Bunu yapmanın sakıncaları var mı?


Yanıtlar:


25

Buradaki en büyük fark, (tarafından hedeflenen ci() parantez içindeki ifadelerin iç içe geçebileceği, alıntılanan dizelerin (hedeflenen ci") yapamamasıdır.

İmleciniz parantez içindeki bazı ifadelerin dışındaysa, yine de başka bir ifadenin içinde olabilir. Örneğin ( *imleç konumunu işaretler):

$foo = array(
    'x' => ar*ray(1, 2, 3),
);

İmlecin üzerinde bulunduğu satır, imleç (1, 2, 3)de daha büyük array(...)bloğun içindedir . Bu durumda, daha büyük olanı, uygun hedeftir ci(.

İmleciniz alıntılanan bir dize dışındaysa, yuvalanamadıkları için yapılacak hiçbir şey mantıklı değildir. Böylece, Vim avantaj elde eder ve satırdaki ilk alıntı dizeyi bulur.


10

Metin nesneleri (alıntı ailesi i', i", a', ve a") onlar sadece geçerli hat bakmak o metin nesneleri geri kalanından daha farklıdır. Bu nedenle, imlecin tırnak içinde kalmasını gerektirmemek için seçim yapıldı. Bunun yerine, Vim, imleç zaten içinde olmadığında alıntı yapılan bir dize bulmak için satır içinde ileriye doğru arama yapar.

Bu ileriye yönelik arama davranışının blok tabanlı metin nesneleri için de uygulanmasına izin verecek bazı yamalar etrafında bir tartışma vardır .


8

Diğer cevaplar bunun neden olduğunu açıkladı. İşte bunun üzerinde çalışmak için güzel bir yol.

wellle / hedefler . Geçenlerde bu eklentiyi buldum ve bence aşırı derecede düşük. Bu yeni bir metin nesnesi içerir: din(anımsatıcı. (D) elete (i) nside (n), dahili "(" Bu gibi diğer operatörler ve çeşitli nesneler, uyumlu an(, in", il((son parantez içinde)

Ayrıca i(, imlecin parantez içinde olup olmadığını görmek için ilk bakıştaki davranışı geçersiz kılar ve ardından aynı şekilde çalışmazsa in(. Bu davranış açılabilir veya kapatılabilir. Örneğin:

def foo(bar):
^cursor here

İmleç parantez içinde olmadığından, yazarak ci(aynı şekilde hareket edilir cin(.

def foo( ):
        ^Cursor here, and in insert mode

Bu aynı zamanda bir sayımı kabul eder:

def foo(bar):           #Define function foo(bar)
^cursor here

Yazarak c2in(:

def foo(bar):           #Define function foo( )
                                             ^cursor here

Bu aynı zamanda yeni bir nesne, "argüman" sağlar. Örneğin, dana"Bir sonraki argümanın çevresini sil" anlamına gelir. Bu da bir sayımı kabul eder. Örneğin:

def foo(arg1, arg2, BADarg3):
^ cursor here

Yazarak d3ana:

def foo(arg1, arg2):
                  ^ cursor here

Bu eklentinin sahip olduğu birçok özellik var, ancak bunlar temel özellikler.


1
Güzel! Bu iyi bir ektir. Bunu kontrol etmek zorunda kalabilirim.
Reaver

Güzel cevap 10/10 ancak örnekler piton çünkü ben doğru 9/10 vermelisin
Downgoat
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.