2015-05-03 36 views
7

Recentemente ho trovato un comando sostituto per vim in cui l'autore ha avuto l'/ sostituito da un ! come questo: :%s!foo!bar e non capisco la differenza con il traditionnal :%s/foo/bar.Vim cosa è l'uso del punto esclamativo al comando sostituto

Ho cercato della documentazione su questa sintassi ma non ho trovato nulla di rilevante, quindi ho provato a sperimentare da solo e non sono riuscito a capire chiaramente la differenza tra le due forme. Ecco cosa ho trovato:

  • Non si può mescolare / e ! nello stesso comando. Ad esempio: :%s/foo!bar non riuscirà.
  • Il segno ! può essere utile con motivi che includono uno /. Ad esempio, se voglio sostituire </ con % nel mio file, posso fare :%s!</!%!g anziché :%s/<\//%/g: non ho bisogno di sfuggire a / nel primo comando, ma sarei sorpreso se quello fosse l'unico uso di !.
  • Alcune espressioni regolari non funzionano con / e funzionano in modo corretto con ! ma, poiché non sono certo un regex master, non sono sicuro di questo punto.

Quindi la mia domanda è: qual è la differenza tra / e ! in sostituzione vim e quando devo usare uno invece dell'altro?

+0

Questa domanda è stata [pubblicata anche su vi.stackexchange] (http://vi.stackexchange.com/q/3156/51). – Carpetsmoker

+0

Effettivamente ho fatto un doppio post per errore l'ho segnalato su vim per sapere cosa dovrei fare. – statox

risposta

11

Entrambi possono essere utilizzati finché sono coerenti (non miscelati). Solitamente viene utilizzato /. Ma è possibile utilizzare altro char se la stringa che si desidera sostituire contiene più /. Ad esempio:

:%s!/usr/local/bin!/usr/bin! 
:%s:/usr/local/bin:/usr/bin: 
:%s,/usr/local/bin,/usr/bin, 
+0

Ok, grazie per la tua risposta! Dove posso trovare un elenco di caratteri che possono essere utilizzati come separatori? O quelli che non possono essere utilizzati? – statox

+1

@statox, è documentato in ': help E146' (da': help change.txt'). – tivn

+0

Questo è esattamente quello che stavo cercando! Molte grazie! – statox

Problemi correlati