2009-12-16 10 views
10

Eventuali duplicati:
Case preserving substitute in VimVIM: come preservare caso per la ricerca e sostituzione

E 'possibile fare una ricerca e sostituzione in vim che conserva il caso del termine di ricerca ? Questa è stata una caratteristica utile in IntelliJ che mi manca.

Ad esempio, qualcosa come:

:s/[uU]ser/[pP]erson/ (obviously, this doesn't work) 

Tale che:

user->person 
User->Person 

altro esempio con più caratteri per preservare:

:s/[mM]y[uU]ser/[tT]his[pP]erson/g 

Tale che:

myuser->thisperson 
myUser->thisPerson 
MyUser->ThisPerson 

risposta

7

ci sono alcuni approcci che possono essere adottati. Se si vuole attaccare con funzionalità di base Vim, si può fare qualcosa di simile

:%s/[uU]ser/\=submatch(0) ==# 'user' ? 'person' : 'Person'/g 

Se avete Vim costruito con binding Perl, è possibile fare uso di :perldo. A seconda della lunghezza delle parole di corrispondenza/sostituzione e del caso in cui si desidera conservare, questo può o non può funzionare.

:perldo s/(user)/"\L$1"^$1^'person'/ieg 

Oppure si può fare uso di uno dei variousscripts che implementano tale funzionalità.

+0

SmartCase sembra quello che voglio –

+0

Questa risposta mi ha aiutato doppiamente. Ho usato conservare per ricerche di conservazione del caso. Sono tornato alla tua risposta per capire come fare la ricerca e sostituirla con varie grafie di pluralizzazione (gruppo/gruppi => corpo/corpi). –

2

Redone la risposta dopo aver dato qualche pensiero ;-)

:[email protected]\([Uu]\)[email protected]\=((submatch(1)=="U")?"P":"p")."erson"@gc 

Naturalmente può essere migliorato, ma l'idea rimane.

2

C'è un plugin per vim: keepcase.vim

+0

Questo è vicino, ma ho aggiornato la domanda con un altro esempio con la sostituzione CamelCase che questo plugin non sembra in grado di gestire, a meno che non mi sbagli. Il primo esempio funziona come: SubstituteCase # \ cuser # person # g –

Problemi correlati