2012-05-17 23 views
16

Al fine di sostituire ogni occorrenza di "&" a "& &" nel campo dalla linea di corrente a 30 più linee, ho emetto :.,+30s/\\&/\\&\\&/g ma Vim dice "Pattern non trovato ". Sto sfuggendo al carattere speciale "&" con doppio backslash "\".vim: ricerca e sostituzione per "&"

risposta

13

Prova a non scappare tutto - :.,+30s/&/&&/g sembra funzionare per me.

+12

Per chiarire: questo non è perché '&' non è un metacarattere: mentre nel pattern è vero (a meno che '&' sia stato fatto scappare o la modalità molto-magica sia stata attivata), nella stringa di sostituzione '&' significa lo stesso di '\ 0': l'intera sottostringa corrispondente. Poiché "l'intera sottostringa corrispondente" è una stessa e commerciale, questa soluzione funziona. Si noti inoltre che se l'opzione 'magic' è stata disattivata, l'istruzione "& in replacement rappresenta l'intero pattern abbinato" è falsa in un numero di comandi incluso ': s'. – ZyX

10

Non è necessario sfuggire alla e commerciale nella prima parte di un'espressione regolare. Ha solo un significato speciale nella seconda parte (sostituibile).

Si cercano motivi che dicano "\ &" e sostituirli con motivi che indicano "\ & \ &".

Il modo più semplice per sostituire è solo:

:.,+30s/&/&&/g 
1

può anche essere osservazione utile che se avete bisogno di cambiare la posizione & ad esempio: _& al &_ il & deve essere sfuggito solo nelle dichiarazioni sostitutive dell'espressione sostitutiva:

:.,+30s/ &/\& /g 
     ^
Problemi correlati