Jak wybierać między nawiasami (lub cudzysłowami lub…) w Vimie?

219

Jestem pewien, że kiedyś była taka wtyczka, ale teraz, gdy jej potrzebuję, nie mogę jej (naturalnie) znaleźć, więc po prostu zapytam ładnie i prosto.

Jaki jest najłatwiejszy sposób wyboru między nawiasami, cudzysłowami lub ogólnie listą pasujących znaków?

   write ( *, '(a)' ) 'Computed solution coefficients:'

Na przykład tutaj chciałbym wybrać (a)lub Computed solution coefficients:.

Nie interesuje mnie multiline, tylko przypadki, które występują na jednej linii.

Wieża
źródło

Odpowiedzi:

276

Użyj dowolnego klawisza nawigacyjnego, który chcesz umieścić w nawiasach, a następnie możesz użyć jednego z nich yi(lub yi)skopiować wszystko w pasujących parenach. Działa to również z nawiasami kwadratowymi (np. yi]) I nawiasami klamrowymi. Obok y, można także usunąć lub zmienić tekst (np ci), di]).

Próbowałem tego z podwójnymi i pojedynczymi cudzysłowami i wydaje się, że tam też działa. Dla twoich danych:

write (*, '(a)') 'Computed solution coefficients:'

Przesuń kursor do C, a następnie wpisz yi'. Przesuń kursor do pustej linii, naciśnij pi zdobądź

Computed solution coefficients:

Jak zauważył, CMS , działa to dla wyboru trybu wizualnego, a także - po prostu użyć vi), vi}, vi', itd.

Tim Whitcomb
źródło
1
Ogólnie szukam sposobu na wybór wszystkiego między predefiniowanymi pasującymi znakami (zwykle tylko pojedyncze i podwójne cudzysłowy oraz nawiasy wszelkiego rodzaju).
Rook
2
Co rozumiesz przez oddzielne słowa? Wypróbowałem to na „[x, y, z]” i wybrałem „x, y, z”
Tim Whitcomb,
4
Zignoruj ​​ostatni komentarz - znaleziono problem. Działa jak urok :-)
Rook
wydaje się, że działa z cytatami, a także yi"zaznacz wszystkie z cudzysłowami
stefanB
ci(lub ci)robi to, czego szukałem. Dzięki. Nadal nie rozumiem iw pełni tego przypadku, ale kogo to obchodzi, dopóki to działa, prawda? :)
justnorris
279

Aby wybrać pomiędzy pojedynczymi cudzysłowami, zwykle robię vi' („wybierz wewnętrzne pojedyncze cudzysłowy”).

W bloku nawiasów używam vib („wybierz blok wewnętrzny”)

Wewnątrz klamry nawiasów klamrowych możesz użyć viB(„wielka B”)

Aby dokonać wyboru „włącznie” (wybierz także cudzysłowy, nawiasy lub nawiasy klamrowe), możesz użyć azamiast i.

Możesz przeczytać więcej na temat wyboru obiektów Text w podręczniku lub :help text-objectsw vimie.

CMS
źródło
dzięki za tę wskazówkę, szukałem i prosiłem o coś podobnego i nie byłem zadowolony z moich wyników. Niesamowite.
alfredodeza
ta wskazówka jest bardzo prosta i łatwa do popełnienia w pamięci mózgu i mięśni. dzięki.
Ghazaly
To bardzo przydatna wskazówka. Nigdy więcej grzebania przy dodatkowych naciśnięciach klawiszy. Dziękuję za link.
Rai
27

Ta metoda selekcji jest wbudowana i dobrze opisana w pomocy Vima. Obejmuje tagi XML i więcej.

Zobaczyć :help text-objects.

