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