Cserélje ki a VIM használatával, használja újra a keresési minta egy részét

A VIm címmel dolgozom, és megpróbálok beállítani egy search and cserélje a parancsot néhány olyan helyettesítéshez, ahol újra felhasználhatom a reguláris kifejezést, amely a keresési karakterláncom része.

Egyszerű példa egy olyan sor, ahol lecserélni akarom a (10) a {10} címre, ahol 10 tetszőleges szám lehet.

Idáig eljutottam

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

amely pontosan megfelel annak a résznek, amelyet szeretnék.

Most a pótlást kipróbáltam

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

De, ez ad kimenetként {(10)}

Ezután megpróbáltam

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

Ez azonban me ({10}), amit szintén bezárok, de nem azt, amit akarok.

Úgy gondolom, hogy a \0, de nem tudom, hova nézzek. Tehát az a kérdés, hogy ezt meg lehet-e tenni VIM-ben, egy Második, ha igen, hogyan?

Válasz

\0 az egész meccs. Csak annak egy részének használatához be kell állítania ezt, és használnia kell a következőt: \ 1

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

Részletesebb utasításokat talál a itt vagy a vim súgóban.

Megjegyzések

  • Ne feledje, hogy a rögzítés zárójelei vissza vannak húzva.

Válasz

Nemrég örököltem néhány régi kódot, és minden olyan előfordulást le akartam cserélni, például:

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

logging.info("xy") 

vagy

logging.info(x,y) 

Az előző válaszra építve és abban a reményben, hogy valaki profitálni fog belőle a következő parancs, amely megváltoztatja az összes előfordulást:

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

Ha a % szöveget . és távolítsa el a /g elemet, és végül a következő

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

lesz, amely lehetővé teszi, hogy Kelj át minden mérkőzést, és válassza ki, hogy megváltoztatja-e vagy sem.

Válasz

Az egyes mérkőzések áttekintésének jobb módja az, ha adjon hozzá egy “c” -t a kód végéhez, ahelyett, hogy soronként haladna

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

Megjegyzések

  • Ez valóban nem ' nem válaszolja meg semmilyen módon az eredeti kérdést

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük