W Vimie mam następujący tekst:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
Chciałbym dodać „,” na końcu każdego wiersza. Poprzedni tekst stanie się następujący:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
Czy ktoś wie, jak to zrobić? Czy można to osiągnąć za pomocą trybu bloków wizualnych?
Odpowiedzi:
To zrobi to dla każdej linii w pliku:
Jeśli chcesz zrobić podzbiór wierszy zamiast całego pliku, możesz określić je zamiast
%
.Jednym ze sposobów jest dokonanie wizualnego zaznaczenia, a następnie wpisanie
:
. Wypełni:'<,'>
za Ciebie, a następnie wpisz resztę (Zauważ, że wystarczy dodaćs/$/,/
)źródło
'
, powinien być:'<,'>s/$/,/
.g
? (:'<,'>s/$/,/g
)/$/
pasuje tylko raz.W rzeczywistości istnieje sposób, aby to zrobić za pomocą trybu bloku Visual. Wystarczy nacisnąć
$A
w trybie bloku Visual, aby dołączyć do końca wszystkich wierszy w zaznaczeniu. Dołączony tekst pojawi się we wszystkich wierszach zaraz po naciśnięciu Esc.Więc to jest możliwe rozwiązanie:
Oznacza to, że w trybie normalnym Visual wybiera akapit
vip
, przełącza się do trybu blokowania Visual CTRLV, dodaje$A
przecinek do wszystkich wierszy,
, a następnie Escpotwierdza naciśnięcie .Dokumentacja jest pod adresem
:h v_b_A
. Istnieje nawet ilustracją tego, jak to działa w sekcji Przykłady::h v_b_A_example
.źródło
C-V
), a następnie przesuń kursor na koniec linii$
i dołącz do nich wszystkichA
. Pokochasz:h v_b_A
, co jest naprawdę dokładne.<C-V>ip
zamiastvip<C-V>
.'virtualedit'
- testowałem to.) Potwierdzam, że nie działa w czystym vimie. Dzięki za wiadomość!Inne rozwiązanie, wykorzystujące inną wspaniałą funkcję:
Zobacz
:help :normal
.źródło
:normal
. Znalazłem to pouczające!tryb ex jest najłatwiejszy:
źródło
Polecenie zamiany można zastosować do selekcji wizualnej. Zrób wizualny blok na liniach, które chcesz zmienić, a następnie wpisz :i zwróć uwagę, że linia poleceń jest inicjowany tak:
:'<,'>
. Oznacza to, że polecenie zamiany będzie działać na wizualnym zaznaczeniu, jak na przykład:I to jest podstawienie, które powinno działać w twoim przykładzie, zakładając, że naprawdę chcesz przecinek na końcu każdej linii, jak wspomniałeś. Jeśli są spacje końcowe, może być konieczne odpowiednie dostosowanie polecenia:
Spowoduje to zastąpienie dowolnej ilości białych znaków poprzedzających koniec wiersza przecinkiem, skutecznie usuwając końcowe białe znaki.
Polecenia te mogą pracować na różnych liniach, na przykład przez kolejne 5 kierunkach:
:,+5s/$/,/
albo na cały bufor::%s/$/,/
.źródło
Jeśli chcesz dodać „,” na końcu wierszy zaczynających się od „key”, użyj:
źródło
:g/key/s/$/,
. Zobacz:help :global
.Mam
<M-DOWN>
(alt strzałka w dół) przypisane do,<DOWN>.
dzięki czemu mogę bardzo szybko powtórzyć ostatnie polecenie w serii linii. dzięki temu mapowaniu mogę:A następnie przytrzymaj alt, naciskając kilkakrotnie w dół, aby dodać przecinek na końcu każdego wiersza.
Działa to dobrze, ponieważ pozwala na bardzo dobrą kontrolę nad tym, co robią linie, i nie otrzymuje zmiany.
(Mam również inne strzałki odwzorowane podobnie, aby umożliwić łatwe powtarzanie
.
)Oto linia mapowania do wklejenia do twojego vimrc:
źródło
$ dopasowuje koniec linii
źródło
$
linię, nie tylko,
./g
służy do wykonywania podstawienia w każdym wystąpieniu w wierszu. Ponieważ jest tylko jeden$
w linii, możesz go bezpiecznie upuścić.Do wykonania zadania można również użyć makra.
źródło