Podczas wykonywania polecenia ci"
Vim edytuje tekst wewnątrz następnego cytowanego ciągu w wierszu, nawet jeśli kursor znajduje się poza znakami cudzysłowu. Jednak po wykonaniu ci(
tej czynności działa tylko wtedy, gdy kursor znajduje się w nawiasach.
Dlaczego? Czy ci(
można sprawić, aby skoczył do pierwszego wystąpienia (
tak jak ci"
robi?
Przykładowy tekst (przy użyciu składni Erlanga), w którym gram:
?assertEqual({200, "OK"}, status(FirstResponse)),
% ^
% Here I'm expecting ci( to jump in to the parenthesis ( ci" works)
Odpowiedzi:
Po krótkim spojrzeniu na dokumentację (
help v_aquote
,help v_iquote
) jestem skłonny powiedzieć, że jest to błądci"
, a nie brakci(
. Obserwowaneci(
zachowanie jest zgodne zci{
ici[
.To powiedziawszy, możesz uzyskać pożądane zachowanie
ci(
dzięki temu mapowaniu:--- EDYTOWAĆ ---
--- (To pytanie zostało przeniesione do superużytkownika, którego nie jestem członkiem)
Następująca funkcja / mapowanie ma różne zachowanie w zależności od tego, czy
(
zostanie wykryty poprzedni . Rozwiązuje(a) (b)
problem z moim oryginalnym mapowaniem (jak wskazano w komentarzach). Mimo to może nie być idealny ...źródło
(|a) (b)
gdzie|
jest pozycja kursora. To w pewnym sensie psuje zachowanieci(
w tym konkretnym przypadku.f)ci(
ale wtedy w twoim pierwotnym pytaniu zostaną wybrane niewłaściwe nawiasy. Wygląda na to, że konieczne jest bardziej złożone ogólne rozwiązanie.f(
.Powodem jest to, że nawiasy klamrowe i nawiasy klamrowe są parami. Dlatego mogą się zagnieżdżać.
Pojedyncze i podwójne cudzysłowy na ogół nie mogą się zagnieżdżać (z wyjątkiem skryptów bash ze
"$("something")"
składnią, więc można znaleźć obiekt tekstowy, nawet jeśli kursor nie znajduje się w nim, ponieważ nie może być żadnego obiektu zewnętrznego.źródło
Myślę, że
"
to jedyne obiekty tekstowe, które działają w ten sposób, tj. Wybierz następny pasujący wzór w linii.Pomoc może wyjaśnić, dlaczego:
Najwyraźniej Vim próbuje znaleźć cytowany tekst, wyszukując od początku wiersza . Więc nie ma znaczenia, gdzie jesteś na linii. (Jednak wydaje się, że to nie działa, gdy kursor znajduje się za cytowanym tekstem)
źródło
ci"
ponieważ kursor nie zaczyna się od cytatu, więc przypadek podany w dokumentacji nie ma zastosowania.