Powiedzmy, że mam dziesięć wierszy i chcę dodać tekst przed słowem występującym w tych wierszach? Nie musi znajdować się na początku wiersza.
Z:
sdfsd foo sdfsd
sfsd foo fsdf
sdfsdf foo sdfsdf
do:
sdfsd bar(foo sdfsd
sfsd bar(foo fsdf
sdfsdf bar(foo sdfsdf
Jest to również możliwe, aby nie tylko Dołączenie bar(
ale faktycznie przestrzennego foo
z bar(foo)
?
Chciałbym również w szybki sposób dołączyć //
komentarze do wielu wierszy (komentarze w stylu C).
Używam Vim / GVim 7.2.
Odpowiedzi:
Przejdź do pierwszego
foo
, naciśnij Ctrl-, vaby przejść do trybu wizualnego blokowania i naciskaj, aż wszystkie liniefoo
zostaną zaznaczone. Następnie naciśnij Shift-, iaby wstawić na początku (bloku). Po zakończeniu i naciśnięciu Escwstawione znaki zostaną dodane do każdego wiersza po lewej stronie zaznaczonego bloku.Aby wstawić na końcu, naciśnij ponownie Ctrl- v, przesuń w górę / w dół, aby zaznaczyć wszystkie dotknięte linie, a następnie naciśnij Endlub, $aby rozszerzyć zaznaczenie aż do końca linii. Teraz możesz nacisnąć Shift-, aaby dodać na końcu wszystkich wierszy, tak jak poprzednio Shift- i.
Wizualnego wyboru można również dokonać za pomocą zwykłych poleceń ruchu. Aby skomentować cały blok w C, możesz przejść do nawiasu otwierającego i wpisać Ctrl- v % Shift- i // Esc.
źródło
i
nic się nie dzieje. Po naciśnięciushift+i
zaznaczenie znika, ale mogę wstawić tekst (w bieżącym miejscu, w którym znajduje się tylko kursor).Aby odpowiedzieć na Twoje pierwsze pytanie, poniżej
będzie szukać
foo
i otoczy dopasowany wzórbar()
./g
Zrobi to wiele razy w jednej linii.Ponieważ po prostu dopasowujesz
foo
, możesz zrobić proste:s/foo/bar(foo)/g
. Powyższe zadziała jednak, jeśli zdecydujesz się dopasować na podstawie wyrażenia regularnego, a nie prostego słowa (npf[a-z][a-z]
.). Znak „&” powyżej oznacza dopasowany element.źródło
:
is
określa, na których liniach operuje. Nic nie oznacza tylko aktualnej linii.1,30
oznacza linie od 1 do 30 (włącznie).'<,'>
oznacza linie w bieżącej selekcji wizualnej.Aby poprzedzić zestaw linii, używam jednej z dwóch różnych metod:
Jedną z metod jest wybór bloku (wspomniany przez coś). Ogólnie rzecz biorąc, możesz wybrać prostokątny region ctrl-Vza pomocą ruchu kursora. Po podświetleniu prostokąta naciśnięcie shift-Ispowoduje wstawienie znaków po lewej stronie prostokąta lub shift-Adoda je po prawej stronie prostokąta. Możesz więc użyć tej techniki do utworzenia prostokąta zawierającego skrajną lewą kolumnę linii, które chcesz poprzedzić, naciśnij shift-I, wpisz przedrostek, a następnie naciśnij klawisz Escape.
Innym podejściem jest użycie substytucji (jak wspomniał Brian Agnew). Podstawienie Briana wpłynie na cały plik (% w poleceniu oznacza „wszystkie linie”). Aby wpłynąć tylko na kilka linii, najłatwiejszym podejściem jest uderzenie shift-V(co włącza tryb linii wizualnych) w pierwszej / ostatniej linii, a następnie przejście do ostatniej / pierwszej linii. Następnie wpisz:
^ To wyrażenie regularne (w tym przypadku początek wiersza). Wpisując to w trybie linii wizualnej, automatycznie zobaczysz „<,”> wstawione przed s. Oznacza to, że zakres zastąpienia będzie wyborem wizualnym.
Dodatkowa wskazówka: jeśli przedrostek zawiera ukośniki, możesz je zmienić za pomocą ukośnika odwrotnego lub możesz użyć innego znaku interpunkcyjnego jako separatora w poleceniu. Na przykład, aby dodać komentarze do linii C ++, zwykle piszę:
Aby dodać sufiks, metoda podstawiania jest ogólnie łatwiejsza, chyba że wszystkie linie mają dokładnie taką samą długość. Po prostu użyj $ jako wzorca zamiast ^, a Twój ciąg zostanie dołączony zamiast poprzedzonego.
Jeśli chcesz jednocześnie dodać przedrostek i sufiks, możesz zrobić coś takiego:
Znak. * Oznacza całą linię. Znak & w zastąpieniu zwraca dopasowany tekst (całą linię), ale teraz będzie miał dodany przedrostek i sufiks.
BTW: podczas komentowania kodu prawdopodobnie będziesz chciał go później odkomentować. Możesz użyć visual-block ( ctrl-V), aby wybrać ukośniki, a następnie nacisnąć d, aby je usunąć, lub możesz użyć substytucji (prawdopodobnie z wizualną selekcją linii, wykonaną za pomocą shift-V), aby usunąć wiodące ukośniki w następujący sposób:
źródło
: normalne na ratunek!
: norm (al) odtwarza polecenia tak, jakbyś je wpisał:
Lub w jednej linii:
Jeśli używasz systemu Windows, wpisz ctrlqzamiast ctrlv.
źródło
Jeszcze inną możliwością (prawdopodobnie niezbyt przydatną w twoim przypadku testowym, ale przydatną w innych sytuacjach) jest odgrodzenie obszaru, który chcesz zmienić, znakami.
:'a,'b s/foo/bar(&)/
Zwykle lubię tryb blokowania wizualnego, jeśli wszystko jest widoczne na ekranie, i zwykle wolę znaki, jeśli początek i koniec są oddzielone wieloma ekranami.
źródło
m
zamiast'
ustawiać nowy znacznik.'
służy do przeskakiwania do linii istniejącego znacznika.`
przeskakuje do wiersza i kolumny tego znacznika.Innym prostym wyrażeniem regularnym jest:
źródło
W przypadku komentarzy w stylu C użyj odpowiedzi wyrażenia regularnego autorstwa Briana, dopasuj zakończenie linii
$
i wstaw.źródło