2009-12-16 10 views
10

Powiel możliwe:
Case preserving substitute in VimVIM: Jak zachować sprawę do wyszukiwania i zastąpić

to możliwe, aby wykonać wyszukiwanie i zamienianie w vim, który zachowuje przypadek szukanej ? To była przydatna funkcja w intelliJ, której mi brakuje.

Na przykład coś takiego:

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

taka, że:

user->person 
User->Person 

Innym przykładem z wielu znaków, aby zachować:

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

taka, że:

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

Odpowiedz

7

Istnieje kilka metod, które mogą być podjęte. Jeśli chcesz trzymać się podstawowych funkcji Vima, można zrobić coś jak

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

Jeśli Vim zbudowany z powiązaniami Perl, można skorzystać z :perldo. W zależności od długości pasujących/zastępujących słów i miejsca, w którym chcesz zachować, może to nie działać.

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

Lub można skorzystać z jednego z variousscripts że wdrożenie takiej funkcjonalności.

+0

SmartCase wygląda tak, jak chcę –

+0

Ta odpowiedź pomogła mi podwójnie. Użyłem przechowalni do wyszukiwania przy zachowaniu wielkości liter. Wróciłem do twojej odpowiedzi, aby wymyślić, jak wykonać wyszukiwanie i zastąpić je różnymi pisownymi odmianami pluracji (grupa/grupy => ciało/ciała). –

2

Redone odpowiedź po podaniu go niektórzy uważali ;-)

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

Oczywiście można go poprawić, ale idea pozostaje.

2

Jest plugin dla vim: keepcase.vim

+0

To jest bliskie, ale zaktualizowałem to pytanie innym przykładem zastąpienia CamelCase, którego ta wtyczka prawdopodobnie nie jest w stanie obsłużyć, chyba że się mylę. Pierwszy przykład działa jak: SubstituteCase # \ cuser # osoba # g –

Powiązane problemy