Michael
źródło
1
: pomóż obiektom tekstowym zbliżyć się do przydatnych rzeczy ... możesz przynajmniej wymienić niektóre z typowych, takich jak „i a (w trybie wizualnym.
Stobor
2
(Również +1, ponieważ mimo że jestem długoletnim użytkownikiem vima, nie wiedziałem o nich!)
Stobor
@Stobor. Pozdrawiam naprawił to odniesienie
Michael
21

Do wyboru w ramach pojedynczych cytatów użyj vi'.

Do wyboru w nawiasach użyj vi(.

Canopus
źródło
3
Uwaga: ci'lub ci(do zmiany zamiast wizualnego wyboru. Ale robi dokładnie to, czego chciałem. Dzięki :)
justnorris
Drugi działa tylko w obrębie tego () bloku, więc zwykle robię %vi(lub%vib
816-8055
7

Użyj strzałek lub, hjklaby przejść do jednego z wyrażeń braketingowych, a następnie vwybierz tryb wizualny (tzn. Wybierając), a następnie %przejdź do drugiego nawiasu.

Stobor
źródło
5
(niestety nie robi cytatów ...)
Stobor
3

Napisz funkcję Vima w .vimrc za pomocą searchpairwbudowanej funkcji:

searchpair({start}, {middle}, {end} [, {flags} [, {skip}
            [, {stopline} [, {timeout}]]]])
    Search for the match of a nested start-end pair.  This can be
    used to find the "endif" that matches an "if", while other
    if/endif pairs in between are ignored.
    [...]

( http://vimdoc.sourceforge.net/htmldoc/eval.html )

Adrian Panasiuk
źródło
2

Chciałbym dodać szczegół do najczęściej głosowanej odpowiedzi:

Jeśli używasz gvim i chcesz skopiować do schowka, użyj

"+<command>

Aby skopiować całą zawartość między nawiasami (lub parens lub nawiasami klamrowymi)

Na przykład: "+yi}skopiuje do schowka całą zawartość między nawiasami klamrowymi, na których znajduje się kursor.

yuriploc
źródło
2
Jest to całkowicie ortogonalne dla problemu i nie powinno być odpowiedzią. Możesz napisać to na każde pytanie, o które pytasz y.
rura
Jest to dodatek do odpowiedzi, a nie sama odpowiedź.
yuriploc
To powinna być edycja tej odpowiedzi, ten post-as-nie odpowiada na pytanie.
rura
To jest reklama NIE używająca gvima :) Kto potrzebuje dodatkowych dwóch naciśnięć klawisza shift + w swoim życiu?
Paul Parker
1

Zrobiłem wtyczkę vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Zapewnia obiekty tekstowe dla najbliższych par cytatów dowolnego typu. Używanie tylko iqlubaq pozwala operować na treści pojedynczych ('), podwójnych (") lub tylnych (`) cytatów, które aktualnie otaczają kursor, znajdują się przed kursorem lub z tyłu (w tej kolejności preferencji) Innymi słowy, przeskakuje do przodu lub do tyłu, gdy jest to konieczne, aby dotrzeć do cytatów.

Łatwiej to zrozumieć, patrząc na przykłady (kursor jest pokazany za pomocą |):

  1. Przed foo '1, |2, 3' bar:; po naciśnięciu diq:foo '|' bar
  2. Przed foo| '1, 2, 3' bar:; po naciśnięciu diq:foo '|' bar
  3. Przed foo '1, 2, 3' |bar:; po naciśnięciu diq:foo '|' bar
  4. Przed foo '1, |2, 3' bar:; po naciśnięciu daq:foo | bar
  5. Przed foo| '1, 2, 3' bar:; po naciśnięciu daq:foo | bar
  6. Przed foo '1, 2, 3' |bar:; po naciśnięciu daq:foo | bar

Powyższe przykłady podano dla pojedynczych cudzysłowów, wtyczka działa dokładnie w ten sam sposób dla cudzysłowów podwójnych (") i wstecz (`).

Można również używać innych operatorów: ciq, diq, yiq, viq, itd

Więcej informacji znajdziesz na stronie github, do której prowadzi link.

Anton Beloglazov
źródło
-6

Prosta mapa klawiszy w vimie rozwiązałaby ten problem. map viq F ”lvf” hh Powyższe polecenie mapuje viq na klawisze, aby przeszukiwać cudzysłowy. Zamień „na dowolną postać i utwórz mapy klawiszy. Wstaw to w vimrc podczas uruchamiania i powinieneś być w stanie używać go za każdym razem.


źródło