2011-10-18 22 views
12

Wiem, że mogę zaznaczyć tekst w cudzysłowie/cudzysłowach, wydając vi' lub vi". Na przykład, z kursorem w H, mogę wybrać World wydając vi"Zaznaczanie tekstu wewnątrz nawiasów spoza nawiasu w Vim

Hello "World" 

Ale to nie wydaje się działać, jeśli miałem

Hello (World) 

Jeśli mój kursor znajduje się H i staram się wybrać World przy użyciu vi), to nie działa. Wydaje się, że jedynym sposobem na zrobienie tego jest przesunięcie kursora wewnątrz nawiasów i wydanie vi). Dlaczego zaznaczania tekstu w środku) i "różnią się w ten sposób?

+0

Jestem pewien, że na to pytanie już udzielono odpowiedzi, ale nie mogę go znaleźć! –

Odpowiedz

25

różnica między {a, i} × {(, ), b} poleceń obiekt tekstowy i ich ", ', ` odpowiednikami wynika głównie z różnych definicje blokowe i cudzysłowie (patrz :help v_ab, :help v_aquote).

Chociaż ten ostatni jest tekst z poprzedniego cytując characte r na bieżącej linii , aż do następnej na tej samej linii (z pominięciem), pierwszy z nich to tekst między n-tym poprzednim nieposiadanym nawiasem otwierającym a odpowiadającym mu zamykającym nawiasem. Po prostu, polecenie va( (bez zliczenia) jest podobne do [(v% -jeśli nie ma nieprzypisanych nawiasów przed kursorem, oba wybierają nic. Jednak komenda va" skanuje bieżącą linię, aby znaleźć pasującą parę cudzysłowów w każdym razie.

Głównym powodem tej różnicy w zachowaniu, jak sądzę, jest to, że notowane struny, w przeciwieństwie do nawias, są traktowane jako non-zagnieżdżona (przynajmniej w perspektywę wbudowany w vim obiektów tekstowych).

Aby zaznaczyć tekst w następnym nawiasie na bieżącej linii, można użyć

%vi(

lub

%va(

zawierać nawiasów do wyboru.

+0

+1, to jest piękne, dziękuję. – romainl

+0

Niestety to rozwiązanie działa tylko w nawiasach, a nie w żadnym innym rodzaju wspornika. –

+3

@Daniel: Po prostu użyj '% vi [', '% vi {', '% vi <' itd. Odpowiednio dla kwadratowych, kręconych, kątowych nawiasów klamrowych itp. –

Powiązane problemy