Zamień za pomocą VIM, ponownie wykorzystaj część wzorca wyszukiwania


29

Pracuję VImi próbuję skonfigurować polecenie wyszukiwania i zamiany, aby wykonać pewne zamiany, w których mogę ponownie użyć wyrażenia regularnego, które jest częścią mojego ciągu wyszukiwania.

Przykładem byłaby prosta linia, gdzie chcę, aby wymienić (10)się {10}, gdzie 10 może być dowolną liczbą.

Zaszedłem tak daleko

  .s/([0-9]*)/what here??/

który pasuje dokładnie do tej części, którą chcę.

Teraz wymiana, próbowałem

  .s/([0-9]*)/{\0}/

Ale daje to jako wynik {(10)}

Potem spróbowałem

 .s/(\zs[0-9]*\ze)/{\0}/

To mi jednak dało ({10}), co też zamykam, ale nie to, czego chcę.

Myślę, że zamiast tego potrzebuję innego rodzaju oznaczania / odsyłaczy \0, ale nie wiem, gdzie szukać. Pytanie brzmi: czy można tego dokonać w vimie, a jeśli tak, to w jaki sposób?

Odpowiedzi:


37

\0to cały mecz. Aby użyć tylko jego części, musisz ustawić go w ten sposób i użyć \ 1

.s/(\([0-9]*\))/{\1}/

Bardziej szczegółowe instrukcje można znaleźć tutaj lub w pomocy vim.


Zauważ, że nawiasy dla przechwytywania są poprzedzane odwrotnym ukośnikiem.
Randall

0

Niedawno odziedziczyłem trochę starszego kodu i chciałem zastąpić wszystkie wystąpienia, takie jak:

print "xx"
print x,y
print 'xx'

do

logging.info("xy") 

lub

logging.info(x,y)

Opierając się na poprzedniej odpowiedzi i mając nadzieję, że ktoś skorzysta z niej, użyłem następującego polecenia, które zmieni wszystkie wystąpienia:

%s/print\( .*\)/logging.info\(\1\)/g

Jeśli zastąpi %się .i usunąć /gskończy się z

.s/print\( .*\)/logging.info\(\1\)

pozwoli ci to przejrzeć każdy mecz i wybrać, czy chcesz go zmienić, czy nie.


0

Lepszym sposobem na przejrzenie każdego dopasowania jest dodanie litery „c” na końcu kodu, zamiast przechodzenia między wierszami

%s/print\( .*\)/logging.info\(\1\)/gc

To naprawdę nie odpowiada w żaden sposób na pierwotne pytanie
Bernhard
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.