Korvaa VIM: llä, käytä hakukuvion osaa uudelleen

Työskentelen VIm -palvelun kanssa ja yritän asettaa etsi ja korvaa -komento tehdäksesi korvauksia, joissa voin käyttää uudelleen säännöllistä lauseketta, joka on osa hakumerkkijononi.

Yksinkertainen esimerkki olisi rivi, johon haluan korvata (10) kohtaan {10}, missä 10 voi olla mikä tahansa numero.

Tulin niin pitkälle

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

joka vastaa tarkalleen haluamaani osaa.

Nyt vaihdin, yritin

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

Mutta, tämä antaa tulosteen {(10)}

Sitten yritin

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

Se kuitenkin antoi me ({10}), jonka myös suljin, mutta en sitä, mitä haluan.

Luulen tarvitsevani jonkinlaista muuta merkintää / takaisinviittausta tämän

, mutta en tiedä mistä etsiä. Kysymys kuuluu, voidaanko tämä tehdä VIM: ssä, nd jos on, miten?

Vastaa

\0 on koko ottelu. Jos haluat käyttää vain osan siitä, sinun on määritettävä se näin ja käytettävä \ 1

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

Yksityiskohtaisemmat ohjeet löydät täällä tai vim-ohjeessa.

Kommentit

  • Huomaa, että sieppauksen suluissa on poistettu vinoviiva.

vastaus

Olen äskettäin perinyt vanhan koodin ja halusin korvata kaikki esiintymät, kuten:

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

logging.info("xy") 

tai

logging.info(x,y) 

Edellisen vastauksen pohjalta ja toivoen, että joku hyötyy siitä, käytin seuraava komento, joka muuttaa kaikki esiintymät:

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

Jos korvaat % sanoilla . ja poista /g päädyt

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

, jonka avulla voit mene yli jokainen ottelu ja valitse, muutatko sitä vai ei.

Vastaa

Parempi tapa antaa sinun käydä läpi jokainen ottelu on lisää ”c” koodin loppuun sen sijaan, että menisit rivi riviltä

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

Kommentit

  • Tämä ei todellakaan ' t vastaa alkuperäiseen kysymykseen millään tavalla

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *