Podczas używania ci"kursor nie musi znajdować się w obszarze podwójnego cudzysłowu.
|String somestring = "some text";
Zakładając, że rura jest pozycją kursora, ci"spowoduje przeskok do cytowanego obszaru.
Z drugiej strony, podczas używania ci(, kursor musi znajdować się w nawiasach, aby działał i nie przesuwał kursora w nich.
Jaki jest powód tej różnicy w zachowaniu? Zakładam, że istnieje sposób odwzorowania kluczy, aby takie zachowanie było obecne. Czy mają to jakieś wady?
cursor-motions
cursor-movement
Rozbójnik
źródło
źródło
Odpowiedzi:
Główną różnicą jest to, że wyrażenia w nawiasach (celowane przez
ci(
) mogą być zagnieżdżone, podczas gdy ciągi cytowane (celowane przezci"
) nie.Jeśli kursor znajduje się poza jakimś wyrażeniem w nawiasie, może nadal znajdować się w innym. Na przykład (
*
zaznacza pozycję kursora):Linia, na której znajduje się kursor, zawiera
(1, 2, 3)
również kursor wewnątrz większegoarray(...)
bloku. W tym przypadku większy jest odpowiednim celemci(
.Jeśli kursor znajduje się poza ciągiem cytowanym, ponieważ nie można go zagnieździć, nie ma nic rozsądnego do zrobienia. Tak więc Vim wykorzystuje przewagę i znajduje pierwszy cytowany ciąg w wierszu.
źródło
Rodzina cytat obiektów tekstowych (
i'
,i"
,a'
, ia"
) są inne niż reszty obiektów tekstowych, które wyglądają tylko w bieżącym wierszu. Z tego powodu postanowiono nie wymagać, aby kursor znajdował się w cudzysłowie. Zamiast tego Vim będzie szukał w wierszu do przodu, aby znaleźć cytowany ciąg, gdy kursor nie znajduje się już w jednym wierszu.Jest dyskusja wokół niektórych poprawek, które pozwoliłyby to naprzód poszukiwania zachowanie mają być realizowane w oparciu o blokowych obiektów tekstowych, jak również.
źródło
Inne odpowiedzi dotyczyły tego, dlaczego tak się dzieje. Oto dobry sposób na obejście tego.
wellle / target.vim . Niedawno znalazłem tę wtyczkę i myślę, że jest bardzo niedoceniana. Zapewnia ona nowy obiekt tekstowy:
din(
Mnemonic. (D) suĹ (i) nside (n) ext „(” To jest kompatybilny z innymi operatorami i różnych przedmiotów, takich jakan(
,in"
,il(
(wewnątrz ostatnim nawiasie)Zastępuje również domyślne zachowanie,
i(
aby najpierw sprawdzić, czy kursor znajduje się w nawiasach, a następnie, jeśli tak nie jest, działa tak samo jakin(
. To zachowanie można włączyć lub wyłączyć. Na przykład:Pisanie
ci(
działa tak samocin(
, ponieważ kursor nie znajduje się w nawiasach.Akceptuje to także liczbę:
Wpisywanie
c2in(
:Zapewnia to również nowy obiekt „argument”. Na przykład
dana
oznacza „Usuń wokół następnego argumentu”. To także akceptuje liczbę. Na przykład:Wpisywanie
d3ana
:Istnieje wiele innych funkcji, ten plugin ma, ale to są te podstawowe.
źródło