Czy w Vimie istnieje plugin, który używa %, aby dopasować odpowiedni podwójny cudzysłów (")?

The % key jest jedną z najlepszych cech Vima: pozwala przeskoczyć z { do }, [ do ], i tak dalej.

Nie działa jednak domyślnie z cudzysłowami: " lub ', prawdopodobnie dlatego, że cytat otwierający i zamykający mają ten sam znak, co utrudnia implementację.

Myśląc nieco bardziej o problemie, jestem przekonany, że należy go zaimplementować, licząc czy liczba poprzedzających cudzysłowów jest nieparzysta czy parzysta i przeskakując do poprzedni lub następny cytat, odpowiednio.

Zanim spróbuję sam to wdrożyć, chciałbym wiedzieć, czy ktoś już to zrobił?
Author: Arslan Ali, 2009-09-18

5 answers

W zależności od powodu, dla którego tego potrzebujesz, może być lepszy sposób, aby osiągnąć to, czego szukasz. Na przykład, jeśli masz następujący kod:

foo(bar, "baz quux")
              ^

A twój kursor jest na ^ i chcesz zastąpić wszystko wewnątrz cudzysłowów czymś innym, użyj ci". To używa Vim "obiektów tekstowych" do zmiany (c) wszystkiego wewnątrz (i) cudzysłowów (") i umieszcza cię w trybie wstawiania w następujący sposób:

foo(bar, "")
          ^

Wtedy możesz zacząć pisać tekst zastępczy. Istnieje wiele innych obiektów tekstowych, które są naprawdę przydatne dla tego rodzaju skrótów. Naucz się (i używaj) jednej nowej komendy Vima tygodniowo, a w mgnieniu oka staniesz się ekspertem!

 72
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 11:56:44

Odpowiedź Grega była bardzo przydatna, ale podobają mi się również polecenia " f " I "F", które przesuwają kursor do przodu i do tyłu do znaku, który naciskasz po poleceniu.

Więc naciśnij f", aby przejść do następnego" znak i F", aby przejść do poprzedniego.

 31
Author: Vereb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 17:33:48

Chciałbym rozszerzyć odpowiedź Grega i wprowadzić surround.vim plugin.

Załóżmy, że zamiast edytować treść cudzysłowów, chcesz zmodyfikować same znaki ". Powiedzmy, że chcesz zmienić z cudzysłowów podwójnych na cudzysłowy pojedyncze.

foo(bar, "baz quux")
              ^

Wtyczka surround pozwala zmienić to na

foo(bar, 'baz quux')
              ^

Po prostu wykonując następujące polecenie: cs"' (które brzmi: "Zmień otaczające cudzysłowy na single-cytaty").

Można również usunąć znaki cudzysłowu po prostu uruchamiając: ds" (co brzmi: "Usuń otaczające podwójne cudzysłowy).

Jest dobre wprowadzenie do wtyczki surround tutaj.

 8
Author: nelstrom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:15

Wiem, że to pytanie jest stare, ale tutaj jest wtyczka do użycia%, aby dopasować odpowiedni podwójny cytat:

Https://github.com/airblade/vim-matchquote

 6
Author: Andy Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-25 15:05:03

Uznałem tę technikę za bardzo przydatną przy przechodzeniu do początku / końca bardzo długiego cytowanego ciągu.

  1. gdy kursor znajduje się wewnątrz łańcucha, wizualnie Zaznacz cały łańcuch za pomocą vi" LUB vi'
  2. przejdź do początku/końca ciągu naciskając o
  3. naciśnij klawisz escape, aby wyjść z trybu wyboru wizualnego

To rzeczywiście zajmuje kursor obok znaku początku / końca cytatu, ale nadal wydaje się bardzo pomocne.

Edytuj

Dodanie doskonałego Stefana skomentuj tutaj, co jest lepszą opcją dla każdego, kto może przegapić komentarz.

Jeśli używasz VA" (i VA'), to faktycznie wizualnie wybierze również same cudzysłowy.

– Stefan van den Akker

 3
Author: th1rdey3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-12 12:22:57